Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 88

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 218

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 219

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 220
PK!modules/exif.sonuȯELF>n@x@8 @ 00!0!x;; KK!K!888$$``` Std``` PtdQtdRtd00!0!::GNUެI PXRG@ GJBE| pqX]soU _*7pQ{M N %)a9 (=S/i<, 8UF"P!Q! P!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizephp_info_print_table_startphp_info_print_table_rowmodule_registryzend_hash_str_existsphp_info_print_table_enddisplay_ini_entriesOnUpdateStringzend_multibyte_parse_encoding_list_efree__stack_chk_failphp_error_docref0zend_unregister_ini_entriesphp_strlcpyap_php_snprintfzend_parse_parametersstrlenmemcpy_safe_erealloc_estrdupphp_verror_php_stream_open_wrapper_exphp_getimagetype_php_stream_freezend_register_ini_entrieszend_register_long_constant_safe_emallocadd_assoc_stringl_exadd_assoc_string_exadd_assoc_null_exadd_index_longadd_index_stringadd_assoc_long_exadd_index_doubleadd_assoc_double_ex_array_initadd_assoc_zval_exzend_vspprintf_estrndupmemmovezend_spprintf_php_stream_tell_php_stream_seekexp_php_stream_readstrcmpstrncmpzend_multibyte_fetch_encodingzend_multibyte_encoding_converterphp_stream_stdio_ops_php_stream_getc__xstatphp_basenamememcmpstrstr_convert_to_stringphp_image_type_to_mime_typephp_file_le_pstreamphp_file_le_streamzend_fetch_resource2zend_parse_arg_str_slowzend_wrong_parameter_type_errorzend_parse_arg_bool_slowzend_wrong_parameters_count_error_zval_dtor_funcget_modulelibc.so.6_edata__bss_startexif.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64ii ui 0!v8!u@!@!`!@4!h!C!@3!!3!2!!9!B!@1!!B!O ! 0!(!BP!`/!X!Hh!X!@-!!`!'!!h!a! &!!r!"!!v(!n@!"!H!vp!!x!{!{!!!!!!!!!!!0!!8!H!`! !h!x!! !!!!`/!!!!`/!!!(!8!H!X!h!x!!!!!!!!!$(!.8!=H!KX!Xh!ex!r!!!W!!!!!!!(!8!H!X!h!x!!!!!!!+!<!S!^!(!r8!H!X!h!x!!!!!!! !!)!>!U(!X8!fH!nX!h!x!!!!!!!E!!!!D(!u8!H!X!h!Px!t![!!r!!X!!!!,!(!8!H!X!@h! x!!!!-!<!O!b!n!z! !$ !( !8 !H !X !h !x ! ! ! !T ! ! ! ! !*!!7!!M(!!c8!!pH!!DX!!{h!!x!!!!!!!!!!!!!!!!!!"!"!4("!N8"!hH"!{X"!h"!x"!"!"!"!"!"!"!"!"!)#!#!X(#!8#!fH#!X#!h#!x#!#!#! #!#!#!#!#!#!M$!9$!{($!8$!AH$!MX$!h$!x$!$!$!_$!$! $!u$!$!$!%!%!e(%!8%!H%!X%!h%!x%!%!%!%!%!_%!%!%!,%!&!&!(&!8&!:H&!AX&!Hh&!Ux&!a&!k&!O&![&!e&!&!&!'!'!?('!X8'!H'!X'!h'!x'!p'!}'!'!'!'!'!'!'!(!(!((!8(!TH(!X(!h(!x(!(!(!(!(!-(!(!7(!I(!T)!_)!q()!|8)!H)!X)!h)!x)!)!)!)!)!)!)!)!)!*!*! (*!8*!+H*!AX*!Lh*!`x*!t*!*!*!*!@*!*!*!*!+!+!(+!8+!H+!X+!h+! x+!+!)+!8+!G+!V+!h+!r+!}+!,!,!(,!=8,!H,!X,!h,!fx,!,!,!,! ,!,!#,!.,!9,!D-!M-!(-!8-!H-!X-!Xh-!fx-!k-!x-!-!-!-!-!-!-!.!.![(.!P8.!tH.!X.!h.!x.!.!&.!@.!Z.!m.!y.!.!.!/!/!(/!8/!H/!h/!x/!/!/!/!/!/!/!/!/!0!(0!80!H0!X0!h0!Xx0!0!0!0!"0!/0!?0!M0!0!a1!1!(1!81!H1!X1!h1!/x1!q1!X1!1!1!1!1!1!2!2!(2!82!XH2!X2!h2!x2!2!2!2!2!2!2!2!2!3!3!(3!H3!X3!h3!x3!3!3!3!X3!3!3!3!3!q4!4!(4!H4!X4!h4!%x4!?4!/4!;4!E4!L4!4!4!5!\5!r(5!85!H5!X5!h5!x5!5!5!5!5!5!5!5!5!6!,6!:(6!D86!SH6!ZX6!fh6!ox6!{6!6!6!6!6!6!6!6!7! 7!(7!/87!?H7!QX7!dh7!qx7!7!7!7!7!7!7!7!A7!8!8!(8!88!H8!X8!h8!x8!'8!\8!R8!k8!8!/8!?8!8!,9!9!(9!89!H9! X9!h9!$x9!59!G9!Q9!B9![9!9!9!9!4:!f:!s(:!D8:!}H:!X:!h:!x:!:!:!:!:!:!:!:!:!;!;!!(;!.8;!>H;!NX;!\h;!ex;!t;!;!;!;!;!;!;!;!!>!(>!8>!H>!#X>!1h>!Ix>!_>!m>!>!>!>!>!>!>! ?!?!4(?!I8?!bH?!xX?!h?!x?!?!?!?!?!?!+?!;?!0?!O@!j@!(@!8@!H@!X@!h@!x@!@!@!@!@!#@!4@!K@!S@!A!\A!g(A!q8A!HA!XA!hA!PxA!tA!A!A!A!A!A!A!A! B!B! (B!08B!HB!XB!@hB!QxB!cB!{B!B!B!B!B!B!B!rC!C!u(C!,8C!HC!XC!hC! xC!"C!8C!/C!QC!hC!uC!C!C!D!D!|(D!8D!HD!XD!hD!xD!D!D!D! D!D!D!D!.D!=E!ME!^(E!8E!HE!XE! hE!"xE!8E!/E!QE!hE!uE!E!E!E!uF!gF!(F!8F!eHF!XXF!hF!xF!F!F!F!F!F!F!F!F!G!G! G!$@G!G!-G!pxG!P!G!AG!MG!@yG!P!G!3H!jH!@y(H!P!8H!;XH!`H!pxpH!P!H!H!H!@yH!P!H!H!H!@yI!P!I!I!I! I!K!I!I! I!K!I!I!|I!K!I!I!PI!J!J!J!J!@J!XJ!J!J!#J!)J!K!0K!0HK!@`K!KK!ZP! G! P!(P!I!0P!P8P!yPP!pwXP!hP!P!pP! vP!O!O!O!O! O!AO!DM!M!M!M!M!M!M!N! N! N! N! N! (N!0N!8N!@N!HN!PN!XN!`N!hN!pN!xN!N!N!N!N!N!N!!N!"N!#N!$N!%N!&N!'N!(N!)N!*N!+O!,O!-O!.O!/ O!0(O!10O!28O!3@O!4HO!5PO!6XO!7`O!8hO!9pO!:xO!;O!<O!=O!>O!?O!@O!BO!CO!DO!EO!FHH HtH5 % hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% DHL$H11 H $D$ 1Hk1tDD$ q HLD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$$ HD$HD$ HD$HhD$0HtHFHuHhHIQHD$dH3%(tHHH f11"YHH 11<H11LH fH 'fL1H=f!LL$hAغLH eH=e1!LL$hAغLH eH=e1h!1H eHH=eF1)1L`1H fH )1H e1H)1H eHH=})1H )eHH=+e1Y)DD$D+$AUEAH bHDH=dP1vAY1AZ)IM1H L1M1.IcEL0H L1H=d8ARH S1AULH=tdA[[8H d11LLT$A LT$-AEH ɌLH=d1b8H1H H=c1-1H dLH=c[M>L1-1L1H #dL$1^-MH MH11CL 11H cLI,ILJELL$ H 011HMD$8oCMOH DH11yD$8FCAQH UMHt$011KAZA[CLe11H "cH#HqD$8HǃBH mcH11LH mAVIH HAV11A[A]O11H cHIOH cLb11H [bH\OHH fc111=HH b4H b(HH ;b11H1PHHH b1111HL11H aHNHH b111GH b11110O1H b1LbH$@W1lWD1\H lb11H AD$`\DH=A H: H9tHV Ht H= H5 H)HHH?HHtH5 HtfD= u+UH= Ht H=N d ]wHHGHGHGHG HG(ff. HHcH>@H]H]H]H]H]H]H]H]Hu]Hi]Ha]HW]HM]H\H^`SHS1H]H5]i1H]H5]O1H\H5\5H]H5]1H= H5\#tGH\H51HH5\1H[DH\H51ff.AWMAVIAUIATIUSHH8dH%(HD$(1Ht HvHuAMLLHLH|$(dH3<%(uXH8[]A\A]A^A_f.HCHL$ E1DL$HT$HHD$-ŃH|$DL$ff.AWEAVMAUIATIUHSHH8dH%(HD$(1Ht4HFHvE1HL$ HT$HH$H|$MELLHHAH|$(dH3<%(DuH8[]A\A]A^A_fH1Hf.ATUHSH0dH%(HD$(1=t'9tUHAH9t@HuHtuaHW]Ht$(dH34%(5H0[]A\DHAHtՅtщHH1)HcZHDIHMZ1 LLH1)HcyH H!%tDHJHDщ@H HHcH)HHH)HH"Ht  $DHHH!ʁ t€DHHHD@H HHcH)HQH)HHs$Ht D HxH0HHtH)HHHrH1H4HH9rHzH2HHt H)HHHH1H4HH9r D r D fD ftD@AUATUHH5mSH,dH%(HD$1H]<$11H H<$HHt~8tyHHx IHLHIHI|$I$ID$Ml$rCD,LeEHD$dH3%(uH[]A\A]fDE"fAWA1AVAUIATIԺ USHcIHHH H(pHcHc LH(HHH HEDD}HEA  H[]A\A]A^A_SLML1Iv"fA:t(1HuH[f.AzuA<HPuI9vL@ fHJHI9vHBALu L9u[@I9vIDfAEM9{MM)I9l@wIIAu)AueLI9f;f1ۉ[I"II9BRffHHATUHH5kSH ,dH%(HD$1HL$HT$htMH|$E11ɺH5TUHHtH1HHLcEt)LeEHD$dH3%(uH []A\DEjf.1Ht,Ht'?t"HP|t HH9u@D@Ή7ff.AWAVAUATIUSHHHtI|$xHtI$HtI$HtI$Ht|I$HtjI$HtXI$HtFI$Ht4I$Ht"I$HtI$HtI$HtI|$0HtI|$8HtA$I$~21H[H␃HcLLIGJ4ID9RAOuf HoHcH>DF1HxMH|$@qHT$LLIGH\$Hl$Ht$HxHt$H|$0HHcH@^t$LLIG&fZuH\$D$Hl$HD$H|$0HHMHl$HL1DF@HHLLIGHL$@1HqAOHl$0HSLcd$ID$H %f.|$HHLH|$ HHH@1fDIGHLH(H9Ll$PDF1HK@LH\$Hl$THct$,H|$0L^\$,AHl$H\$AHHL$@H|$0HH|f1fDIGLLH(H9H\$Hl$H.HL$H|$0HHff.@UHHSHHLD$PLL$Xt:)D$`)L$p)$)$)$)$)$)$dH%(HD$(1H|$HL$1H$D$ HD$HD$0D$0HD$ H|$HtHHH߾AH|$'HD$(dH3%(u H[](AWA׺AVIAUI1ATUHSHD'H}ED$IcDD$ IcDD$ HRHEHHEHDHEHD1EMt1ҾLxHUD<HUHDHELlHD[]A\A]A^A_ff. AЉH{kHHcH>fDf*@ffEE*DDfH*@HDfAEf*@ffEE˜*@Dpf*HDTfAtHAff*A*^fZfHffɉI*H*^ff.@ AЉHOjHHcHH>f.fEHEHDDH@HDtA1EtHbffA**^ rf/ H,@$$/r$\rH,H?cDVHrH$ $f/rv$\H,H?$fDDfHDA1EH~1A@HH,fDH,fD1f\H,H?D1DE7AWLcAVIAUN<A1ATIUDSDH(A I(t$ pH$ HcMc fH<$I(I\$N4IFfE.fAnA^AFiIF wH !hHcH>DAfEtJHcH;t$hUH|$`HA|uH|$`D$HcH|$`IFD$AFL$ A $A H([]A\A]A^A_DHcH;t$hH|$`H|$`dH|$`HcHA^IFf.xHcH$HcH niLT$`LT$hLc L9L$hD]MnL|$E1ELd$HL$`MMML$H-g@7ID$N,A wQJcDH>DAFH=EIFt$pHAEt$pHyAEILM9LH)L9xL|$Ld$Fft$pHdAEfDT$pfEƘAE@|$pfEAEsf.HD$`$ $AMOfDHD$`HH$$AU-@A w:HeJcH>f1ҾHIF0L|$Ld$t$HtHHtvÐAWAVAUATUSHH`IHcHl$HhL!gHHFLL"@A HHcHHOH I9uIHHIIH<(HHE^pIEHdHA`ENpfEEH fCE`ENHHl$(E1L=dHD$6HHD$7HHD$8DLAvpHIhHf=f=yH e<|$}|$ CEANpԅSCuAVpHH{AFpHeD$0EDDUEDT$$IL\$IC1]}IŅuL\$f.f$DT$$A=f HDD$01fHMtHMH f w(Ic4L> fEEHfJ}HH9sKuDHc1HEHHcqHz@}HHH9rfDl$l$ 6AFpHt$H{DHcH|$LIH:Hl$L H H 1Eud2H}@ f.1HEHqHz!fHc1HEtHCEFpECCA~pCCCCAvptzHt$(H{4H IE9`HH[]A\A]A^A_f.HCHSHHH@sS-@SCDD$6C D$7C D$8C D$(CoCCCCACCSfDS{fDHT$HЈSHC HHC HHC DAEC@HuLL@:IJkftfu$EAEhH_H$HDD$01Hl$fDAWH AVAUATUHSH^H(Ht$H$LD$HD$H9-HD$D_pIED DECdH|$HcHTH9T$E1HDIEu{I D9tlH A tA H̝ H % HDPHELjLD$LHT$s_AXu1H([]A\A]A^A_fDVA&CdH|$HHTH9T$9|$`i|$`%upH|7lHL9aH$HLHjLD$AH4jY^DHHt~HHtrthHdHFH=2L9H>I9I)L9H<$HHfDH([]A\A]A^A_@AWIAVAUATUSHH$HT$HL$LD$ DL$ H$dH%(H$1=Iwp AAnI~D$E H^HcD\$LMIYMVIAwpLoHL$AHD$N!I9wL)L9r M9XIGI9w!L)L9rAG PvM9UH $H$]AVAATIH `1LH=8|X1ZDAAnff@E1ED|$ At$ ~R J AILLLT$LT$HH}IEHD$H9IHtLT$LT$IHtLT$LT$IHtLT$LT$LLT$zLT$Ht$II|*H)LT$II1II1H7LT$DH $H$xHLAUIH K^1H=7Y^=LLT$LT$HYH=8LT$)LT$IGxHLT$LT$AAH $@LT$H$AWpHELRHAULT$(ARDL$(t$,%H MtL$$H$dH3 %(-H[]A\A]A^A_LH)L9w I94IGI9L)I9AG PvfDLd$ I 11ҾLI?HD$(-I?1LI}I?LT$(L9MLH$BH$tfH $H$xAغLIH \1H=51fDIAZM Dz FAWp )  t ELLT$}LT$I@I0HtLT$)LT$LLLT$ALT$IG0i%VfA.GDGAM AWpL׉LT$AbYB_UfLT$ <_^ZAoD N|IxHtLT$LT$IIGxHtLT$LT$ILJDIc IWxHT$HUNICODEI9j HASCIII9 I:JIS I:M ƒHcHcL€: HI<01HH| wH9uiMAWpL׉LT$AfLT$ZAW@DlfA.G@]WMS AWpL׉LT$AxYX]YX]cfLT$ZAg@<~bMxAWpL׉LT$ALT$,HTHcH>fDMjAWpAt t ELLT$LT$IG`DH $Kl%H$t$ALUIH X1AUH=0ATH 1S@I?fHD$`)D$`)D$pHD$(I?1LIHI?I9 Ht$(I?LgI?1LIM9aE1LT$(LH[IGHdH $H$&ALIH >X1H=/F1H $H$ALIH W1H=y/18H $H$ALIH W1H=1/1HZIGH|HZIGHlHZIGH\fGAWpXk t ELLT$LT$IfDtAWp t ELLT$CLT$IH $H$ZAغLIH uV1H=-}1MAWpL׉LT$AqLT$AGX$MeAWpL׉LT$AAfLT$ZA_lfDl$Lm H=-Dd$0Mԉ\$(LHtIw0HH{HtIw8HH{HtC 9D$|HcL_IM\$(Dd$0AS$IAE9AGpDHc I<2AD$(AC(6ADd$(E'DfAEHD$A{,IDHD$C@DHA9DD)9EAPIcʼnl$HLgHRH\$LHl$HTLt$0LILl$@Ll$ HT$LT$8fI L;d$3LMLjL)A HL`_AXuLt$0ML1c@H0Hn H9H{A $M%E1Ɂi|AwpLLT$(HD$HHD$H9HLSLD$0HL$ HT$(&ZYALT$("I8HtLT$LT$LLLT$ALT$IG8AGDAAI1ɺLT$pHcAAIAHcHRL\A[IAGpIL\$IE2II#L\$MLLT$IAIsLLL\$LT$H1MICEzEEAALJAWpv; t ELLT$LT$IUAAEӃEAG PCAWpAtUv t EM1H޿LT$HIGxAGpDBH $H$wALIH P1H=(1H $H$/ALIH GP1H='O1l$HLT$8Lt$0Ll$@\$LD$(AAGpH $H$AغLIH O1H=a'1 AGpH $H$qALIH O1H= '葿1IHtLT$νLT$LLLT$9LT$I+n*LT$LwLT$IAEMBM\$(ALLT$8LT$AMIMbxfAzOMb AMH&ILT$HT$(L$ fHT$(HD$HTLD$Lc\$ ILT$M HLHt$XLLT$IxL\$2L\$LT$HD$XDAɄAlDA AQH $H$AغLIH M1H=8%载1DA A1LT$H=%QLLLLT$L\$HOM!1HHD$XLLT$Ee膹LT$IIIBLT$ HD$ApIIEHD$¸LD$McLT$ IMt9Ht4HT$LHt$XIxLT$ L\$訹L\$LT$ HvEL\$Xc$MLݺ$fAzuMb AMHC$Apt IILLIxLT$@LT$Ht$LIxLT$ LT$LcXI?LLLT$(萺I?L1I@LT$(MM9zMyLl?@AWIAVAUAATUH- SHHdH%(H$1 t H- H HE聻LCII@L9H#HjH;1LAƉD$I9H9M)LDLT$(DD$8H$dH3%(D$8Hĸ[]A\A]A^A_fD$2HD$ HD$(LCLIM9LL)L9HT$(H9T$ sdI95LH)L9&Lt$(t$wJH9HcH>SpHAH߾RH4*AQQCH EtAElHLLT$HL$HL$LT$HItLT$EAHVCpHy PAVQH IFLT$H9D$vIHD$LHL)Hz HRSpAARHpPARH EDA4LT$A-H58H%HL$LT$HMZHرfAzIICpHEB Iz A*sjH9SAI4ALDWHjHD$8L@)KXfAXAYf.z\HC`HLfH*YCHf^Z[P+I:ABAJARffC$1S(C,DEH;êLkHt$8#H|$0I)LH;LHHkHHp)I9閱1I}C Cp訽?E#>胩虧fAzMMCpHvZEB fAE9HƒfHH H*X鞰HH 111谪zff.ATE1A1UHHSH5yHҰHHHDcH߉[]A\ff.fAWAVAUATUSH_,H4$dH%(H$1CD$HD$ D$I h, HG`HD$ AFx<m D$A< D$HT$ Ll$0D11LHHHJH|$(1HqHD$(@Ht u,Hu1E1L$PDD HU@LH17Hl$(LH臨D HDAAuH!AFX< <t I~PIvPH~$T$HLD$ $HE1E1D$fDAtH̤AlAAuHcE1虤L5E1IAAtBD$DsDALD)IcH1HcL%LMLcAuA~CD $HT$ Ld$($HtH<$1ϥHL$8HtH1LL$@1HL迶L$H1LH誶L$P1LH蕶|$PLHtHH1L胼HL$(HNHLHHD1_DD$XE~WDL$TE~MH iHyL1.L$TLHiL$XLHbL$\H4Lֵ$$f.$. T$t/v]%_9fZ/r$N9^(C9X/]H LH>fD$p.$.#L$M$`H$h1ɺ Hc$pHc裤Hc$`H=H$hHHk臡HHC聡HLHCH蟢HC(H$$H$`Ht 9H$HtH)L0H$HtHLH$HtHL$11L%m ~MH$11LHL0xMtLH¾ L蛹H9$L$0Mtl|$"H$ t H$(uL$LH]*$ޟHtHHPLH$ tH$(HXH|$(HtסD$PEtt$H<$1LD$`EtH<$LD$pt$EtH<$Lѹt$$tH<$L谹$tH<$L菹D$EtH<$LlD$t$EtH<$LIt$D$EtH<$ L&t$D$EtH<$ Lt$$tH<$Lt$$tH<$ Lt$$tH<$ L蠸t$$ u8LHH$dH3%(HĨ[]A\A]A^A_H<$ LGD/H LH_ZýfDH L蔰D,L1H H vfDLpH|$(HtAH$@ HT$ AfD脞I~PH5 HtT$HLD$ fH D LHA Z̼f$.z$L1H H ^YS3ZX3D,qfH LH ZxI}TfAD$轖ff.fH{ HHFILECOMPUTEDANY_TAGIFD0THUMBNAILCOMMENTAPP0EXIFFPIXGPSINTEROPAPP12WINXPMAKERNOTEenabledEXIF Support7.2.340220Supported EXIF VersionJPEG, TIFFSupported filetypesmbstringdisabledExtended EXIF tag formatsUndefinedTag:0x%04XThumbnail is not a JPEG imagerbEXIF_USE_MBSTRING%d%u/%u%i/%ilength > value_len: %d > %zuexif_iif_add_valueValue too shortIllegal IFD sizeexif_read_data#error_ifdIllegal IFD offsetMultiple possible thumbnailsIllegal thumbnail size/offsetUCS-2BEUCS-2LECanon%s, %sUNDEFINEDSkip SUB IFDIllegal IFD PointerNot a fileFile structure corruptedexif_read_data#error_mcomNo image in jpeg!Missing TIFF alignment markerInvalid TIFF alignment markerInvalid TIFF start (1)Invalid IFD startCompanyInvalid JPEG fileInvalid TIFF fileFile not supportedFile too small (%d)Unable to open fileNONE,%s,streamFilename cannot be empty%s, FileNameFileDateTimeFileSizewidth="%d" height="%d"htmlIsColorByteOrderMotorola%4.1Fmm%dmm35mmFocalLengthCCDWidth%0.3F s (1/%d)ExposureTime%0.3F sf/%.1FApertureFNumberInfinite%0.2FmUserCommentUserCommentEncodingCopyrightCopyright.PhotographerCopyright.EditorThumbnail.FileTypeThumbnail.MimeTypeThumbnail.HeightThumbnail.WidthSectionsFoundCASIOFUJIFILMNIKONOLYMPUS OPTICAL CO.,LTDSAMSUNGPanasonicDJISONYPENTAXMinolta, KONICA MINOLTASIGMA, FOVEONKYOCERA, CONTAXRICOHRicohAGFAEPSONMakerNoteDataTypePrintImageMatchingInfoNo tag valueComputed valueFormatThumbnailDriveModeResolutionModeAutofocusModeFocusSettingWhiteBalanceExposureModeMeteringModeLensRangeColorSpaceContrastShadowHighlightSaturationSharpnessFillLightColorAdjustmentAdjustmentModeSoftwareAutoBracketCameraSettingsStdOldCameraSettingsStdNewCameraSettings7DImageStabilizationDataWBInfoA100CompressedImageSizeThumbnailOffsetThumbnailLengthSceneModeColorModeFlashExposureCompTeleconverterImageStabilizationRawAndJpgRecordingZoneMatchingColorTemperatureLensIDColorCompensationFilterWhiteBalanceFineTuneImageStabilizationA100CameraSettings5DPrintIMCameraSettingsZ1PreviewResolutionPreviewLengthPreviewOffsetDateAFPointAFPointInFocusAutoBracketingWhiteBalanceModeBlueBalanceRedBalanceDigitalZoomHometownDestinationHometownDSTDestinationDSTDSPFirmwareVersionCPUFirmwareVersionFrameNumberEffectiveLVImageProcessingPictureModeImageAreaOffsetRawImageSizePreviewImageBordersLensTypeSensitivityAdjustDigitalFilterAELockFlashExposureCompensationImageToneShakeReductionShutterCountDynamicRangeExpansionHighISONoiseReductionAFAdjustmentBlackPointShotInfoAEInfoLensInfoFlashInfoAEMeteringSegmentsFlashADumpFlashBDumpWB_RGGBLevelsDaylightWB_RGGBLevelsShadeWB_RGGBLevelsCloudyWB_RGGBLevelsTungstenWB_RGGBLevelsFluorescentDWB_RGGBLevelsFluorescentNWB_RGGBLevelsFluorescentWWB_RGGBLevelsFlashCameraInfoBatteryInfoAFInfoColorInfoCameraSettingsExtraInfoMultiBurstModeMultiBurstImageWidthMultiBurstImageHeightPanoramaPreviewImageRatingBrightnessLongExposureNoiseReductionAutoHDRSonyModelIDColorReproductionDynamicRangeOptimizerMinoltaMakerNoteFullImageSizePreviewImageSizeMacroFocusModeAFModeAFIlluminatorJPEGQualityFlashLevelReleaseModeSequenceNumberAntiBlurHighISONoiseReduction2IntelligentAutoWhiteBalance2SpeedXSpeedYSpeedZCameraPitchCameraYawCameraRollShootingModeAudioDataDumpWhiteBalanceBiasFlashBiasInternalSerialNumberExifVersionColorEffectTimeSincePowerOnSelfTimerRotationAFAssistLampBabyAge1OpticalZoomModeConversionLensTravelDayWorldTimeLocationTextStamp1ProgramISOAdvancedSceneTypeTextStamp2FacesDetectedFilmModeColorTempKelvinBracketSettingsWBAdjustABWBAdjustGMFlashCurtainLongShutterNoiseReductionAFPointPositionFaceDetInfoLensSerialNumberAccessoryTypeAccessorySerialNumberTransform1IntelligentExposureLensFirmwareVersionFaceRecInfoFlashWarningBabyNameCountryStateCityLandmarkIntelligentResolutionBurstSheedIntelligentDRangeClearRetouchCity2ManometerPressurePhotoStyleShadingCompensationAccelerometerZAccelerometerXAccelerometerYCameraOrientationRollAnglePitchAngleSweepPanoramaDirectionPanoramaFieldOfViewTimerRecordingInternalNDFilterShutterTypeClearRetouchValueTouchAEMakerNoteVersionWBRedLevelWBGreenLevelWBBlueLevelFlashFiredTextStamp3TextStamp4BabyAge2Transform2PictureWizardLocalLocationNamePreviewCameraTemperatureFirmwareNameLensFirmwareSensorAreasSmartRangeExposureBiasValueFocalLengthIn35mmFormatEncryptionKeyWB_RGGBLevelsUncorrectedWB_RGGBLevelsAutoWB_RGGBLevelsIlluminator1WB_RGGBLevelsIlluminator2WB_RGGBLevelsBlackColorMatrixColorMatrixSRGBColorMatrixAdobeRGBToneCurve1ToneCurve2ToneCurve3ToneCurve4SpecialModeSoftwareReleasePictureInfoCameraIdISOSettingImageSharpeningFlashSettingISOSelectionImageAdjustmentAuxiliaryLensManualFocusDistanceAFFocusPositionCCDSensitivityConverterFlashModeFlashStrengthSlowSyncContTakeBlurWarningFocusWarningAEWarning RecordingModeFocusingModeFlashIntensityObjectDistanceModeArrayImageInfoImageTypeImageNumberOwnerNameCameraCustomFunctionsInterOperabilityIndexInterOperabilityVersionRelatedFileFormatRelatedImageWidthRelatedImageHeightGPSVersionGPSLatitudeRefGPSLatitudeGPSLongitudeRefGPSLongitudeGPSAltitudeRefGPSAltitudeGPSTimeStampGPSSatellitesGPSStatusGPSMeasureModeGPSDOPGPSSpeedRefGPSSpeedGPSTrackRefGPSTrackGPSImgDirectionRefGPSImgDirectionGPSMapDatumGPSDestLatitudeRefGPSDestLatitudeGPSDestLongitudeRefGPSDestLongitudeGPSDestBearingRefGPSDestBearingGPSDestDistanceRefGPSDestDistanceGPSProcessingModeGPSAreaInformationGPSDateStampGPSDifferentialACDCommentNewSubFilePhotometricInterpretationFillOrderDocumentNameStripByteCountsPlanarConfigurationPageNameXPositionYPositionFreeOffsetsFreeByteCountsGrayResponseUnitGrayResponseCurveT4OptionsT6OptionsPageNumberHostComputerPredictorPrimaryChromaticitiesColorMapHalfToneHintsTileWidthTileLengthTileOffsetsTileByteCountsSubIFDInkSetInkNamesNumberOfInksDotRangeTargetPrinterExtraSampleSampleFormatSMinSampleValueSMaxSampleValueTransferRangeClipPathXClipPathUnitsYClipPathUnitsIndexedJPEGTablesOPIProxyJPEGProcJPEGInterchangeFormatJPEGInterchangeFormatLengthJPEGRestartIntervalJPEGLosslessPredictorsJPEGPointTransformsJPEGQTablesJPEGDCTablesJPEGACTablesYCbCrSubSamplingReferenceBlackWhiteExtensibleMetadataPlatformGammaICCProfileDescriptorSRGBRenderingIntentImageTitleResolutionXUnitResolutionYUnitResolutionXLengthUnitResolutionYLengthUnitPrintFlagsPrintFlagsVersionPrintFlagsCropPrintFlagsBleedWidthPrintFlagsBleedWidthScaleHalftoneLPIHalftoneLPIUnitHalftoneDegreeHalftoneShapeHalftoneMiscHalftoneScreenGridSizeThumbnailFormatThumbnailWidthThumbnailHeightThumbnailColorDepthThumbnailPlanesThumbnailRawBytesThumbnailSizeThumbnailCompressedSizeColorTransferFunctionThumbnailDataThumbnailImageWidthThumbnailImageHeightThumbnailBitsPerSampleThumbnailCompressionThumbnailPhotometricInterpThumbnailImageDescriptionThumbnailEquipMakeThumbnailEquipModelThumbnailStripOffsetsThumbnailOrientationThumbnailSamplesPerPixelThumbnailRowsPerStripThumbnailStripBytesCountThumbnailResolutionXThumbnailResolutionYThumbnailPlanarConfigThumbnailResolutionUnitThumbnailTransferFunctionThumbnailSoftwareUsedThumbnailDateTimeThumbnailArtistThumbnailWhitePointThumbnailYCbCrCoefficientsThumbnailYCbCrSubsamplingThumbnailYCbCrPositioningThumbnailRefBlackWhiteThumbnailCopyRightLuminanceTableChrominanceTableFrameDelayLoopCountPixelUnitPixelPerUnitXPixelPerUnitYPaletteHistogramRelatedImageFileFormatImageIDMatteingImageDepthTileDepthCFARepeatPatternDimCFAPatternBatteryLevelIPTC/NAAIT8RasterPaddingIT8ColorTableImageResourceInformationExif_IFD_PointerICC_ProfileExposureProgramSpectralSensityOECFGPS_IFD_PointerISOSpeedRatingsDateTimeOriginalDateTimeDigitizedComponentsConfigurationCompressedBitsPerPixelShutterSpeedValueBrightnessValueMaxApertureValueSubjectDistanceLightSourceFlashEnergySpatialFrequencyResponseNoiseFocalPlaneXResolutionFocalPlaneYResolutionFocalPlaneResolutionUnitSecurityClassificationImageHistorySubjectLocationExposureIndexTIFF/EPStandardIDSensingMethodStoNitsSubSecTimeSubSecTimeOriginalSubSecTimeDigitizedImageSourceDataCommentsAuthorKeywordsSubjectFlashPixVersionExifImageWidthExifImageLengthRelatedSoundFileInteroperabilityOffsetFileSourceCustomRenderedDigitalZoomRatioFocalLengthIn35mmFilmSceneCaptureTypeGainControlDeviceSettingDescriptionSubjectDistanceRangeImageUniqueIDexifAPI20170718,NTSstandardexif.encode_unicodeISO-8859-15exif.decode_unicode_motorolaexif.decode_unicode_intelexif.encode_jisexif.decode_jis_motorolaJISexif.decode_jis_intelexif_read_dataread_exif_dataexif_tagnameexif_thumbnailexif_imagetypeimagefilefilenamewidthheightsections_neededsub_arraysread_thumbnailindex 0@P`pP8АeeeeeeД8P<<̕Ėܖ <̕LȘȘȘȘȘȘȘȘܙLmmL$|$\\|$ܙMM*II* ,,,,,,,,,,,,ezE,,,,,,,,,,,,,,,,4,,,,,,,,,,,,,,,,,ExifFUJIFILM NikonOLYMPPanasonicSONY DSC AOCSIGMAFOVEONKYOCERA AGFA EPSONMultibyte decoding support using mbstringCanon, Casio, Fujifilm, Nikon, Olympus, Samsung, Panasonic, DJI, Sony, Pentax, Minolta, Sigma, Foveon, Kyocera, Ricoh, AGFA, EpsonIllegal encoding ignored: '%s'Could not compute size of thumbnailIllegal reallocating of undefined file sectionIllegal IFD size: x%04X + 2 + x%04X*12 = x%04X > x%04Xexif_read_data#error_mult_thumbThumbnail goes IFD boundary or end of file reachedcorrupt EXIF header: maximum directory nesting level reachedProcess tag(x%04X=%s): Illegal format code 0x%04X, suppose BYTEProcess tag(x%04X=%s): Illegal byte_countProcess tag(x%04X=%s): Illegal pointer offset(x%04X < x%04X)Process tag(x%04X=%s): Illegal pointer offset(x%04X + x%04X = x%04X > x%04X)Wrong file pointer: 0x%08X != 0x%08XUnexpected end of file reachedProcess tag(x%04X=%s): Cannot be emptyIFD data too short: 0x%04X offset 0x%04XIllegal IFD size: 2 + 0x%04X*12 = 0x%04X > 0x%04XIllegal IFD size: 0x%04X > 0x%04XRead from TIFF: tag(0x%04X,%12s): Illegal format code 0x%04X, switching to BYTEError in TIFF: filesize(x%04X) less than size of IFD(x%04X + x%04X)Error in TIFF: filesize(x%04X) less than size of IFD(x%04X)Error in TIFF: filesize(x%04X) less than size of IFD dir(x%04X)Error in TIFF: filesize(x%04X) less than start of IFD dir(x%04X)Image has corrupt COM section: some software set wrong length informationError reading from file: got=x%04X(=%d) != itemlen-2=x%04X(=%d)Incorrect APP1 Exif Identifier CodeRicohCameraInfoMakerNoteSubIFDThumbnailPrimaryChromaticitiesC9B.???ffffff9@$@MbP?_ B??O;1DddhtlllmLmmWnlOot p0 q "sl @s s ttuv4wTxtx0${d||~`~$4$<Ԃt$`Ԋ4ԙ ĹT $@ zRx $b FJ w?:*3$"Df\r4prsE J HtFEE E(D0A8GpJ 8A0A(B BBBK zRx p(iH(tFEE E(D0D8Gpz 8A0A(B BBBA i'4uHM0UXfnE D u Pt[rX, !"@# $%!&-'<(O)b-n2z34$789>?@AGHITMOP\]*i7qMrcpD{    4Nh{"))Xf        M 90{A M!"#$%_&' (u)+,@AeBCDGHIJKNO_PRT,:AHUak O [ e?Xp }!#$%&()*+,-T.0123456-9:7;I<T=_>q?|@ABDEFGHIKLMNQR ST+YA]L``atbefg@ikmopwy| )8GVhr}=f #. 9DM!X0f1k5xC[Pt !"#&$@(Z0m1y2@ABC X"/?Ma/qX X !01X q%?/ ; EL\r, : D S Z fo{ /?Qdq A  '\Rk/?,  !"$#5$G%Q(B)[-12;4<f=s>D?}@ABCDEJLMNPQRS!T.U>VNW\XeYtZ[_% 2X?Pd PPPPPPP"P1 PF P` Pl P| PPPPPPPPPPPP#P1PIP_ Pm!P"P#P$P%P&P'P (P)P4*PI+Pb,Px-P.P/P0P1P2P3P4P+5P;6P07PO8Pj9P:P;PPPQQQQQQ#4 KS\gqPtIis"$ (% '0(@Qc{r u ,  "8/Qhu?||\ .=M^  "8/QhuugeX $-pxP!A M@yP!3j@yP!;pxP!@y P!@y(P! K! K!|K!PJ!@J!#)0@KZ% e ,0!8!o`   M!_O oooo"oLK!eff f0f@fPf`fpfffffffffgg g0g@gPg`gpggggggggghh h0h@hPh`hphhhhhhhhhii i0i@iPi`ipiiiiiiiii3 G!I!Pypw0P! vGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1e9 GA$3p1113n,GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*GOW*VnoGA*cf_protectionGA+stack_clashGA!stack_realignGA+omit_frame_pointer GA*FORTIFYVnTvGA+GLIBCXX_ASSERTIONSGA*VnoGA*GA*GA! v ,% [u9 [uQ nj [u [u [u [u [u v  Tv/ v4D Tvh hw `v hw dx dx 4y n& 4yD y` /n'w y z z | z |$ }B7!P }p M~ } Vn o Vn M~ 5 P~`I o:e  f f  p9  ! 0 U ŀx  ŀ G Ѐw G G!+ R ew  e  p= 2 Z Xu Vo'     8 c   d   dE  j  pQ    Ѝ    /(  ; 8U  }ovp  /    0    l  L2 5! @ 5!N  p<c  o  l  `!  pN   TF  _  9r  T   `U <  WsgA  q    S  t    E+ t@F Eh  u?  ,@4!@3!2!0@1!$ 0! <`/!R@-!h'!@ &!"!`!@!!!P !p G!`K!x6K!0KJ!xb@J!0y `u{ u uP!8! v0!\I!" Po2 pxA ,G@!TP!0a pwn PK! %  yP!P!M! @y | e 8` "_ e e j n ,@0`0!8!@!K!M!P!P!Qa(:Igy P!%3H\x=Q`n $=Nar Q! P!4EVbw*  9Ni".annobin_exif.c.annobin_exif.c_end.annobin_exif.c.hot.annobin_exif.c_end.hot.annobin_exif.c.unlikely.annobin_exif.c_end.unlikely.annobin_exif.c.startup.annobin_exif.c_end.startup.annobin_exif.c.exit.annobin_exif.c_end.exit.annobin_zm_globals_ctor_exif.start.annobin_zm_globals_ctor_exif.endzm_globals_ctor_exif.annobin_exif_get_sectionname.start.annobin_exif_get_sectionname.endexif_get_sectionname.annobin_zm_info_exif.start.annobin_zm_info_exif.end.annobin_OnUpdateEncode.start.annobin_OnUpdateEncode.endOnUpdateEncode.cold.20.annobin_OnUpdateDecode.start.annobin_OnUpdateDecode.endOnUpdateDecode.cold.21.annobin_zm_shutdown_exif.start.annobin_zm_shutdown_exif.end.annobin_exif_get_tagname.start.annobin_exif_get_tagname.endexif_get_tagname.annobin_zif_exif_tagname.start.annobin_zif_exif_tagname.endtag_table_IFD.annobin_exif_iif_add_int.start.annobin_exif_iif_add_int.endexif_iif_add_int.annobin_exif_error_docref.start.annobin_exif_error_docref.endexif_error_docref.annobin_exif_scan_thumbnail.start.annobin_exif_scan_thumbnail.endexif_scan_thumbnailexif_scan_thumbnail.cold.22.annobin_zif_exif_imagetype.start.annobin_zif_exif_imagetype.end.annobin_php_strnlen.start.annobin_php_strnlen.endphp_strnlen.annobin_php_ifd_get32s.start.annobin_php_ifd_get32s.endphp_ifd_get32s.annobin_php_ifd_set32u.part.3.start.annobin_php_ifd_set32u.part.3.endphp_ifd_set32u.part.3.annobin_exif_discard_imageinfo.start.annobin_exif_discard_imageinfo.endexif_discard_imageinfo.annobin_zm_startup_exif.start.annobin_zm_startup_exif.end.annobin_exif_iif_add_str.part.7.start.annobin_exif_iif_add_str.part.7.endexif_iif_add_str.part.7.annobin_exif_process_string_raw.part.9.start.annobin_exif_process_string_raw.part.9.endexif_process_string_raw.part.9.annobin_exif_file_sections_realloc.start.annobin_exif_file_sections_realloc.endexif_file_sections_reallocexif_file_sections_realloc.cold.23.annobin_add_assoc_image_info.part.13.start.annobin_add_assoc_image_info.part.13.endadd_assoc_image_info.part.13.annobin_exif_iif_add_fmt.constprop.18.start.annobin_exif_iif_add_fmt.constprop.18.endexif_iif_add_fmt.constprop.18.annobin_exif_file_sections_add.isra.8.constprop.19.start.annobin_exif_file_sections_add.isra.8.constprop.19.endexif_file_sections_add.isra.8.constprop.19.annobin_exif_convert_any_format.start.annobin_exif_convert_any_format.endexif_convert_any_format.annobin_exif_convert_any_to_int.start.annobin_exif_convert_any_to_int.endexif_convert_any_to_int.annobin_exif_iif_add_value.start.annobin_exif_iif_add_value.endexif_iif_add_valuephp_tiff_bytes_per_formatexif_iif_add_value.cold.24.annobin_exif_thumbnail_build.start.annobin_exif_thumbnail_build.endexif_thumbnail_build.annobin_exif_process_IFD_in_JPEG.start.annobin_exif_process_IFD_in_JPEG.endexif_process_IFD_in_JPEGtag_table_GPStag_table_IOPexif_process_IFD_TAGexif_process_IFD_in_JPEG.cold.25.annobin_exif_process_IFD_TAG.start.annobin_exif_process_IFD_TAG.endmaker_note_arrayexif_process_IFD_TAG.cold.26.annobin_exif_process_IFD_in_TIFF.start.annobin_exif_process_IFD_in_TIFF.endexif_process_IFD_in_TIFFexif_process_IFD_in_TIFF.cold.27.annobin_exif_read_from_stream.constprop.15.start.annobin_exif_read_from_stream.constprop.15.endexif_read_from_stream.constprop.15ExifHeader.18604exif_read_from_stream.constprop.15.cold.28.annobin_exif_read_from_file.constprop.14.start.annobin_exif_read_from_file.constprop.14.endexif_read_from_file.constprop.14exif_read_from_file.constprop.14.cold.29.annobin_zif_exif_read_data.start.annobin_zif_exif_read_data.endzif_exif_read_data.cold.30.annobin_zif_exif_thumbnail.start.annobin_zif_exif_thumbnail.endzif_exif_thumbnail.cold.31.annobin_get_module.start.annobin_get_module.endtag_table_VND_CANONtag_table_VND_CASIOtag_table_VND_FUJItag_table_VND_NIKONtag_table_VND_NIKON_990tag_table_VND_OLYMPUStag_table_VND_SAMSUNGtag_table_VND_PANASONICtag_table_VND_DJItag_table_VND_SONYtag_table_VND_PENTAXtag_table_VND_MINOLTAtag_table_VND_SIGMAtag_table_VND_KYOCERAtag_table_VND_RICOHexif_module_depsarginfo_exif_read_dataarginfo_exif_tagnamearginfo_exif_thumbnailarginfo_exif_imagetypederegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__exif_functionszm_startup_exifOnUpdateEncode_fini__dso_handleexif_globalszm_info_exifzif_exif_thumbnail_DYNAMICzif_exif_read_datazm_shutdown_exifexif_module_entry__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_OnUpdateDecodezif_exif_tagnamezif_exif_imagetypefree@@GLIBC_2.2.5zend_vspprintfzend_multibyte_fetch_encodingadd_assoc_zval_exadd_index_longzend_parse_parametersstrncmp@@GLIBC_2.2.5_ITM_deregisterTMCloneTablephp_image_type_to_mime_typezend_register_ini_entriesap_php_snprintf_edata_estrdup_safe_emallocphp_stream_stdio_opsstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4_zval_dtor_funczend_unregister_ini_entriesphp_info_print_table_rowadd_assoc_double_exzend_parse_arg_str_slowmodule_registryzend_wrong_parameters_count_errorzend_multibyte_encoding_converteradd_assoc_string_exOnUpdateStringzend_spprintfmemcmp@@GLIBC_2.2.5strcmp@@GLIBC_2.2.5_php_stream_getczend_register_long_constant__gmon_start__php_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entrieszend_parse_arg_bool_slowadd_index_doublephp_file_le_streamphp_getimagetype__xstat@@GLIBC_2.2.5php_verroradd_assoc_null_exexpget_modulephp_basename__bss_start_array_init_convert_to_string_efree_php_stream_seekmemmove@@GLIBC_2.2.5_php_stream_open_wrapper_ex_php_stream_free_php_stream_readphp_strlcpyzend_hash_str_exists_estrndupzend_multibyte_parse_encoding_list_php_stream_tellzend_wrong_parameter_type_errorphp_file_le_pstream_safe_ereallocadd_assoc_long_exzend_fetch_resource2_ITM_registerTMCloneTableadd_assoc_stringl_exphp_info_print_table_start__cxa_finalize@@GLIBC_2.2.5strstr@@GLIBC_2.2.5add_index_string.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``48 @ Ho""Uo@dOnB__xeesee ~jjnnf,, @@\- 000 `` 0!08!8@!@p6 K!KM!MPP!P P!PP 0P- QaPP(T mR#PK!˨modules/xmlreader.sonuȯELF>7@@8 @||    888$${{{ Std{{{ Ptd m m m$$QtdRtd p p GNU!L.]uT #DPl@ loBE| pqX)a/ ohAafw4tpd)s1[ (hWCCE{5Nq%E{_Z3u9dHXj, F"UX? ( <   0g F ( __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezend_hash_findzend_std_get_property_ptr_ptrzend_std_write_propertyzend_throw_errorxmlFreeParserInputBufferxmlFreeTextReaderxmlRelaxNGFreezend_object_std_dtor_emalloczend_object_std_initobject_properties_initzend_parse_parametersxmlTextReaderGetAttributeNostrlenmemcpyxmlFree__stack_chk_failxmlTextReaderGetAttributeNszend_argument_value_errorxmlTextReaderMoveToAttributeNsxmlTextReaderConstLocalNamexmlStrEqualxmlTextReaderNext__xmlLoadExtDtdDefaultValue__xmlDoValidityCheckingDefaultValuexmlPedanticParserDefaultxmlSubstituteEntitiesDefaultxmlLineNumbersDefaultxmlKeepBlanksDefaultxmlTextReaderSchemaValidatephp_error_docrefxmlTextReaderSetParserPropxmlParserInputBufferCreateMemgetcwdxmlCanonicPathxmlNewTextReaderxmlTextReaderSetupinstanceof_function_slowobject_init_exdom_node_class_entryxmlTextReaderExpandxmlDocCopyNodephp_dom_create_objectzend_std_get_methodzend_hash_destroyphp_info_print_table_startphp_info_print_table_rowphp_info_print_table_endzend_std_read_propertyzend_empty_stringexecutor_globalszend_wrong_parameters_none_errorxmlTextReaderIsValidxmlTextReaderMoveToElementxmlTextReaderMoveToFirstAttributexmlTextReaderMoveToNextAttributexmlTextReaderReadInnerXmlxmlTextReaderReadOuterXmlxmlTextReaderReadStringxmlTextReaderGetAttributexmlTextReaderLookupNamespacexmlTextReaderGetParserPropxmlTextReaderMoveToAttributexmlTextReaderMoveToAttributeNoxmlTextReaderReadzend_string_init_internedzend_register_internal_class_ex__zend_malloczend_declare_typed_property_efreezend_hash_add_emalloc_32std_object_handlerszend_hash_str_find_zend_hash_initxmlTextReaderAttributeCountxmlTextReaderConstBaseUrixmlTextReaderDepthxmlTextReaderHasAttributesxmlTextReaderHasValuexmlTextReaderIsDefaultxmlTextReaderIsEmptyElementxmlTextReaderConstNamexmlTextReaderConstNamespaceUrixmlTextReaderNodeTypexmlTextReaderConstPrefixxmlTextReaderConstValuexmlTextReaderConstXmlLangzend_declare_class_constant_longxmlCreateURIxmlURIEscapeStrxmlParseURIReferencestrncasecmptsrm_realpathxmlFreeURIexpand_filepathxmlReaderForFilexmlRelaxNGNewParserCtxtxmlRelaxNGParsexmlRelaxNGFreeParserCtxtxmlRelaxNGNewMemParserCtxtxmlTextReaderRelaxNGSetSchemaget_modulelibargon2.so.0libxml2.so.2libc.so.6_edata__bss_startxmlreader.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5LIBXML2_2.6.20LIBXML2_2.5.4LIBXML2_2.6.28LIBXML2_2.5.2LIBXML2_2.5.7LIBXML2_2.6.0LIBXML2_2.5.0LIBXML2_2.4.30/opt/cpanel/ea-libzip/lib64:/opt/cpanel/ea-libicu/lib:/opt/cpanel/libargon2/lib64    5 @ _ ii j ui t ( ЫL  ثL     L < ;  k k pa m #k( 0M0  @ 0kH =P ` ` ?kh >p  Nk pM  `k pJ l hkȅ PMЅ  xk N @ k N  k( ?0  @ kH JP l` kh Jp l k J l k  O l kȆ @І ` ri b  k K l k( K0 l@ lH KP l` lh pAp  l B @ .l g  ?lȇ  gЇ  Vl `C  Zl F @ H al` ilh alx rl wl ~l؈ rl l l wl` l i l l ~l8 rl@ lX l l rl l l l` l i l l@ l l l  j 0[ PHВ 9ؒ j k           ( '0 (8 ,@ /H 1P 4X 5` 7h ;p Jx K L N U V X Z [ \ ]ȏ ^Џ `؏ f k  ( 0 8  @  H  P X ` h p x          Ȑ  А !ؐ " # $ % & ) * + - .( 00 28 3@ 6H 8P 9X :` <h =p >x ? @ A B C D E F G Hȑ IБ Mؑ O P Q R S T W Y _ `( a0 b8 c@ dH eP fX g` hh ip jHHa HtH5a %a hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%\ D%}\ D%u\ D%m\ D%e\ D%]\ D%U\ D%M\ D%E\ D%=\ D%5\ D%-\ D%%\ D%\ D%\ D% \ D%\ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%}[ D%u[ D%m[ D%e[ D%][ D%U[ D%M[ D%E[ D%=[ D%5[ D%-[ D%%[ D%[ D%[ D% [ D%[ D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D1H5w/1pZL[]A\A]H501{H501jcH501RH501:H5&/11H{011E H5/11 H5.01 H5K/1a H5.11zL H>/11AE H5/1p H5T/11+SH/11AE1HC(H/1HH1HAEH/11qAE PjH/H5/1PZJ1H5.1zHU }Y]OH5.1wH5-1_H5-11H5.12H5-11HH=tY  HH=X  &H!011IE[)HV-H5-1:)H5,11\+H-11AE+H5-1Rw+f.H=W HW H9tH~S Ht H=W H5W H)HHH?HHtHT HtfD=uW u+UH=T Ht H=H dMW ]wAUIATAUHSHHHHthHtH1[]A\A]fDHLDHH[]A\A]%DAUIATIUHSHHHHtH?HLLHH[]A\A]@SHHHt HCH;Ht yHH{Ht HC[f.SH_"H[ff.ATUHSG )HcHHXfHL` H@LHL,HV HCH*W HC8L[]A\ff.AUATUHH5-SHH,dH%(HD$1Hjt}HC HxHtp4$IHt`HHx IHLLHHHH{HCLkHP H]LBD+EHD$dH3%(u H[]A\A]XAUATUHH55*SHH8,dH%(HD$(1HL$HT$HD$LL$LD$ HD$gH|$H|$HC HxHtwHT$ Ht$zIHt`HHx IHLLHHHH{HCLkHxO H]LBD+EHD$(dH3%(u H8[]A\A]2fUHH5)SHH8,dH%(HD$(1HL$HT$HD$LL$LD$ HD$Kt@H|$-H|$ HC HxHtHT$ Ht$t%EHD$(dH3%(uH8[]Ejf.ATIH5[(USHH ,dH%(HD$1HL$HT$HD$HD$t[Hk H}Hu*w@u+H}:HHuKH}rH\$HuЃtCAD$HD$dH3%(u.H []A\f.AD$DAD$pAWAVAUATUHH5h'SHH8,dH%(HD$(1HL$HT$ HD$H|$ t H|$H[ H H{D(xD p131AI1AD$Ht$ H{D$ HD( DD D|$t|$ EHD$(dH3%(uH8[]A\A]A^A_(UHH5:&SHH(,dH%(HD$1HL$HT$Wt9HC H HxHT$t$YEHD$dH3%(uH([]ff.fAWAVAUATUSHH $HhdH%(H$X1HL$(HT$@HHD$0H,IHD$8H5K%HD$@HD$PHD$@P1LL$@LD$XfZYE11{(H\$(HH|$HHtH;D$0H|$@1҉IHIL|$PLHHteL H!%tDHJHDщ@HL)BH|P/tHcƒHcDP/DPL.HD$D$ 1X1D$m1D$D$4HLD$IHDD$8HL$H1HH"MAELeL}Ht HuI Ht$0t$ |$0|$|$?|$H$XdH3%(Hh[]A\A]A^A_DHk H5mM Ls H}H9t Hk H HfDH59M LImH +_t$04t$ |$0|$ |$|$Ht HnH HLH|"11lAE *f.AUIH5]"ATIUSH,dH%(HD$1HH HH$H1Ft~H,$HH]HCHcH)HH&HHHh@ID$ HxH#HHHH HLHCHD$dH3%(uH[]A\A]1'H?t@HFHt2Hu!F SHdH%(H$1H$HHH? H=1HH$H35 H$(D$H1AntE1HHHHH!HEHattribut1HHH}HHEHHHEE eCoufDM$E&QPUAZA[@umuH D$UR1E1HHHHfuHH!HE1Ht$H@EIHHHEHEEbaseEQPPU_AX@umuHH  D$(V1E1HHHHHH!HE1Ht$ HEhHHHEHEEdeptEQPUXY@umuHmD(D$81E1HHhasAttriHHHH!HE1Ht$0H H}HHHEHHE E buteE$sE%QPUAZA[@umuHD(D$H1E1HHHHHHEH!Ht$@HhasValueHEH 1HHEHHEE QP^UAXAY@u"muH(D$X^1HE1HHHHHEH!Ht$PHisDefaulHEH 1HHEHHE E tE!QPU^_@u muHnfD(D$h1E1HHisEmptyEHHHHEH!ntHt$`fE$H 1HH}HHHEHEE lemeE&QPUXY@u$muHGf.(D$x1E1HHHHHHEH!Ht$pHlocalNamHEH@1HHEHHE E eE!QPRUAZA[@umuH @DŽ$ S1E1HHHHHH!HE1H$H@EHHHEHEEnameQPUAXAY@u#muHifDŽ$(1HE1HHHHHEH!HnamespacH$HEH@1HHEHHE E eURIE$QPU^_@umuHrDDŽ$(1E1HHHHHHEH!HnodeTypeH$HEH1HHEHHEE QPPUXY@umuH @DŽ$ S1AixE1HHHHHH!HEH$HEH@1HHEHEpreffDMEQPUAZA[@u muH;^fDDŽ$ 1E1HHHHHH!HE1H$H@EeHHHEHEEvaluEQPU_AX@u muHfDDŽ$ 1E1HHHHHHEH!anH$fEH@1HHEHHEExmlLEgEQPJUY^@t(HH$dH3%(H[]@muҁH@fDfDFfDfD~fDfDfDVfDsfDcfDS&fDCfD3^fD#fAVAUIATIUSHH dH%(HD$1DHߺHH4 HH=9 H$HHD$ HtI9 uReIL(L`hC@uu+HSHD$dH3%(u'H []A\A]A^fD@ ~HHI4 ooHoP0oX@)g9 o`Poh`oppo) Y9 oo)b9 oH)\9 )59 H9 HWH9 HH9 HH 9 H-H9 H)%9 )-!9 )=:9 )C9 ) L9 )U9 H9 8 H8 4H H5# HpHx@H6 jHHH5o)w7 o`%o7 )%t7 oh )-x7 op0)5|7 ox@)=7 oXP)7 o``)%7 H@pH7 Hv6 Hx@HH1HH=l7 o()-a6 op%Y6 )5^6 ox )=b6 o@0)f6 oH@) j6 oPP)n6 oh`)-r6 H@pHw6 H52 1ҹH= H1 1H= H5_1 1ҹH= H51 1ҹH= jH5[1 1ҹH= PH5!1 1ҹH= 6H5w1 1ҹH= H1 1H={ H;1 1H=9H0 1H=Q H5W1 1ҹH=D H0 1H=3 H0 1H= H)0 1H= fH=o4 1ɺH5 H=P4 H5K H=34 H5 H=4 H5 H=3 H5 H=3 H5 kH=3 H5 NH=3 H5T 1H=3 H5:  H=h3 H5% H=K3 H5 H=.3 H5 H=3 H5 H=2 H5 H=2 H5 fH=2 H5 IH=2 H5 ,H=2 H5 H=c2 H5 H=F2 H5l H=)2 H5\ H= 2 H5H 1H@SG,(H HH 0C[AUIATUSHHHH5HHHHIH- LH}tH5Hu3HLHTHtOLHdHH[]A\A]fDH5vH\uHfH1H[]A\A]HLeHHuff.AWAVAUATUSHH $HXdH%(H$H1HL$HT$0HHD$ I,HHD$(H5HD$0HD$@HD$0P1LL$0LD$H6ZY E11A}(#H|$H|$8HtpH;D$ xH|$0Ht$@1IH7 D8D011$1D$3D$T$(Ht$8LD$ ID8<$D0U|$l|$|$ :MMtlL+EH$HdH3%(uhHX[]A\A]A^A_DI] H5. Me H{H9t KI] H H;fDH5. HAHELh2fAWAVAUATUSHH $H(dH%(H$1H1HHt$HHHH}D(uJD B11A1AD$HD$ 7HH|D(DD D|$C|$ H$dH3 %(Hu(H([]A\A]A^A_fH(1AUIH5ATAUHSH(,dH%(HD$1HL$HT$HD$ tpH\$HHt$HHm H}HIc0HH}H}HXiH}HtH]AEHD$dH3%(u$H([]A\A]Hm H}Ht1Hff.H1HE+ @HHCannot write to read-only propertyData must be loaded before readingSchema must be set prior to readingCannot access parser properties before loading datamust be a valid parser propertyEncoding must not contain NUL bytesAn Error Occurred while expandingData must be loaded before expandingFailed to read property due to libxml errorsscannot be empty|s!p!Schema contains errorslbs|s!lUnable to load source data|O!Couldn't fetch %sCannot expand this node typeenabledXMLReaderopenattributeCountbaseURIdepthhasAttributeshasValueisDefaultisEmptyElementlocalNamenamespaceURInodeTypeprefixvaluexmlLangNONEATTRIBUTETEXTCDATAENTITY_REFPICOMMENTDOCDOC_TYPEDOC_FRAGMENTNOTATIONSIGNIFICANT_WHITESPACEEND_ELEMENTEND_ENTITYXML_DECLARATIONLOADDTDDEFAULTATTRSVALIDATESUBST_ENTITIES:file:///file://localhost/p|s!lUnable to open source dataxmlreader8.1.34API20210902,NTSlibxmlclosegetAttributegetAttributeNogetAttributeNsgetParserPropertyisValidlookupNamespacemoveToAttributemoveToAttributeNomoveToAttributeNsmoveToElementmoveToFirstAttributemoveToNextAttributereadnextreadInnerXmlreadOuterXmlreadStringsetSchemasetParserPropertysetRelaxNGSchemasetRelaxNGSchemaSourceXMLexpandDOMNodebaseNodenullsourceencodingflags0propertyfilenameurinamespaceindex@ ;$C0@h$@ ;PHH 4 +t C b| `PD`|pT`P@00P` P\pp 4 H  0 P H P 0 H P p t zRx $FJ w?:*3$"DH\h[FED D(G0W (C ABBG D(M ABB4|LFED D(G0[(M ABBzRx 0$Q(D ABB TFAD<EM(XrFAD cAB8FBA K(G@ (A ABBA 8FBA K(G` (A ABBA zRx `$0(04EKGP AAH zRx P g00FKA G@  AABK zRx @$/H0HFBB B(A0K8Gp 8A0A(B BBBA zRx p(N(xEKG@t AAA zRx @ -`@VFBB B(A0A8G I!a!z!R!A! 8A0A(B BBBF $zRx !,?:8tFLD A(D@ (A ABBI zRx @$   HR$<*E`p<FEE D(D0 (A BBBE p (A BBBI G (J BBBI r (A BBBG zRx 0(8Ai F GzRx  8L`tHBBB A(A0 (A BBBF W(A BBB( |@$BBL D(D0GP 0A(A BBBH zRx P(.DP(\EKG0n AAA zRx 0 -($EKG@s AAD (d~EKG0U AAB DIEx C Hg` APGFJBFIBFIAFJBFJBFIAFIAFJBFJBFIAFIAFJBFIBFIAf AAE @ $BBE D(C0GP 0A(A BBBG $ <H3zRx &l )Ec L FEA A(G0| (D ABBG d (F ABBA ` XFBB B(A0A8G I!a!z!R!A!, 8A0A(B BBBF $zRx !,BP IBBB B(A0A8G I   8A0A(B BBBC 8 BLD D(DP (A ABBD zRx P$lOP dd px l  hGNU<; kkpam#k0M 0k=` ?k> NkpM `kpJlhkPM xkN@ kN k? kJlkJlkJlk Olk@` rib kKlkKllKllpA lB@ .lg ?l g Vl`C ZlF@ al!ilalrlwl@~lBrlll wlB li  lBl@~lBrlll lBrl l@l@ l l@B i@ lB l@l@B lB l@ ( 5 R  (. Hg  o`  E   ' o@oo^ot `.p.........// /0/@/P/`/p/////////00 000@0P0`0p00000000011 101@1P1`1p11111111122 202@2P2`2p22222222233d4 j0[PH9jkGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1(.Ug GA$3p11137EgGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*GOW*99GA*cf_protectionGA+omit_frame_pointerGA+stack_clash GA*FORTIFY9k<GA+GLIBCXX_ASSERTIONSGA*99GA*GA*GA! < Eg7 C;T C;u 7 C; C; C; C;! C;C <q k< k< < 7  <4 =Z <Fs = $= $= = 8- G =s > > ? 70 ?G v@t +80 v@ pA [8 pA  BE p8Ne B SC 8- SC  F) 8:C Fg G %9 G G G " GF PHh G} x x PH kH 9  9( kHO *Jt 9 *J hJ 0J8  9 (  hJM  Jp  J  J  J  J&  JW  J  J  K  J  9 6  K`  K  K  K  K  L(  LW  &M  L  :  &M  DM  DMK  dMv  dM  M  :-  M' NR K:x N O O iO c:1 iOY GZ pO  @ GZ )[& PZS )[w la :& la a :  aD bp b d :B d e1 dIU e f f :O fK gw g /g /g  =- @@ N^ g `CVy pJ F K pM`  m p<L( + A pHY gx K (. J8` ^@' (. P. 3 7 Hg`g mHo{       @ ` /AW s=( DnCb{6c I Y     ! !)!@L@@8 @ pp p $ %  888$$ Std Ptd@s@s@s||QtdRtdpp p !!GNURJX|8r T@ TWBE| pqX (PmU&r sQp;A+iyb ;EXYrsK d; 9, U+SF"K   k R __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizephp_info_print_table_startphp_info_print_table_rowphp_info_print_table_end_emalloczend_object_std_initobject_properties_initzend_object_std_dtorxmlFreeTextWriterxmlBufferFreezend_objects_destroy_objectzend_parse_method_parametersxmlValidateNamexmlTextWriterStartAttributeNS__stack_chk_failzend_argument_value_errorzend_throw_errorxmlTextWriterWriteAttributexmlTextWriterWriteAttributeNSxmlTextWriterStartElementNSxmlTextWriterWriteElementxmlTextWriterStartElementxmlTextWriterEndElementxmlTextWriterWriteElementNSxmlTextWriterWritePIxmlTextWriterStartDocumentxmlTextWriterStartDTDxmlTextWriterWriteDTDxmlTextWriterWriteDTDElementxmlTextWriterWriteDTDAttlistxmlTextWriterStartDTDEntityxmlTextWriterWriteDTDEntityxmlBufferCreatexmlNewTextWriterMemoryphp_error_docrefzend_wrong_parameters_none_errorzend_string_init_internedzend_register_internal_class_exstd_object_handlersxmlTextWriterEndAttributexmlTextWriterFullEndElementxmlTextWriterEndPIxmlTextWriterEndCDATAxmlTextWriterEndCommentxmlTextWriterEndDocumentxmlTextWriterEndDTDxmlTextWriterEndDTDElementxmlTextWriterEndDTDAttlistxmlTextWriterEndDTDEntityxmlTextWriterSetIndentxmlTextWriterSetIndentStringxmlTextWriterStartAttributexmlTextWriterStartPIxmlTextWriterWriteCDATAxmlTextWriterWriteRawxmlTextWriterWriteStringxmlTextWriterWriteCommentxmlTextWriterStartDTDElementxmlTextWriterStartDTDAttlistxmlTextWriterStartCDATAxmlTextWriterStartCommentzend_parse_parametersxmlCreateURIxmlURIEscapeStrxmlParseURIReferencexmlFreestrncasecmptsrm_realpathstrlen__memcpy_chkphp_dirnamexmlFreeURIxmlNewTextWriterFilename__xstatexpand_filepathzend_empty_stringxmlTextWriterFlushxmlBufferContentmemcpyxmlBufferEmptyget_modulelibargon2.so.0libxml2.so.2libc.so.6_edata__bss_startxmlwriter.soGLIBC_2.14GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5LIBXML2_2.5.4LIBXML2_2.6.7LIBXML2_2.6.5LIBXML2_2.6.8LIBXML2_2.4.30LIBXML2_2.6.0/opt/cpanel/ea-libzip/lib64:/opt/cpanel/ea-libicu/lib:/opt/cpanel/libargon2/lib64   AP kti vii ui 4 Lp Px `P  >l f  FlȎ p^Ў  s Ql b @ [l Pd  kl(  f0  s@ xlH  bP  s` lh pdp  l a  s l `R ` lȏ QЏ  l 0S @ l d  l( a0  s@ lH aP  s` lh  Tp  m U  m V @ "mȐ dА  *m a  s 0m 0W  8m( e0  s@ CmH bP  s` Lmh dp ` Zp e ` Wm d ` `mȑ XБ  nm @b  s zm 0e ` m( X0 ` @ mH `bP  s` mh Yp  m Pe  m b  s mȒ ZВ  m pe  m b  s m( [0  @ mH p\P  `  nh bp  s n @]  'n j   rȓ kГ ` 4n f  Gn( p^0  @ ]nH bP @ ` rnh Pdp  n  f  n  b  nȔ pdД @ n a  n `R  o( Q0  @ %oH 0SP ` ` Boh dp @ Zo a  po a  oȕ  TЕ  o U  o V  o( d0  @ oH aP  ` oh 0Wp @ p e  &p b  :pȖ dЖ  Pp e  _p d  sp( X0 @ @ pH @bP  ` ph 0ep  p X  p `b  pȗ YЗ  p Pe  q b  +q( Z0  @ GqH peP @ ` cqh bp  }q [  q p\  qȘ bИ  q @]  q j  r( k0  k r  rؙ r ck r@ rX %r` +rx 4r 9r 4r Br 4r ck r@ ck` r Or ck +r 4r 9r8 4r@ rX 4r Or +r 4r 9r؜ 4r ]r er kr8 4r@ trX 4r r k r k` r ck r r؞ 4r ck r8 4r` r ck r r r ck@ r ck r ck r` r Cn  l Hk k r@  lH Hk`  rx r  l Hk ck r r %r +r8 4r@ 9rX 4r` Brx 4r  l Hk ck r  l( Hk@ ck` r  l Hk Or  l Hk ck@ +rX 4r` 9rx 4r r 4r  lȥ Hk Or +r 4r 9r8 4r`  lh Hk ]r er kr 4r trئ 4r  l Hk r`  lh Hk k r  l Hk k@  lH Hk` r ck r rب 4r  l Hk ck@ rX 4r  l Hk r ck r r@  lH Hk` r ck r  l Hk ck r`  lh Hk ck  lȫ Hk  l Hk r`  lh Hk r HkȬ Hk Cn l   _ P0 @L8 'l .l     ( 0 8 @ H P X #` $h 'p .x / 2 3 7 < @ C H J Kȯ OЯ Pد Q S  ( 0 8 @  H  P  X  ` h p x          !Ȱ "а %ذ & ( ) * + , - 0 1 4( 50 68 8@ 9H :P ;X <` =h >p ?x A B D E F G I J L Mȱ Nб Qر RHHij HtH5j %j hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8a%]g D%Ug D%Mg D%Eg D%=g D%5g D%-g D%%g D%g D%g D% g D%g D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%f D%}f D%uf D%mf D%ef D%]f D%Uf D%Mf D%Ef D%=f D%5f D%-f D%%f D%f D%f D% f D%f D%e D%e D%e D%e D%e D%e D%e D%e D%e D%e D%e D%e D%e DPHH51,ZH $HH5d&1H5&11cH $HH5,&1MH5%11+8H $HtH5%1H5%11H $HWH5%1`H5t%11H $HH5%1(PH5<%11;H $HH5L%1: H5%11K% H $HH5%1 H5$11 H5$11 H5$11 H5$11w H $H8H5$1A. H5U$11 H $HH5e$1 H5$11d HL$HH5,$1SH5#11+>HL$HH5#1UH5#11@H#11AEPH5i#11ZH5M#11H58#11H $HH5L#1QH51PH5"11Af.H=b Hb H9tH^ Ht H=ab H5Zb H)HHH?HHtHu_ HtfD=5b u+UH=b_ Ht H== d b ]w1fATUSGH )HcHHHfHHhIHHH Ha [ID$(H]A\ff.SHHHt jHCH{Ht HCH[USHHw HHLa dH%(HD$81(t1HL$0H,HHD$0PHD$ PHD$0PHD$ PHD$HP1LL$8H0tMHD$0HHhHH<$1:LHL$H$HHt$CHD$8dH3%(uHH[]USHHw H8La dH%(HD$(1(t1HL$ H,HHD$ PHD$PHD$(P1LL$ H tHHD$ HHhHH<$1fHT$H4$HCHD$(dH3%(uH8[]BfUSHHw HXL@` dH%(HD$H1(t1HL$@H,HHD$@PHD$(PHD$HPHD$0PHD$HPHD$0PHD$`P1LL$H7H@tRHD$@HHhH6H<$1~LD$HL$HH$Ht$CHD$HdH3%(uHX[]PUSHHw HHLP_ dH%(HD$81(t1HL$0H,HHD$0PHD$ PHD$0PHD$ PHD$HP1LL$8SH0tMHD$0HHhHH<$1THL$H$HHt$CHD$8dH3%(uHH[]qUHHw SH8Lp^ dH%(HD$(1(HD$t1HL$ H,H5HD$ PHD$PHD$(P1LL$ vH tJHD$ HHXHH<$1HT$H4$HHt,/u9EHD$(dH3%(u+H8[]@StHtEsUHHw SHXLp] dH%(HD$H1(HD$t1HL$@H,H;HD$@PHD$(PHD$HPHD$0PHD$HPHD$0PHD$`P1LL$H^H@tTHD$@HHXHH<$1LD$HL$HH$Ht$Mt2u?EHD$HdH3%(u1HX[]f.ktHtEKff.USHHw H8L@\ dH%(HD$(1(t1HL$ H,HHD$ PHD$PHD$(P1LL$ OH tHHD$ HHhH.H<$1HT$H4$HMCHD$(dH3%(uH8[]rfSHHw H@Lq[ dH%(HD$81(H$HD$HD$t1HL$0H,H?HD$0PHD$ PHD$8PHD$(PHD$@P1LL$0ZH0t7HD$0HHxHNHL$HT$H4$CHD$8dH3%(uH@[ff.@SHHw H@LZ dH%(HD$81(HD$HD$t1HL$0H,H`HD$0PHD$ PHD$8PHD$(PHD$@P1LL$0rH0t7HD$0HHxH{HL$HT$H4$CHD$8dH3%(uH@[SHHw HPLY dH%(HD$H1(HD$HD$HD$t1HL$@H,HHD$@PHD$(PHD$HPHD$0PHD$PPHD$8PHD$XP1LL$@}H@t HdH%(H$1HHHHO H= 1HHD$H. H$H$dH3%(u H[ff.HHO HR ooH oP0oX@)R o`Poh`oppo) R oo)R oH)R )%R HS HHER H)-R )5R )=R )R ) R )R Q HQ HHR Hp1HfUHSHHw HLR dH%(HD$1(t1,1HH t$H$HHxHՃHD$dH3%(uH[]HM H\ff.H N HfHVff.HV1qHF HHenabledXMLWriterOs!ss!attribute nameOssOs!ss!selement nameOs|s!Os!ss!|s!PI targetO|s!s!s!Os|s!s!Os|s!s!s!OsbOss|bs!s!s!OObOspcannot be empty:file:///file://localhost/Unable to resolve file pathO|bxmlwriter8.1.34API20210902,NTSopenUriopenMemorysetIndentsetIndentStringstartCommentendCommentstartAttributeendAttributewriteAttributestartAttributeNswriteAttributeNsstartElementendElementfullEndElementstartElementNswriteElementwriteElementNsstartPiendPiwritePistartCdataendCdatawriteCdatawriteRawstartDocumentendDocumentwriteCommentstartDtdendDtdwriteDtdstartDtdElementendDtdElementwriteDtdElementstartDtdAttlistendDtdAttlistwriteDtdAttliststartDtdEntityendDtdEntitywriteDtdEntityoutputMemoryxmlwriter_open_urixmlwriter_open_memoryxmlwriter_set_indentxmlwriter_set_indent_stringxmlwriter_start_commentxmlwriter_end_commentxmlwriter_start_attributexmlwriter_end_attributexmlwriter_write_attributexmlwriter_start_attribute_nsxmlwriter_write_attribute_nsxmlwriter_start_elementxmlwriter_end_elementxmlwriter_full_end_elementxmlwriter_start_element_nsxmlwriter_write_elementxmlwriter_write_element_nsxmlwriter_start_pixmlwriter_end_pixmlwriter_write_pixmlwriter_start_cdataxmlwriter_end_cdataxmlwriter_write_cdataxmlwriter_textxmlwriter_write_rawxmlwriter_start_documentxmlwriter_end_documentxmlwriter_write_commentxmlwriter_start_dtdxmlwriter_end_dtdxmlwriter_write_dtdxmlwriter_start_dtd_elementxmlwriter_end_dtd_elementxmlwriter_write_dtd_elementxmlwriter_start_dtd_attlistxmlwriter_end_dtd_attlistxmlwriter_write_dtd_attlistxmlwriter_start_dtd_entityxmlwriter_end_dtd_entityxmlwriter_write_dtd_entityxmlwriter_output_memoryxmlwriter_flushtruecontentisParamfalsepublicIdnullsystemIdnotationDataqualifiedNameversion"1.0"encodingstandaloneprefixnamespacevalueindentationenableInvalid or uninitialized XMLWriter objectmust be a valid %s, "%s" givenUnable to create output buffer ;|Np*b, TBzt8)a$H  ( 1 e o y p0D@` @hL`080 \ @ ` 4 H \ p @ ` @<  0 P p   0 D X 0l P p P 4HzRx $0FJ w?:*3$"D\p *E`(tdFAA PIB =Es@EAK`hhPpFxFFFP`f AAA zRx ` b88XDEAKPhXP`FhFpPPa AAA zRx P .8LEAKphxPFFFFFFPpk AAA zRx p 8@DEAK`hhPpFxFFFP`f AAA d88EHDPqXP`FhFpPPc AAE H8LP%EHDpqxPFFFFFFPpm AAK ,88PEAKPhXP`FhFpPPa AAA j88EKPBXP`FhFpFxFPPP AA zRx P 68  EKPzXP`FhFpFxFPPP AA p@\EK`ChPpFxFFFFFP`U AA zRx ` 8<EAKPhXP`FhFpPPa AAA |a88 EAKPhXP`FhFpPPa AAA I84p<EAKPmXM`MXAPc AAA 59d/EAKMMFFFFFFFFPwGZAc AAA zRx $9LXTFBE A(A0m (A BBBE m (E JBBH zRx 0(, AVd AA (H_AQ(4ADK0p AAA zRx 0  ,8DP\ht0DX lEK0 AA zRx 0 DBBD H(GPhXP`MXAPb (A ABBA zRx P$4< PP \d hx t        EK t AA zRx   X EK t AA Xo P \FBB B(A0A8G L@LBb 8A0A(B BBBG $zRx B,H ^BBB B(D0H8G` 8A0A(B BBBG zRx `(}   GNUP`P >lf Flp^ sQlb@ [lPd kl f sxl b slpd la sl`R` lQ l0S@ ld la sla sl T mU mV@ "md *ma s0m0W 8me sCmb sLmd` Zpe` Wmd` `mX nm@b szm0e` mX` m`b smY mPe mb smZ mpe mb sm[ mp\  nb sn@] 'nj  rk` 4nf Gnp^ ]nb@ rnPd n f n b npd@ na n`R oQ %o0S` Bod@ Zoa poa o T oU oV od oa o0W@ pe &pb :pd Ppe _pd spX@ p@b p0e pX p`b pY pPe qb +qZ Gqpe@ cqb }q[ qp\ qb q@] qj rk P k r@ r r ck@r@r %r+rB4r9rB4rBrB4r ck@r  ck@r@ Or@ ck@+rB4r9rB4rrB4r Or@+rB4r9rB4r ]rBerkrB4rtrB4r r@ k@r@ k@ rBck@rBrB4r ck@rB4r rBck@rBr@ rBck@rB ck@r@ ck@ r@ r  Cn@P lHkk r@ lHk r r lHkck@r@r %r+rB4r9rB4rBrB4r lHkck@r  lHkck@r@ lHkOr@ lHkck@+rB4r9rB4rrB4r lHkOr@+rB4r9rB4r lHk]rBerkrB4rtrB4r lHkr@ lHkk@r@ lHkk@ lHkrBck@rBrB4r lHkck@rB4r lHkrBck@rBr@ lHkrBck@rB lHkck@r@ lHkck@ lHk lHkr@ lHkr HkHkCn@%4A^ D ,kp x o`  ?  X?+ oooo E0E@EPE`EpEEEEEEEEEFF F0F@FPF`FpFFFFFFFFFGG G0G@GPG`GpGGGGGGGGGHH H0H@HPH`HpHHHHd4l _P@L'l.lGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1D9k GA$3p1113@L,kGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*GOW*@LROGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY@LPGA+GLIBCXX_ASSERTIONSGA*@LROGA*GA!GA* P ,k7 OT Ou @L O O O O! OC Ph P P @L jL @L* P $Q9 PdN h $Q 9Q 0Q  9Q }Q& @Q=< }Ql _R  jL8 _R .S3 L8X .S T L8 T  T9 M8` T U JM8 U %W2 M8Y %W W M8 W X M= Xd Y N Y Z N ZD [q 1N8 [ n\ iN8  n\K  4]w  N9  4]  o^  N9  o^H  R_o  O,  R_  _  `_  `  _4  `V  _k  ?O  RO  ?O  ?O  ?O+  `S  xay  `  RO  xa  a  a0  aW  a  a  a  a  a bC bl 4b 4b Tb Tb  tb- tbZ b b b b  b3 b[ wc \O wc Kd c qO4F Kdu fd fd d d% dN dt d d d d e4 eV &ev &e Fe Fe ke& keU e e f O  f fH O l f i O i j' i^B Oe j k k k k ,k/ `= @] s @ @ @ @` ` A@ j `@  @ `` @ ?` `  @ ` `  @D` @b @} @ ` ` @@ ` @ e`    `@  `!@ B ^ z `    `( `@ OB PU `Pk zx  Pp  e ,k T Pe9 `RW 0Sx d a pd k Z b V%> dU Ym f  @]/ 0e Q e  b#  peC  ba  U}  0W  @b   b  X  ! [%! b=! dW! fn!@s! ! ! X! `b! j! a" p^!" b;" aZ" Pd# Dz" d" p\" a8` ? D E H @L ,k@k@sup x       `""# $#Q#y#### ##$5$a$$$$$ %(%S%}%%%%&1&X&&&&&')'C'T'' '''' (+(M(x((((()$)L)2 o) k z))))*&*G*m* y*****+&+K+p++++++,:,a, {,,,,,-"*-A-.annobin_php_xmlwriter.c.annobin_php_xmlwriter.c_end.annobin_php_xmlwriter.c.hot.annobin_php_xmlwriter.c_end.hot.annobin_php_xmlwriter.c.unlikely.annobin_php_xmlwriter.c_end.unlikely.annobin_php_xmlwriter.c.startup.annobin_php_xmlwriter.c_end.startup.annobin_php_xmlwriter.c.exit.annobin_php_xmlwriter.c_end.exit.annobin_zm_shutdown_xmlwriter.start.annobin_zm_shutdown_xmlwriter.endzm_shutdown_xmlwriter.annobin_zm_info_xmlwriter.start.annobin_zm_info_xmlwriter.endzm_info_xmlwriter.annobin_xmlwriter_object_new.start.annobin_xmlwriter_object_new.endxmlwriter_object_newxmlwriter_object_handlers.annobin_xmlwriter_object_free_storage.start.annobin_xmlwriter_object_free_storage.endxmlwriter_object_free_storage.annobin_xmlwriter_object_dtor.start.annobin_xmlwriter_object_dtor.endxmlwriter_object_dtor.annobin_zif_xmlwriter_start_attribute_ns.start.annobin_zif_xmlwriter_start_attribute_ns.endxmlwriter_class_entry_cezif_xmlwriter_start_attribute_ns.cold.8.annobin_zif_xmlwriter_write_attribute.start.annobin_zif_xmlwriter_write_attribute.endzif_xmlwriter_write_attribute.cold.9.annobin_zif_xmlwriter_write_attribute_ns.start.annobin_zif_xmlwriter_write_attribute_ns.endzif_xmlwriter_write_attribute_ns.cold.10.annobin_zif_xmlwriter_start_element_ns.start.annobin_zif_xmlwriter_start_element_ns.endzif_xmlwriter_start_element_ns.cold.11.annobin_zif_xmlwriter_write_element.start.annobin_zif_xmlwriter_write_element.endzif_xmlwriter_write_element.cold.12.annobin_zif_xmlwriter_write_element_ns.start.annobin_zif_xmlwriter_write_element_ns.endzif_xmlwriter_write_element_ns.cold.13.annobin_zif_xmlwriter_write_pi.start.annobin_zif_xmlwriter_write_pi.endzif_xmlwriter_write_pi.cold.14.annobin_zif_xmlwriter_start_document.start.annobin_zif_xmlwriter_start_document.endzif_xmlwriter_start_document.cold.15.annobin_zif_xmlwriter_start_dtd.start.annobin_zif_xmlwriter_start_dtd.endzif_xmlwriter_start_dtd.cold.16.annobin_zif_xmlwriter_write_dtd.start.annobin_zif_xmlwriter_write_dtd.endzif_xmlwriter_write_dtd.cold.17.annobin_zif_xmlwriter_write_dtd_element.start.annobin_zif_xmlwriter_write_dtd_element.endzif_xmlwriter_write_dtd_element.cold.18.annobin_zif_xmlwriter_write_dtd_attlist.start.annobin_zif_xmlwriter_write_dtd_attlist.endzif_xmlwriter_write_dtd_attlist.cold.19.annobin_zif_xmlwriter_start_dtd_entity.start.annobin_zif_xmlwriter_start_dtd_entity.endzif_xmlwriter_start_dtd_entity.cold.20.annobin_zif_xmlwriter_write_dtd_entity.start.annobin_zif_xmlwriter_write_dtd_entity.endzif_xmlwriter_write_dtd_entity.cold.21.annobin_zif_xmlwriter_open_memory.start.annobin_zif_xmlwriter_open_memory.endzif_xmlwriter_open_memory.cold.22.annobin_register_class_XMLWriter.start.annobin_register_class_XMLWriter.endregister_class_XMLWriterclass_XMLWriter_methods.annobin_zm_startup_xmlwriter.start.annobin_zm_startup_xmlwriter.endzm_startup_xmlwriter.annobin_php_xmlwriter_end.isra.0.part.1.start.annobin_php_xmlwriter_end.isra.0.part.1.endphp_xmlwriter_end.isra.0.part.1zif_xmlwriter_start_comment.part.5zif_xmlwriter_start_cdata.part.4.annobin_php_xmlwriter_end.isra.0.start.annobin_php_xmlwriter_end.isra.0.endphp_xmlwriter_end.isra.0php_xmlwriter_end.isra.0.cold.23.annobin_zif_xmlwriter_end_attribute.start.annobin_zif_xmlwriter_end_attribute.end.annobin_zif_xmlwriter_end_element.start.annobin_zif_xmlwriter_end_element.end.annobin_zif_xmlwriter_full_end_element.start.annobin_zif_xmlwriter_full_end_element.end.annobin_zif_xmlwriter_end_pi.start.annobin_zif_xmlwriter_end_pi.end.annobin_zif_xmlwriter_end_cdata.start.annobin_zif_xmlwriter_end_cdata.end.annobin_zif_xmlwriter_end_comment.start.annobin_zif_xmlwriter_end_comment.end.annobin_zif_xmlwriter_end_document.start.annobin_zif_xmlwriter_end_document.end.annobin_zif_xmlwriter_end_dtd.start.annobin_zif_xmlwriter_end_dtd.end.annobin_zif_xmlwriter_end_dtd_element.start.annobin_zif_xmlwriter_end_dtd_element.end.annobin_zif_xmlwriter_end_dtd_attlist.start.annobin_zif_xmlwriter_end_dtd_attlist.end.annobin_zif_xmlwriter_end_dtd_entity.start.annobin_zif_xmlwriter_end_dtd_entity.end.annobin_zif_xmlwriter_set_indent.start.annobin_zif_xmlwriter_set_indent.endzif_xmlwriter_set_indent.cold.24.annobin_php_xmlwriter_string_arg.isra.3.start.annobin_php_xmlwriter_string_arg.isra.3.endphp_xmlwriter_string_arg.isra.3php_xmlwriter_string_arg.isra.3.cold.25.annobin_zif_xmlwriter_set_indent_string.start.annobin_zif_xmlwriter_set_indent_string.end.annobin_zif_xmlwriter_start_attribute.start.annobin_zif_xmlwriter_start_attribute.end.annobin_zif_xmlwriter_start_element.start.annobin_zif_xmlwriter_start_element.end.annobin_zif_xmlwriter_start_pi.start.annobin_zif_xmlwriter_start_pi.end.annobin_zif_xmlwriter_write_cdata.start.annobin_zif_xmlwriter_write_cdata.end.annobin_zif_xmlwriter_write_raw.start.annobin_zif_xmlwriter_write_raw.end.annobin_zif_xmlwriter_text.start.annobin_zif_xmlwriter_text.end.annobin_zif_xmlwriter_write_comment.start.annobin_zif_xmlwriter_write_comment.end.annobin_zif_xmlwriter_start_dtd_element.start.annobin_zif_xmlwriter_start_dtd_element.end.annobin_zif_xmlwriter_start_dtd_attlist.start.annobin_zif_xmlwriter_start_dtd_attlist.end.annobin_zif_xmlwriter_start_cdata.start.annobin_zif_xmlwriter_start_cdata.endzif_xmlwriter_start_cdata.cold.26.annobin_zif_xmlwriter_start_comment.start.annobin_zif_xmlwriter_start_comment.endzif_xmlwriter_start_comment.cold.27.annobin_zif_xmlwriter_open_uri.start.annobin_zif_xmlwriter_open_uri.endzif_xmlwriter_open_uri.cold.28.annobin_php_xmlwriter_flush.isra.7.start.annobin_php_xmlwriter_flush.isra.7.endphp_xmlwriter_flush.isra.7php_xmlwriter_flush.isra.7.cold.29.annobin_zif_xmlwriter_output_memory.start.annobin_zif_xmlwriter_output_memory.end.annobin_zif_xmlwriter_flush.start.annobin_zif_xmlwriter_flush.end.annobin_get_module.start.annobin_get_module.endext_functionsarginfo_class_XMLWriter_openUriarginfo_class_XMLWriter_openMemoryarginfo_class_XMLWriter_setIndentarginfo_class_XMLWriter_setIndentStringarginfo_class_XMLWriter_startAttributearginfo_class_XMLWriter_writeAttributearginfo_class_XMLWriter_startAttributeNsarginfo_class_XMLWriter_writeAttributeNsarginfo_class_XMLWriter_writeElementarginfo_class_XMLWriter_writeElementNsarginfo_class_XMLWriter_startPiarginfo_class_XMLWriter_writePiarginfo_class_XMLWriter_writeCdataarginfo_class_XMLWriter_startDocumentarginfo_class_XMLWriter_startDtdarginfo_class_XMLWriter_writeDtdarginfo_class_XMLWriter_startDtdElementarginfo_class_XMLWriter_writeDtdElementarginfo_class_XMLWriter_startDtdEntityarginfo_class_XMLWriter_writeDtdEntityarginfo_class_XMLWriter_outputMemoryarginfo_class_XMLWriter_flusharginfo_xmlwriter_open_uriarginfo_xmlwriter_open_memoryarginfo_xmlwriter_set_indentarginfo_xmlwriter_set_indent_stringarginfo_xmlwriter_start_commentarginfo_xmlwriter_start_attributearginfo_xmlwriter_write_attributearginfo_xmlwriter_start_attribute_nsarginfo_xmlwriter_write_attribute_nsarginfo_xmlwriter_write_elementarginfo_xmlwriter_write_element_nsarginfo_xmlwriter_start_piarginfo_xmlwriter_write_piarginfo_xmlwriter_write_cdataarginfo_xmlwriter_start_documentarginfo_xmlwriter_start_dtdarginfo_xmlwriter_write_dtdarginfo_xmlwriter_start_dtd_elementarginfo_xmlwriter_write_dtd_elementarginfo_xmlwriter_start_dtd_entityarginfo_xmlwriter_write_dtd_entityarginfo_xmlwriter_output_memoryarginfo_xmlwriter_flushderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zif_xmlwriter_start_cdata_finizif_xmlwriter_start_element_nszif_xmlwriter_start_dtd_elementzif_xmlwriter_write_attributezif_xmlwriter_write_attribute_nszif_xmlwriter_start_elementzif_xmlwriter_end_attributezif_xmlwriter_start_attributezif_xmlwriter_flushzif_xmlwriter_write_dtd_elementzif_xmlwriter_end_dtd_entityzif_xmlwriter_write_element_nszif_xmlwriter_start_pizif_xmlwriter_write_dtdzif_xmlwriter_start_comment__dso_handlezif_xmlwriter_write_dtd_entityzif_xmlwriter_write_commentzif_xmlwriter_start_attribute_nszif_xmlwriter_textzif_xmlwriter_end_dtd_attlistzif_xmlwriter_start_dtd_attlistzif_xmlwriter_end_dtd_elementzif_xmlwriter_write_elementzif_xmlwriter_write_pizif_xmlwriter_end_documentxmlwriter_module_entryzif_xmlwriter_set_indentzif_xmlwriter_start_document_DYNAMICzif_xmlwriter_write_dtd_attlistzif_xmlwriter_end_cdatazif_xmlwriter_write_cdatazif_xmlwriter_open_uri__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_zif_xmlwriter_start_dtdzif_xmlwriter_end_dtdzif_xmlwriter_output_memoryzif_xmlwriter_end_elementzif_xmlwriter_open_memoryzif_xmlwriter_end_commentzif_xmlwriter_full_end_elementzif_xmlwriter_set_indent_stringzif_xmlwriter_write_rawzif_xmlwriter_start_dtd_entityzif_xmlwriter_end_pixmlTextWriterStartDTDElement@@LIBXML2_2.6.0zend_parse_parameters_ITM_deregisterTMCloneTablexmlTextWriterWriteAttributeNS@@LIBXML2_2.6.0xmlNewTextWriterFilename@@LIBXML2_2.6.0zend_parse_method_parametersxmlFree@@LIBXML2_2.4.30zend_object_std_init_edataxmlTextWriterWriteDTDAttlist@@LIBXML2_2.6.0xmlFreeURI@@LIBXML2_2.4.30xmlTextWriterWritePI@@LIBXML2_2.6.0xmlTextWriterStartDTDAttlist@@LIBXML2_2.6.0xmlTextWriterStartAttributeNS@@LIBXML2_2.6.0xmlTextWriterStartPI@@LIBXML2_2.6.0xmlTextWriterStartDocument@@LIBXML2_2.6.0strlen@@GLIBC_2.2.5zend_objects_destroy_object__stack_chk_fail@@GLIBC_2.4xmlTextWriterWriteElementNS@@LIBXML2_2.6.0xmlTextWriterEndDTDAttlist@@LIBXML2_2.6.8php_info_print_table_rowxmlBufferCreate@@LIBXML2_2.4.30xmlTextWriterSetIndentString@@LIBXML2_2.6.5xmlTextWriterSetIndent@@LIBXML2_2.6.5xmlTextWriterEndAttribute@@LIBXML2_2.6.0xmlTextWriterEndComment@@LIBXML2_2.6.7xmlTextWriterWriteComment@@LIBXML2_2.6.0xmlURIEscapeStr@@LIBXML2_2.4.30xmlTextWriterStartCDATA@@LIBXML2_2.6.0expand_filepathxmlTextWriterWriteString@@LIBXML2_2.6.0xmlTextWriterStartComment@@LIBXML2_2.6.7__memcpy_chk@@GLIBC_2.3.4php_error_docrefxmlTextWriterFullEndElement@@LIBXML2_2.6.0__gmon_start__php_info_print_table_endmemcpy@@GLIBC_2.14xmlTextWriterWriteCDATA@@LIBXML2_2.6.0xmlTextWriterStartDTDEntity@@LIBXML2_2.6.0xmlValidateName@@LIBXML2_2.5.4xmlTextWriterFlush@@LIBXML2_2.6.0xmlTextWriterStartElementNS@@LIBXML2_2.6.0__xstat@@GLIBC_2.2.5zend_argument_value_errorxmlTextWriterEndDTDElement@@LIBXML2_2.6.8zend_string_init_internedstrncasecmp@@GLIBC_2.2.5zend_register_internal_class_exxmlTextWriterEndDocument@@LIBXML2_2.6.0xmlTextWriterEndDTD@@LIBXML2_2.6.0get_modulexmlFreeTextWriter@@LIBXML2_2.6.0xmlTextWriterWriteAttribute@@LIBXML2_2.6.0xmlTextWriterWriteElement@@LIBXML2_2.6.0xmlTextWriterEndPI@@LIBXML2_2.6.0zend_object_std_dtorzend_wrong_parameters_none_errorxmlNewTextWriterMemory@@LIBXML2_2.6.0__bss_startxmlBufferEmpty@@LIBXML2_2.4.30xmlTextWriterStartElement@@LIBXML2_2.6.0tsrm_realpathxmlBufferFree@@LIBXML2_2.4.30xmlTextWriterWriteDTD@@LIBXML2_2.6.0std_object_handlersxmlTextWriterStartDTD@@LIBXML2_2.6.0xmlParseURIReference@@LIBXML2_2.4.30xmlTextWriterStartAttribute@@LIBXML2_2.6.0xmlBufferContent@@LIBXML2_2.4.30xmlTextWriterWriteDTDEntity@@LIBXML2_2.6.0php_dirname_emalloczend_empty_stringxmlTextWriterWriteDTDElement@@LIBXML2_2.6.0xmlTextWriterEndElement@@LIBXML2_2.6.0_ITM_registerTMCloneTablephp_info_print_table_startzend_throw_errorxmlCreateURI@@LIBXML2_2.4.30xmlTextWriterEndCDATA@@LIBXML2_2.6.0xmlTextWriterWriteRaw@@LIBXML2_2.6.0__cxa_finalize@@GLIBC_2.2.5object_properties_initxmlTextWriterEndDTDEntity@@LIBXML2_2.6.8.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.data.bss.comment.gnu.build.attributes88$.o``48 @@ ?HoUod+nB??XxDDsEE~HH@L@L,k,k @k@k @s@s|uu  p px x       0-`P(#  0j-,PK!bmodules/pdo_pgsql.sonuȯELF>@9@@8 @pp 00 0  888$$PPP StdPPP PtdQtdRtd00 0 GNUy;!I/dl5~@ BE| pqXX~+j: K) R_Y:zGn"f|(d\! h K 2m>kK]aUw/iI PV5&do , !99F"C<q  $ @< x __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizephp_pdo_get_dbh_cezend_declare_class_constant_longphp_pdo_register_driverphp_pdo_unregister_driverphp_info_print_table_startphp_info_print_table_headerphp_info_print_table_rowphp_info_print_table_endget_modulelo_lseek64_zval_ptr_dtor_efreelo_closelo_readlo_writePQtransactionStatusPQbackendPIDpdo_raise_impl_errorzend_parse_parametersPQconsumeInputPQnotifies_array_initPQfreememPQsocketpolladd_assoc_string_exadd_assoc_long_exadd_index_stringadd_index_long__stack_chk_failphp_error_docref0PQstatusPQreset_emalloc_32PQprotocolVersionPQparameterStatusstrlenmemcpyzend_strpprintfPQexecPQresultStatusPQclear_emalloc_80_emalloc_96_emalloc_64_emalloc_56_emalloc_40PQgetvalueadd_next_index_longadd_next_index_string_zval_get_long_func_safe_emallocPQescapeStringConnPQescapeByteaConnphp_addcslashesPQfinish_ecalloczend_hash_index_findzend_spprintfpdo_parse_params__strcpy_chk_estrdupPQerrorMessage__memcpy_chk__zend_mallocphp_pdo_get_exceptionzend_throw_exception_ex__zend_callocmemchrPQconnectdbPQsetNoticeProcessorphp_strlcpyfile_globals_php_stream_open_wrapper_exPQgetResult_php_stream_writePQgetCopyData_php_stream_freePQresultErrorFieldpdo_handle_erroradd_next_index_stringlPQputCopyData_php_stream_get_linePQputCopyEnd_convert_to_string_ereallocstrtoul__errno_locationlo_unlinklo_creatPQexecParamsPQgetlengthPQoidValuePQcmdTuplesstrtoll_php_stream_allocstrpbrklo_openexecutor_globalsPQftablePQgetisnullPQntupleszend_hash_findzend_is_truezend_hash_index_existsphp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_ex_php_stream_copy_to_memzend_empty_stringPQunescapeBytea_php_stream_memory_open_estrndupPQfnamePQfsizePQfmodPQftypeap_php_snprintfPQpreparePQexecPreparedPQnfieldslibpq.so.5libc.so.6_edata__bss_startpdo_pgsql.soGLIBC_2.14GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5RHPG_9.6/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64gPti ii ui \v/M 0 :8 :@ @ ` U ߆ d Ȩ j  @c   P^ ( Y@ /H V` @h Q P = _ = ` 4( 0 :8 ;P ;X > E 8ذ 0N H  I Ph G 0h g g F f( 0F0 @8 p@@ p<P `=` 0=h =p <x `< k < 0lȱ |б zر y pv q `n lȯ  Я د @ o q t {    ( 0 8 @ H  P  X  `  h p x          Ȭ Ь ج     ! " # $ % &( '0 (8 )@ *H +P ,X -` .h /p 0x 1 2 3 4 5 6 7 8 9 :ȭ ;Э <ح = > ? A B C D E F G( H0 I8 J@ KH LP MX N` Oh Pp Qx R S T U V W X Y Z [Ȯ \Ю ]خ ^ _ ` a b c d e f g( h0 i8 j@ kH lP mX n` ph rp sx u v w x y z { | } ~HH HtH5 %Á hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwq%=z D%5z D%-z D%%z D%z D%z D% z D%z D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%y D%}y D%uy D%my D%ey D%]y D%Uy D%My D%Ey D%=y D%5y D%-y D%%y D%y D%y D% y D%y D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%x D%}x D%ux D%mx D%ex D%]x D%Ux D%Mx D%Ex D%=x D%5x D%-x D%%x D%x D%x D% x D%x D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%w D%}w D%uw D%mw D%ew D%]w D%Uw D%Mw D%Ew D%=w D%5w D%-w D%%w D%w D%w D% w D%w D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v D%v DH% H% HL11"HD$HK11EH% H% H% H% HLK11AG'H% H% H% f.H=x Hw H9tHu Ht H=w H5w H)HHH?HHtHu HtfD=w u+UH=bu Ht H=m Ydew ]wHH5RFH1ɺH5SFHoH5LFHQ|H5GFH3^H5CFH@H5?FHH=0u 1H@HH=u <1HDHHFH5F1iHFH5 F1HPt H5 F1H>FH5F1HbfHs @ff.1fHl HEfSHGIHˉL‹pHxPHH?[SH_uHH1[sH{f.HHGIHL‹pHxHHHHGIHL‹pHxOHHHHGH8Hff.@(HG HxHxt#SHGHH8#CHH[DH DHZG1ff.AUATUHH5;GSHH(,dH%(HD$1HL$HH$HD$4{(HC HXH{xH$HHHHD$HH=LcI<$LI<$Ll$HMt~Ht91HgH$HPH%HHH-OI<$DH|$D$D$aI<$I<$H@HuEHD$dH3%(H([]A\A]DH$fH 9CHE1H8fDH H5EHHcKHH5EHKH9H5EHfH1H#HcSHHSHt:u H$HtHD11/ESH_H;tH;[fDH;fDAWAVAUATUHSHH_HM~3HHHt~1H[]A\A]A^A_DHHu#EHHH@H@@13.2@3@HEH[]A\A]A^A_H;HEHcH>@H;0WH;H5CxHIHx IHLLHHHH{HCLcBD#H]EH;H;H5CAH;H5{CIH;H5CIH;H5zCIHDMAWHM11H5S@ZYHE@<%EH[]A\A]A^A_fD{0EH[]A\A]A^A_@{2f.H;H5BqHøHHHDfoDHs.H@foDH@@(foDH@2@8fxH@JHEEDfo3DHEH@fo#DH@@(foDH@@@8foD@X@HHEDfoCHAerH@foCH@H@'@(@8servfD@<@>.@?HEEk;foCHAe.H@foBH@H@"@(fDP8@:HEEffoBHAndHHaiting tH@H@@HH(@0o sefDH4@6.@7HEED onHEHHBad connH@H@HH@ ectifp$@&.@'HE711HHIHx IH|LLIHI$I|$ID$Ml$CD,LeEUSHH_suH[]HH=Hs HH[]DUHSHHzuBHHHEHtGHuP2H[]H1[]H`HHEHuP0H[]ÐAVIAUATIUHSLHLodH%(HD$1AtrL(LE1LHEHp'I}HHUD'HUHDHHL$dH3 %(uiH[]A\A]A^DI}HH<$IHGHHLHEHIHxHSA$'LAD'A#ff.HtkATUHS_Hx IH/LHHHH{LcHHCTBD#H[]H=A\1ff.fUSHHoHtUHH}Ht HEC H} Htt@+HE C HupHCH1[]KfAWAVIAUMATUSHHHHoHt$XHT$dH%(HD$81xHD$(IH(HCH>h HD$0HMQI} [HtFxHHu3I|$HtE,I|$H<1H1M,I}D}0HLx2HE1I}HE2ALjD$H%x+HE1HAEH}cCHT$HL$(HHt$LD$0CHb;H8#EHD$(H ID$(A)DE1f}0Dm2AEbcAHT$8dH3%(DHH[]A\A]A^A_fDHrHAD$fDHE,I|$ Hp:1H1M,DHD$(HD$HsxI~8>5fH|$vff.AWHFxAVAAUIATLg8UHSHH_HLL$LEH;L$LL$H{ DsINjD$PLKCHtE ukHC MtLH0A$HY00fAD$H<$Ht;HC H};HD[]A\A]A^A_D+fMtE L$DhAIcA|A4@ @ @ t @ IDfH t u ADu<$HcupHMcLHL/B(HC HPLL@.mDhfE~#IcA4UfDCHfDDAhHk [LH 8HljIA1ff.@AUI8ATUSH(H|$dH%(HD$1G FAIHD$L`AD$ID$ HX(HH, HH߾;H)ZHHuMt%I}/HtxPL( AHD$HxHHD$HxH|$HHD$HH(Ht HHMLCH-411TH|$I$Cf.H|$I<$5I<$HT$H5PHD$H 4a AL$AD$(HHT$B H HB HL$dH3 %(H([]A\A]fHLMLC1AUH)31Y^H|$I$CuI+>HMLEH93118H|$I$HUmHY@+IHL 2E11hH|$H [5HD$H _ HXZH|$1+WHߨtBLfDHIMH411M Off.@AWIH54AVAUATUSHH,dH%(HD$x1HD$XHL$@HD$ HD$(HT$HD$0HD$8HD$HHD$PPHD$8PHD$`PHD$@PHD$hPHD$HP1L$LD$hCH0{(YHC LhI}x0IE8H52HHD$ItIDžIH4] H|$811H53I]L@8HHubf.H8H;0HuLD$0HD$PMHHH3HtHT$(H|$HA t HD$ DH|$hH11RHL$(H0aAYAZH;Ht$h0H|$hIMBL9LLd$p8f.LcHt$pHLUI9 H|$pbHD$pH;1LuHHH;HuAGHD$xdH3%(HĈ[]A\A]A^A_f.L 2HtLL$(H|$HA t HD$ DHL$H|$h11H/H 2.H01L1l@H;H#CLH1hGLE1HL .XLZHt$H=.0u[AGfDH11LhL .L.Ht$A[H=/[t1LF@H11E1h9L ).L\Y^H-AHLL -1h0Ly01_AXH|$p+@AVAUATUHH5X0SHH`,dH%(HD$X1HD$@HL$(HD$HD$HT$HD$ HD$0HD$8PHD$(PHD$HPHD$0P1LL$PLD$0H {(HC LhI}xMu8H5n.L>ItIDžImI]HH;HuLD$ HD$8MH/HtHT$H|$0A t HD$DH|$HH11RHL$H,1_AXH;Ht$HH|$HIMtwLWurLLd$Pe1H{+fHt$PHHcxH|$P>HD$PH;1LufDH;pCLH1E1hHLL +XLZH=,Lt 1LPEHD$XdH3%(H`[]A\A]A^HhH;`HufH11E1hLL *LH=E,Y^bEgL 0-HtLL$H|$0A t HD$DHL$H|$H11H+NH b)H+1LaGAWAVIH5,AUATUSHH,dH%(HD$x1HD$`HL$@HD$(HD$0HT$HD$8HD$PHD$XPHD$@PHD$hPHD$HPHD$pPHD$PP1LL$xLD$POH0 {(yHC L`I|$xID$8H5*HHD$I$tIDŽ$I$H;U H|$ 11H5+L@8"HHfLD$8HD$XM#Hs+HtHT$0H|$PA t HD$(DH|$hH11RHL$(H)A[[I\$ fHH;HuH;Ht$h>H|$hIMLHD$pLL|$p'H;T$pLIL=L11HIIHuɾHE1H;1WHL 'E1h11LHt$H=!)_AXAFHD$xdH3%(HĈ[]A\A]A^A_fHt:CHA`H1E1hHLL '[Y^HaH;YHHuHt$H=h(]AAE~HL P)HtLL$0H|$PA t HD$(DHL$H|$h11H'nH %H'1L@H; HsCLfH1hLE1HL &&aXLZgHt$H=~'g1LX{H1LhE11ɺL %AYAZH@HL %LD(h1LzpAWIH5.(AVAUATUSHHx,dH%(HD$h1HL$@HT$ HHD$0HD$8HD$@HD$PHD$XHD$`PHD$HPHD$hPHD$PPHD$pP1LL$XLD$HH0HD$HDXE{(HC LhI}xIE8H5%HHD$ItIDžILD$8HD$PM$H&HtHT$0H|$HA t HD$(DH|$`H11RHL$0H$AYAZI] H8H;0HuHt$`H;H|$`HaHD$`HHHE1HD$HhLpHLI9uX[HWIHPHD$`| t  HD$`HHt$`H;VuI L9AFt<tLI6H|$`HVL9vHrH$H$HD$`I6HIHVbfHt:CHAH1E1h|HLL "Y^HH;HHuHt$H=#AAEgDHD$hdH3%(Hx[]A\A]A^A_DH|$`HtH;1E1lrHhuE111LL !Ht$H=6#_AXt 1LAGYfH;HCHH1E1hHLL [!XHZHt$H="uAGL #HtLL$0H|$HA t HD$(DHL$ H|$`11H"H HC"1L|@H|$`NHhk1L@ff.AUATUHH5"%SHH(,dH%(HD$1HL$HH<$Ht$ Iąu"{(&HC HXH{xLk8H5T!L$HtHǃHSHCDH8H11E1h HL |LZH= Yu+EHD$dH3%(uMH([]A\A]f1H&@H H 1HfDEf(ATUSHG HXH{xLc8HH50 LHtHǃH/HCH8uRH11E1hHL [LZH=YuJE[]A\fD1H5 1HE@<%E[]A\1H@HH [1]HCA\@AUATIUHSHdH%(HD$1HGHH4$1H5m E1jjH8LD$YY^HHAHt\uW11HCH11HHHI$HHkHL$dH3 %(HugH[]A\A]DCH HDE1h}H1HL XZHt1DH8H5iH=ff.ATIUSHFHH85HHt>CHxHH}HHE1hL 51L1iXZHo[]A\HH=mff.fUHHH=SHDÅtH[]DHEH8DE ЈE H[]DHH=ff.fAUIATUSHLgI<$HHHnō@wTHAD$(E1tHgHL[]A\A]fH 1HI@CHIHE1h<H1LL XHZH11E1h7L LIY^Uff.AUA ATAUHSHZH=G HHEHHPHJUHDkS1DcHH HCkHtHUH[]A\A]@HHD$sHD$H[]A\A]AWAVAUIH5ATUSHH8,dH%(HD$(1HL$HLL$H-LD$HD$1PH<$Ht$ Iƅu"&H|$H5=,H{(;HC L`I|$x M|$8H5SL#I$tIDŽ$I$OID$DH8x91{(uH{ D#HtDHPxAE IUH``HE11hL F1L|XZH=Lt1LfDAEHD$(dH3%(u2H8[]A\A]A^A_fH HJ1LSH_H{Ht IHC[f.AUATE1UHSHH_dH%(HD$1(tHG HC HH8H{Ht HCH{ Ht{Tt E]HC H{8Ht HC8H{0Ht HC0H{@Ht nHC@H{HHt XHCHH{(Ht BHC(H{HtEu|'HCH{Ht HCHHEHt$dH34%(H[]A\A]DD`AAAf.L#HH1HH1H$I<$H4$H<$IsMtLH{1DL+HH1HHC1H$tI}H4$GH<$IMtLH{ P`AVAUATUSH H_dH%(HD$1HD$H{tIHcWHH9(H\$dH3%(H []A\A]A^1LLlmQHCIL H5BL(H{H5jLHlHH|$H31L01HD$VHt$L)HHHupH|$11H!11H%H HHIYMt6LLH5LH(H|$nHCBL(wbv?H fD H5`LLZfH 7fDv":ZufH >DuSH f.HX5H d@H T@H D@H1H|$1HHt$H8kH|$H>Ht5HgH s@H kHTu11HC H5LH%DAVAUATUSGHNL<t#t FHf[]A\A]A^@tHuHv(Ht~$H@HHH8 1HHHC zfHH- CHH߅HOHDͿUCHH0H@H@P@HHG@HLgI|$0VH{ { IuHLhCHHS ID$0HHS ID$8HS ID$Hf{HHrID$@HS ]f.H@HAHv *0H}0H 8H+H1H~8HAE< G<,P<HHWHK HEIT$0HHS ID$8HS ID$@xID$0HE@xzID$8HE@xdID$@HE@xNID$HQH~ 1HC Hs(H}0HNHH1AE<tL^IEHK IT$0HHIMHS ID$8HI HS ID$@;ADH52LϿHH5; H90t;1HHHIE@<%AECHtHhHC8HUʉIT$0HK HHS ID$8HS ID$@ID$HHS H9 AEHIECHH}0PH E1hvL HZ1YHC8JAWAVIAUATUS1H(HoL$H}dH%(HD$1Ht:IFLcIIDHD$EPpXÅtBIEIHL$dH3 %(H([]A\A]A^A_fEPH}Dp螿DIEEPH}pHL$HILHDtMyLuO$dI}1I ۽MIFLeIMeI>@IuHUKdH>tDHEHIEIHUKdI}Ht$HƒxtUHHHt$Huz1ҿH5 HIEIf. ֿIHEDH8ϼyKIEIYHǻ賿HIEwHD$IH$"I~ D1IEII}IǺAW1AVAUATUSHHoHUHLcLoH|$HD褹HH$8ILI~ HHIH4$LIHI$I|$ID$Mt$CD4DMeH}O$IDHIEH}.DHIEHUH}LH$qH$BHEBD  wHBHcH>AEH[]A\A]A^A_@HD$HxHHtL躺HtiHfxHt#AEH[]A\A]A^A_AEH[]A\A]A^A_@AEH[]A\A]A^A_HD$IuHxHZHuATUHSH H_dH%(HD$1H{t6HD$HD$H=PHcHH|$>HcKP1HH;OP|!HL$dH3 %(H []A\SPH1H 1DH{Ht zHCLCHL$1H|$H 1H|$蚻HHt$H8誼H|$HC|H{H{Ač@軹3CP"fH 11pSH 11X;H 11@#H 11( H1H 1 C6HH}0DhE1HHL 1X1Zh1\ff.AWAVAUATUHSHH_dH%(HD$x1H{L#Ht HCHKCPH{TLl$HD$?LEhH 1L1(Ht$I<$H|$HC̹H{SH{Aƍ@[CTHK1H L1жHt$I<$袺H|$HCtH{Aō@EuE;H{0H{AM荷HHEP4C薷HH}0hL j E1HDHA[1[HT$xdH3%(HĈ[]A\A]A^A_fDH 1L1Ht$I<$迹H|$HC葸HKHs I<$H{TLl$L=Y tH{C¶HHH=' HK dL1LdI<$LHtH蛲Hs I<$HE8LCH1HtHHS(8HCHLAƍ@]CTH{PHs I<$HE8LK@1LC8HK0HtPHj#HCHAYAZAō@H{CƵHH}0DhHE1HL Z1Y,H{EHcwH{HCA 1HѴHEPH{ijAD$(DE<uUHE8LS@1LK8LC0HKHHtPHs(jARʲHCH^AXHH}0hMfDHuhgHHC薲HHPGSQL_ATTR_DISABLE_PREPARESPGSQL_TRANSACTION_IDLEPGSQL_TRANSACTION_ACTIVEPGSQL_TRANSACTION_INTRANSPGSQL_TRANSACTION_INERRORPGSQL_TRANSACTION_UNKNOWNenabledPDO Driver for PostgreSQL13.23PostgreSQL(libpq) VersionModule versionRevisionpdo_pgsql7.2.34API20170718,NTSpdo $Id: 9c5f356c77143981d2e905e276e439501fe0f419 $ PDO constructor was not calledPID: %d; Client Encoding: %s; Is Superuser: %s; Session Authorization: %s; Date Style: %s%s user='%s' password='%s' connect_timeout=%ld%s user='%s' connect_timeout=%ld%s password='%s' connect_timeout=%ld/builddir/build/BUILD/php-7.2.34/ext/pdo_pgsql/pgsql_driver.cUnable to open the file for writingCOPY %s (%s) TO STDIN WITH DELIMITER E'%c' NULL AS E'%s'COPY %s TO STDIN WITH DELIMITER E'%c' NULL AS E'%s'COPY %s (%s) FROM STDIN WITH DELIMITER E'%c' NULL AS E'%s'COPY %s FROM STDIN WITH DELIMITER E'%c' NULL AS E'%s'Cannot copy from an empty array00000|llInvalid result typeInvalid timeouttimeout was shrinked to %dmessagepidpayloadserver_versionSELECT VERSION()DateStylesession_authorizationis_superuserclient_encoding\'pdo_crsr_%08x$%dpdo_stmt_%08xSQLSTATE[%s] [%d] %s%s connect_timeout=%ld08006\\Nsp|ssswbUnable to write to files|sssrbUnable to open the files/a|sss%luSELECT LASTVAL()SELECT CURRVAL($1)ROLLBACKCOMMITBEGINr+bs|s+wpgsqlLOBCreatepgsqlLOBOpenpgsqlLOBUnlinkpgsqlCopyFromArraypgsqlCopyFromFilepgsqlCopyToArraypgsqlCopyToFilepgsqlGetNotifypgsqlGetPidpdo_pgsql lob streampp0ȻWaiting for connection to be madConnection OK; wWaiting for a response from the Received authentication; waiting for backend start-up to finish.Negotiating environment-driven parameter settingDEALLOCATE %sCLOSE %spgsql:oidpgsql:table_oidtableboolnative_typebyteaint8int2int4textvarchardatetimestampfHY093parameter was not definedHY105NEXTBACKWARDFIRSTLASTABSOLUTE %ldRELATIVE %ldFETCH %s FROM %sFETCH FORWARD 0 FROM %s42P05SELECT RELNAME FROM PG_CLASS WHERE OID=%dSELECT TYPNAME FROM PG_TYPE WHERE OID=%u/builddir/build/BUILD/php-7.2.34/ext/pdo_pgsql/pgsql_statement.cDECLARE %s SCROLL CURSOR WITH HOLD FOR %sX8;9<dƮ#X-4 7( c m w L,D<\ṯܱ <|ܲ0 Hlx,|` | X|lH < L | T , L < | | 8 t  |PLl(zRx $FJ w?:*3$"D \HtЮHRخ~Hq@ 840<)EcP6E[ H 0t(H]H(H]`!HUxU^\FP 8}FBA K(GPQ (A ABBF zRx P$S:EZ Q 4 yFBB B(A0D8D@s 8A0A(B BBBF P 8F0A(B BBBI HHPWHA@^ 8F0A(B BBBG T 8F0A(B BBBE 0KEAD O FAH [FA< EDG i FAH D CAH _FA@LXFEB D(D0G@~ 0A(A BBBF ,$sGAD JFN(tEAD b CAH LظFBE E(A0A8G 8A0A(B BBBG H<h!FFE E(E0D8DP 8D0A(B BBBF TLAFJA A(DP (A ABBJ DXL`OXAPXQ`fXAPD|FLB B(A0A8JYFFFFFXESB 8A0A(B BBBK LVDxL_M`LUA^QTB$zRx ,} yFBB A(K0GPFFFUERBJXDH 0A(A BBBI dLfA zRx (æ FBL B(A0A8JPFFFFFUESAOeBw 8A0A(B BBBC dJXALVDEJXGR SE  x|FLB B(A0A8GasFFFFUESBMJXAa 8A0A(B BBBF iEoBBJXD EE $zRx ,,DlxFBA K(GPXL`]XJPd (A ABBJ פ P,PAA h(L0](J Q ABG m ABH [CI y P0 t$FBD D(D@oHGPNHA@c (A ABBF QHKPUHA@4 PxBDF {(K0V(A KAB 0 [END O CAF fCA P FEA A(D0L (D ABBJ x8J@U8D0K8L@\8A0Hl FJD I(D@T (A ABBE V(A ABBX FBB L(A0A8GpExORxApF 8A0A(B BBBJ zRx p(g L X&E`8h l0FBD D(D@@ (A ABBF @ `;FBB A(A0DPP 0A(A BBBH H \FBB A(A0h (A BBBE D8O@U8C0H4 FBE B(A0A8F`u 8A0A(B BBBJ $FDB B(A0A8DP  8A0A(B BBBE q 8F0A(B BBBH L 8F0A(B BBBE L 8F0A(B BBBA @ `FAD D@y  AABD NHLPVHC@X <:FBB B(A0D8GFIZC[ 8A0A(B BBBG FBNBfLVCBMBL IK GNU::@ U߆dj@c P^Y/V@QP=_=\g * ,0 8 o` #  @ H ooooo< @*P*`*p*********++ +0+@+P+`+p+++++++++,, ,0,@,P,`,p,,,,,,,,,-- -0-@-P-`-p---------.. .0.@.P.`.p.........// /0/@/P/`/p/////////00 000@0P0`0p00000000011 101@1P1`1p111113` 4:;;>E8P30NH IPhG0hggFf0F@p@p<`=0==<`<k<0l|zypvq`nlGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1*9 GA$3p1113@9*GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113P<kGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY:L<GA+GLIBCXX_ASSERTIONS GA*FORTIFYP<*GA+GLIBCXX_ASSERTIONS : L</ :H :e @9 @9 : : : : :? ;a ; ; ; >< >< L<` @* P<B k^ :z : @9 : : :$ :A :b P< U< P< U< g< `< g<, <V p<s @ < < <) < < <6 <2 (=N =(] (=| X= 0=( X= = `=! =< =] =Uq @9  = m@ =} J9S  m@3 @Y p@:r @ )F @y )F {F( 0FKC {Fe F F F H G H  HH  Hsf  H  I  H  I  K  I  K<  !NZ  !N  qQ  0NA  x  qQ  U  Q|3  9 R  Uz  yY  Vy  9  yY  P^)  YC  9 d  P^  4c  P^  9,  4c  d=  @cT  9 r  d  e  d,  9  e $g? f$X $g g 0gx g g  g  gC +hd g[x +h Ch 0h Ch Ti  Ph TiJ is i k j 9  l *% :D :g : : : : : :A lm &l l& &l `n 0l0 `n* qR `n;m q hv q hv x  pv  xC zd yx z | z | *  |: : @:1 :G V8 } :0 H  ;~ , `i ;@  :3 XF O f L!w  ` H- * 8` * 0* 1 @9 ,@XP0 8 @      `2DVew #/?Tf 2EWn2>Uj})=Ul~ -AMj* 6IUh{ @<  '3CV]i{%1G\u  " 6 J b s "   .annobin_pdo_pgsql.c.annobin_pdo_pgsql.c_end.annobin_pdo_pgsql.c.hot.annobin_pdo_pgsql.c_end.hot.annobin_pdo_pgsql.c.unlikely.annobin_pdo_pgsql.c_end.unlikely.annobin_pdo_pgsql.c.startup.annobin_pdo_pgsql.c_end.startup.annobin_pdo_pgsql.c.exit.annobin_pdo_pgsql.c_end.exit.annobin_zm_startup_pdo_pgsql.start.annobin_zm_startup_pdo_pgsql.end.annobin_zm_shutdown_pdo_pgsql.start.annobin_zm_shutdown_pdo_pgsql.end.annobin_zm_info_pdo_pgsql.start.annobin_zm_info_pdo_pgsql.end.annobin_get_module.start.annobin_get_module.endpdo_pgsql_deps.annobin_pgsql_driver.c.annobin_pgsql_driver.c_end.annobin_pgsql_driver.c.hot.annobin_pgsql_driver.c_end.hot.annobin_pgsql_driver.c.unlikely.annobin_pgsql_driver.c_end.unlikely.annobin_pgsql_driver.c.startup.annobin_pgsql_driver.c_end.startup.annobin_pgsql_driver.c.exit.annobin_pgsql_driver.c_end.exit.annobin__pdo_pgsql_notice.start.annobin__pdo_pgsql_notice.end_pdo_pgsql_notice.annobin_pgsql_lob_flush.start.annobin_pgsql_lob_flush.endpgsql_lob_flush.annobin_pdo_pgsql_get_driver_methods.start.annobin_pdo_pgsql_get_driver_methods.endpdo_pgsql_get_driver_methodsdbh_methods.annobin_pgsql_lob_seek.start.annobin_pgsql_lob_seek.endpgsql_lob_seek.annobin_pgsql_lob_close.start.annobin_pgsql_lob_close.endpgsql_lob_close.annobin_pgsql_lob_read.start.annobin_pgsql_lob_read.endpgsql_lob_read.annobin_pgsql_lob_write.start.annobin_pgsql_lob_write.endpgsql_lob_write.annobin_pgsql_handle_in_transaction.start.annobin_pgsql_handle_in_transaction.endpgsql_handle_in_transaction.annobin_zim_PDO_pgsqlGetPid.start.annobin_zim_PDO_pgsqlGetPid.endzim_PDO_pgsqlGetPidzim_PDO_pgsqlGetPid.cold.2.annobin_zim_PDO_pgsqlGetNotify.start.annobin_zim_PDO_pgsqlGetNotify.endzim_PDO_pgsqlGetNotifyzim_PDO_pgsqlGetNotify.cold.3.annobin_pdo_pgsql_check_liveness.start.annobin_pdo_pgsql_check_liveness.endpdo_pgsql_check_liveness.annobin_pdo_pgsql_get_attribute.start.annobin_pdo_pgsql_get_attribute.endpdo_pgsql_get_attribute.annobin_pdo_pgsql_fetch_error_func.start.annobin_pdo_pgsql_fetch_error_func.endpdo_pgsql_fetch_error_func.annobin_pdo_pgsql_set_attr.start.annobin_pdo_pgsql_set_attr.endpdo_pgsql_set_attr.annobin_pgsql_handle_quoter.start.annobin_pgsql_handle_quoter.endpgsql_handle_quoter.annobin__pdo_pgsql_escape_credentials.start.annobin__pdo_pgsql_escape_credentials.end_pdo_pgsql_escape_credentials.annobin_pgsql_handle_closer.start.annobin_pgsql_handle_closer.endpgsql_handle_closer.annobin_pgsql_handle_preparer.start.annobin_pgsql_handle_preparer.endpgsql_handle_preparer.annobin__pdo_pgsql_error.start.annobin__pdo_pgsql_error.end.annobin_pdo_pgsql_handle_factory.start.annobin_pdo_pgsql_handle_factory.endpdo_pgsql_handle_factorypgsql_methods.annobin_zim_PDO_pgsqlCopyToFile.start.annobin_zim_PDO_pgsqlCopyToFile.endzim_PDO_pgsqlCopyToFilezim_PDO_pgsqlCopyToFile.cold.4.annobin_zim_PDO_pgsqlCopyToArray.start.annobin_zim_PDO_pgsqlCopyToArray.endzim_PDO_pgsqlCopyToArrayzim_PDO_pgsqlCopyToArray.cold.5.annobin_zim_PDO_pgsqlCopyFromFile.start.annobin_zim_PDO_pgsqlCopyFromFile.endzim_PDO_pgsqlCopyFromFilezim_PDO_pgsqlCopyFromFile.cold.6.annobin_zim_PDO_pgsqlCopyFromArray.start.annobin_zim_PDO_pgsqlCopyFromArray.endzim_PDO_pgsqlCopyFromArrayzim_PDO_pgsqlCopyFromArray.cold.7.annobin_zim_PDO_pgsqlLOBUnlink.start.annobin_zim_PDO_pgsqlLOBUnlink.endzim_PDO_pgsqlLOBUnlinkzim_PDO_pgsqlLOBUnlink.cold.8.annobin_zim_PDO_pgsqlLOBCreate.start.annobin_zim_PDO_pgsqlLOBCreate.endzim_PDO_pgsqlLOBCreatezim_PDO_pgsqlLOBCreate.cold.9.annobin_pdo_pgsql_last_insert_id.start.annobin_pdo_pgsql_last_insert_id.endpdo_pgsql_last_insert_id.annobin_pdo_pgsql_transaction_cmd.start.annobin_pdo_pgsql_transaction_cmd.endpdo_pgsql_transaction_cmd.annobin_pgsql_handle_rollback.start.annobin_pgsql_handle_rollback.endpgsql_handle_rollback.annobin_pgsql_handle_commit.start.annobin_pgsql_handle_commit.endpgsql_handle_commit.annobin_pgsql_handle_begin.start.annobin_pgsql_handle_begin.endpgsql_handle_begin.annobin_pgsql_handle_doer.start.annobin_pgsql_handle_doer.endpgsql_handle_doer.annobin_pdo_pgsql_create_lob_stream.start.annobin_pdo_pgsql_create_lob_stream.end.annobin_zim_PDO_pgsqlLOBOpen.start.annobin_zim_PDO_pgsqlLOBOpen.endzim_PDO_pgsqlLOBOpenzim_PDO_pgsqlLOBOpen.cold.10.annobin_pgsql_statement.c.annobin_pgsql_statement.c_end.annobin_pgsql_statement.c.hot.annobin_pgsql_statement.c_end.hot.annobin_pgsql_statement.c.unlikely.annobin_pgsql_statement.c_end.unlikely.annobin_pgsql_statement.c.startup.annobin_pgsql_statement.c_end.startup.annobin_pgsql_statement.c.exit.annobin_pgsql_statement.c_end.exit.annobin_pdo_pgsql_stmt_cursor_closer.start.annobin_pdo_pgsql_stmt_cursor_closer.endpdo_pgsql_stmt_cursor_closer.annobin_pgsql_stmt_dtor.start.annobin_pgsql_stmt_dtor.endpgsql_stmt_dtor.annobin_pgsql_stmt_get_column_meta.start.annobin_pgsql_stmt_get_column_meta.endpgsql_stmt_get_column_meta.annobin_pgsql_stmt_param_hook.start.annobin_pgsql_stmt_param_hook.endpgsql_stmt_param_hook.annobin_pgsql_stmt_get_col.start.annobin_pgsql_stmt_get_col.endpgsql_stmt_get_col.annobin_pgsql_stmt_describe.start.annobin_pgsql_stmt_describe.endpgsql_stmt_describe.annobin_pgsql_stmt_fetch.start.annobin_pgsql_stmt_fetch.endpgsql_stmt_fetch.annobin_pgsql_stmt_execute.start.annobin_pgsql_stmt_execute.endpgsql_stmt_executederegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__pdo_pgsql_driverzm_info_pdo_pgsql_finipdo_pgsql_create_lob_streamzm_shutdown_pdo_pgsql__dso_handlezm_startup_pdo_pgsqlpgsql_stmt_methods_DYNAMICpdo_pgsql_module_entry_pdo_pgsql_error__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_pdo_pgsql_lob_stream_opspdo_pgsql_functionszend_hash_index_existspdo_parse_paramsPQbackendPID@@RHPG_9.6php_pdo_unregister_driverfree@@GLIBC_2.2.5PQclear@@RHPG_9.6add_index_long_php_stream_alloc__errno_location@@GLIBC_2.2.5PQtransactionStatus@@RHPG_9.6_zval_ptr_dtorzend_parse_parameters_ITM_deregisterTMCloneTablezend_is_truezend_strpprintfPQfsize@@RHPG_9.6_emalloc_56ap_php_snprintfpdo_raise_impl_errorPQfname@@RHPG_9.6PQunescapeBytea@@RHPG_9.6_php_stream_write_emalloc_80_edataPQgetlength@@RHPG_9.6_php_stream_memory_openlo_creat@@RHPG_9.6file_globalsPQnfields@@RHPG_9.6_estrdup_safe_emallocstrlen@@GLIBC_2.2.5PQftable@@RHPG_9.6lo_read@@RHPG_9.6PQexecParams@@RHPG_9.6__stack_chk_fail@@GLIBC_2.4PQprotocolVersion@@RHPG_9.6php_info_print_table_rowPQresultStatus@@RHPG_9.6_php_stream_get_linePQgetResult@@RHPG_9.6PQsocket@@RHPG_9.6PQparameterStatus@@RHPG_9.6_emalloc_32add_next_index_stringlPQoidValue@@RHPG_9.6PQfinish@@RHPG_9.6PQcmdTuples@@RHPG_9.6add_assoc_string_exzend_spprintfPQnotifies@@RHPG_9.6PQreset@@RHPG_9.6_ereallocphp_pdo_get_exceptionPQgetCopyData@@RHPG_9.6zend_hash_index_findmemchr@@GLIBC_2.2.5zend_fetch_resource2_exPQputCopyEnd@@RHPG_9.6lo_open@@RHPG_9.6PQftype@@RHPG_9.6strtoll@@GLIBC_2.2.5__memcpy_chk@@GLIBC_2.3.4zend_declare_class_constant_long__gmon_start__php_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14PQntuples@@RHPG_9.6_emalloc_64PQresultErrorField@@RHPG_9.6PQescapeStringConn@@RHPG_9.6zend_throw_exception_exphp_file_le_stream__zend_mallocPQconnectdb@@RHPG_9.6_zval_get_long_funcphp_info_print_table_header_php_stream_copy_to_memphp_pdo_register_driverPQstatus@@RHPG_9.6_emalloc_96lo_write@@RHPG_9.6php_pdo_get_dbh_cePQgetvalue@@RHPG_9.6strpbrk@@GLIBC_2.2.5get_module_ecallocPQsetNoticeProcessor@@RHPG_9.6lo_lseek64@@RHPG_9.6__strcpy_chk@@GLIBC_2.3.4PQfreemem@@RHPG_9.6__bss_start_array_initphp_addcslashes_convert_to_string_efree_emalloc_40poll@@GLIBC_2.2.5lo_close@@RHPG_9.6PQescapeByteaConn@@RHPG_9.6__zend_callocpdo_handle_error_php_stream_open_wrapper_ex_php_stream_freePQconsumeInput@@RHPG_9.6add_next_index_stringphp_strlcpyPQgetisnull@@RHPG_9.6strtoul@@GLIBC_2.2.5PQerrorMessage@@RHPG_9.6_estrndupzend_empty_stringphp_file_le_pstreamexecutor_globalsPQexec@@RHPG_9.6add_assoc_long_ex_ITM_registerTMCloneTableadd_next_index_longphp_info_print_table_startlo_unlink@@RHPG_9.6PQprepare@@RHPG_9.6PQputCopyData@@RHPG_9.6PQfmod@@RHPG_9.6__cxa_finalize@@GLIBC_2.2.5PQexecPrepared@@RHPG_9.6zend_hash_findadd_index_string.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``48 H @#HoUopdHnB@ x**s0*0*~11@9@9G,, @@D XX PP 0 08 8@ @      0-  `Hl`!  #PK!xRxRmodules/fileinfo.sonuȯELF>B@8R@8 @رRرR Rrr Rrr888$$RRR StdRRR Ptd`R`R`RTTQtdRtdRrrppGNU:(L-qI9{@ {~BE| pqX?H& `Uq.^sH2O~"EW-w%v+r4r Dv_I+nP@Blbe$3f\UK', F"l.s Srhr `S Zr__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_emalloczend_object_std_initobject_properties_init_efreezend_object_std_dtorap_php_snprintfphp_info_print_table_startphp_info_print_table_rowphp_info_print_table_end__stack_chk_failzend_parse_parameters_exzend_replace_error_handling_emalloc_16zend_restore_error_handlingphp_check_open_basedirexecutor_globalszend_register_resourceexpand_filepath_with_modephp_error_docref0zend_throw_exceptionzend_parse_parameterszend_fetch_resourcezend_list_closezend_string_init_internedzend_register_internal_classstd_object_handlerszend_register_list_destructors_exzend_register_long_constantstrlenphp_stream_locate_url_wrapperphp_le_stream_contextzend_fetch_resource_ex_php_stream_open_wrapper_ex_php_stream_stat_php_stream_freememcpyphp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_ex_php_stream_tell_php_stream_seekfile_globalsphp_stream_context_allocget_module_ereallocstrcmpstderr__fprintf_chkabort__ctype_b_locstrchrstrtoulstrncmp__ctype_tolower_loc__printf_chkstrrchrzend_spprintfaccessstrstr_php_stream_write__errno_location_ecalloc_emalloc_160fputc_php_stream_get_linestrtolmemcmpstrtoull_emalloc_largestrtodpcre_get_compiled_regex_cacherc_dtor_func__xstatfwriteqsort_php_stream_opendir_php_stream_readdir_estrndup_php_stream_read_emalloc_huge_emalloc_40puts_estrdupgetenvlseekmemsetmktimephp_strlcpymkstempunlinkdup2zend_vspprintfstrerror_php_stream_castpcre_get_compiled_regex_cache_exzval_ptr_dtorphp_pcre_replace_implstrncpy__vasprintf_chklocaltime_rasctime_rstrcspngmtime_rzend_str_tolower_dup__ctype_toupper_locmemchrphp_pcre_pce_rephp_pcre_create_match_dataphp_pcre_mctxpcre2_match_8php_pcre_free_match_dataphp_pcre_match_implzend_hash_index_find__fxstatlibc.so.6_edata__bss_startfileinfo.soGLIBC_2.3.4GLIBC_2.8GLIBC_2.14GLIBC_2.4GLIBC_2.2.5GLIBC_2.3/opt/cpanel/ea-php73/root/usr/lib64Iti rii ~ii ui ii rDrPDrrrUȾr Fоr rrUrHrrrUrpIrr rU(rS0rr@rUHr SPrr`rUhr@Spr@rrWTr Fr rrUȿrpIпr@rrUrSr`rrUr SrrXrUrUrUrUrWTrU(rU@rUxrUrUrUrWTrUrU rUXrUrWTrUrWT8rUPrUr,WrPdrZrdrFUrcrZrZrdkRrnkR(rtkR8r|kRHrkRXrkRhrkRxrkRrkRrkRrkRrkRrkRrlRrlRr"lRr7lRrAlR(r^lR8rglR@r|zRHrzRPryRXrzRrzRrzRrzRrzRrzRrzRrzR0rzR8rzR@r{Rr{Rr&{Rr{Rr8{RrR{Rra{Rry{R0rxRprxRrzRrzRrzRrzRr{RrzRr{Rr{Rr{Rr{RrzRrzRrzRrzR r{R(rzR0r{R8r&{R@r{RHr{R`rzRhrzRprzRxrzRr{Rr&{Rr{Rr{Rr{Rr{Rr{Rr{Rr|Rr{Rr!|Rr{Rr&|Rr{RrRrRr"{RrR rR(rR0r R8rR@rFUHrRPr!RXr&R`r,Rhr5Rpr9Rxr>RrCRrGRrKRrSRr[RrcRrkRrsRr|RrRrRrRrRrRrW rhU(rr0rJPrEXrqUrxUr rrCrMr_rnrprsrzrr r(r0r8r@rHrPr Xr `r hr prxrrrrrrrrrrrrrrrrr r!r"r#r$ r%(r&0r'8r(@r)Hr*Pr+Xr,`r-hr.pr/xr0r1r2r3r4r5r6r7r8r9r:r;r<r=r>r?r@rArBrDrE rF(rG0rH8rI@rJHrKPrLXrN`rOhrPprQxrRrSrTrUrVrWrXrYrZr[r\r]r^r`rarbrcrdrerfrg rh(ri0rj8rk@rlHrmProXrq`rrhrsprtxrurvrwrxryHHqrHtH5r%rhhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphq%rD%}rD%urD%mrD%erD%]rD%UrD%MrD%ErD%=rD%5rD%-rD%%rD%rD%rD% rD%rD%rD%rD%rD%rD%ݏrD%ՏrD%͏rD%ŏrD%rD%rD%rD%rD%rD%rD%rD%rD%}rD%urD%mrD%erD%]rD%UrD%MrD%ErD%=rD%5rD%-rD%%rD%rD%rD% rD%rD%rD%rD%rD%rD%ݎrD%ՎrD%͎rD%ŎrD%rD%rD%rD%rD%rD%rD%rD%rD%}rD%urD%mrD%erD%]rD%UrD%MrD%ErD%=rD%5rD%-rD%%rD%rD%rD% rD%rD%rD%rD%rD%rD%ݍrD%ՍrD%͍rD%ōrD%rD%rD%rD%rD%rD%rD%rD%rD%}rD%urD%mrD%erD%]rD%UrD%MrD%ErD%=rD%5rD%-rD%%rD%rD%rD% rD%rD%rDHL$11HPH{MHHH|$ bHrH`1H5 1=H(11sEH11RAE H.110E16 H11AE H11AE, 1H?3R1H|$LfDH=ɌrHŒrH9tHrHt H=rH5rH)HHH?HHtHrHtfD=eru+UH=rrHt H=.zrd=r]wATUHSG )HcHH@fHL`H@L@ HLzHrHC L[]A\HGHt#SHHxH{}HC[ff.@SHGHHtHx覱H{=H[$@SHdH%(HD$1H\$]H 3RH߉1D$K1H H51HڿH5 HD$dH3%(uH[ff.ATUSHH $HPdH%(H$H1HGIw,HD$HD$HxHD$t (Ht8HL$LL$11LD$Hh 1_uuAD$@Ho 1HL$LL$LD$H) "tH[ HT$ 1HHCHtHxH{HCH|$HD$H|$HH8軯HCH(Ht$Hѯ8HH|$ HEHXH$HdH3%(HP[]A\f.H|$Hr?itPHH|$ ]HއrH`5ڈrHAD$ I$cH\$@H|$E111HgHt H\$HUH|$ HfrH`6~H.HL$11H HH|$ HrH`*SHH5n,RH,dH%(HD$1Ht=H$ӇrH5 H8DHtH$H8SCf.CHD$dH3%(uH[ff.ATUHSHH ,dH%(HD$1HCHxt {(1HL$HT$H5 NHD$ rH5P H8{HHtsH{t$t,HD$HEHD$dH3%(|H []A\H{LH{I`HL$M1AH 10E1HT$H5>RtHC HXHTjff.fU8SHdH%(H$1HHHHDŽrH=_ HHD$HtrH$HH$X1HHrHrH=ooHoP oX0o`@ohP)rop`oxp) roo)r)roo)%ro)-roH)5r)=r)r) r)r)r)%…r)-˅rHrrHr1Aع H=!r)AعH=  Aع H=AعH=AعH=AعH=Aع H=uAعH=WAع H=9AعH=H$dH3%(u H1[]AWAVAAUIATUDSHH,H4$ydH%(H$1f$HdirectorH$HCHD$HD$ HxHD$8t {(HL$ HT$0HHD$@H5P1LL$(LD$8ZYt'HD$0rH5H8IHu~DAEH$dH3%(IH[]A\A]A^A_E1HL$(HT$ LL$8LD$H5LEtHC LxMHt$MgH;AAyH\$ Hu;lHH;D$(1Ht$HHHUH|$86H|$8H5IH|$ 1ɺH5HHHt$PH_HD1HT$@H5A=HD$@PB A1HI.Ht$E1HL誨L9LHNHL$IAH11fEH11LڧLHIؾ1H1AEDH|$A7LpLxLH荧IIA<HT$(Ht$ L֦IMXLLD$Hx IHMLD$LHHHH{LHCLsH$BD3HAE0LX# H|$@H51(RIHH11LHLL1HLHD$LD$DHAHQHT$ HH@HD$(DHI}rLC8MIHC8L$D$i@t1HLD$LD$DAEHL%I[Ht11AEyfHVE1kff.HVE11Nff.HVA(H|r@@+tj~(@/tb~C@^tU1@|Df1@&t=@*t21@%@1@-Df.f.HtKSHH?H}H9t HtH[DH{HtH{ Httfff.@HtCATIUSH_$fDH{HtzH2L9t HHkHu[]A\@ATUHSH1ۀx-HHӋsH;s t+FfHCfoM1 2)E[]A\fIH׉s HxHHt@KHH1HyHHǁx HH) HHsus LH聒yH6H?HO0H5(HcH>W=p&<.HHHD€ /W H HcH>WH€HHO1HDWH)WHW=XfDH eO NHH@G HW 1H5$@HBHuظH1Ҹ HHHDHH<}ttDHt<}uuzH<]yqDH]<]uTGHH fDAHN HHHHD 1HGHH@!tCHwrʾHH81fD^t#xt>u@fDH uBHHkH`wrHH81Z5DUHSHH?H}H1H9tH9҃H[]ATIUS@Àu @Hjt []A\@LV[]HA\UHSHH?HCHAt$CH =HcH>@t3s1Dqu2tA~_4t*8u HH]H[]ÐHDfff1tH1[]ff.fAVAUATIUSHL.dH%(HD$1AE _A}-HÀu&"HDH]Àu DB u/HHA] ]LuÀu'HfIAÀuDX uH1LHH=H$(@tHDh tTA]1Ht*HL$dH3 %(H[]A\A]A^fA} /u1ɺ/H5RLLH5L1AE AE1H5-LȞtAMH5R1訞THH5L1芞1IU H5Rv"7AUATUSHHHoHt0IIfH HkHtHHLuLImCH[]A\A]ff.AUATUHSHH L D+CDltdHB uu DkHLCDltHHB bwH%CHHH]H[]A\A]LAutf.AWAAVAUATL%USHLwH|$L9trf.AV1tSfDIHiXHGD!D9FHtOHiXHHXft 9r9wMvL9t$uH[]A\A]A^A_fHiXH'@f8t+u"HXu݃HiXH9rDmLLHLD1AV9]AUATIUHSHdH%(HD$1tH/_HPHHE}HM>HyH1H9w!@82HAHH9tH1H9vHAHfDHIH)A$tfL1IL H(;H<$t(A$$H\$dH3%(H$H[]A\A]H<$wL1IL SHH5HHuH=!HAH9+@u!f.HH8uH HyHAu H9HVfDAVIHAHDP tsT$`tDH1H[]A\A]A^A_@HDlE,Et L9tTAH uHt$X1uE1HT$PH|$E1LH5RYiD$`tBD5HD$@<@bHT$PH|$MLH51?H|$1LH5较!L$`t HIHT$PH|$1MIDH5RHT$PH|$1H5R螖@HHHA@jAPH PVH6H(HHtHAjAPHbPVH6|H(HHAHAPjAPH PVH6HH[HH[HH[HcH[G<@t@1H5S뤐HtOSHH?+H{"H{(HttH{ HtfH{HtXH[OUSHHHH?HC(HC HC HCHtkHC@HCHH2C8HHCHCPHǃ HǃHH[]H1kHH[]ÐFu1Hff.AWAVAUAATIUHSH^H@DHL9HEHDsHAFEL<^vǿ\AVH LHcH>ff@vV@nFqt6ab&QaAr1DsEDH[]A\A]A^A_AH2L1FWtw)uu&f.tuP@AWAVAUATUSHH $HH $Ht$XHHH5HL$ 1LD$(E1dH%(H$ 1HWHHH$H HD$`HEPfHD$H$HD$HD$)$fHL$Ht$ H<$IHHD$`HID8 u HD$AELHD$hE$Hx>tED9%}hrs+DH0uHD$ HEP9fH$D%AhrH $ SHiX D)ʃ~#1DH5QH}$H$9$9SHiX$H1H{HHHǃPHH)XHfD#D$CHD$h&uHHD$hKHD$h(f;u CL|$pH|$h1LHT$hLt$pC L9 Lt$hC@ACfDSLl$hEuD<,uUA,uC IEHD$hAMA<1 HHcH>CHD$hLhLl$hDpA~uIEK@HD$hEuIAtCIEHD$hEuIA(uIEKHD$hEuIAHDHuA-u L1LLl$pCL9l$h7 MuLt$hA})({yMuLt$hA})fDE>Aǀu)qH@ILt$hE>AǀuBDx uAL-LLLu)MAHDP IM}MuAEIC LeAT$ ~%<c 1EL|$hAD$ E'AĀu-HDIL|$hE'AĀu ADB uAuHD$hLH=!HHD$0ˆCLd$hA$f..QH bH=E<@ ILd$h E<@3HD$pH5QH1E<@ H5H1L|$hfDH5QHr@C=Ll$hA}x D{A0H$1LI%ICuHHHHC Lt$hL;$Os+C H=L,7I- :LAHADP  LH<-LDI I HL!H9A Ll$hHt$0H|$htˆC^Ld$hDp HqH bLy1tIA)tfDDKE LD$hAT$MtH5QH1n~fH5H1O_f.IMHL$hKyƃE<@HH5WH1Ly<%LtH`%uK0H5MWrDIEDXLxE AkH5 DHcH>EMA-u D`LhA.u EeID\$8LD$0Z1LD$0D\$8L1HAIH0EeHHPADADQuHH=sA.E"]HHIA%tIA7<%uHWrLH5QHJ1}~AE1ELA-u D`HHA.u DaHA#u DaHHL$HD\$@DT$8LD$0C1LD$0DT$8HD\$@1HL$H"DHiA}bIMHL$hKH5H1{Ld$hHHt$0LDCLd$hD{HD$hLhLl$hx=IE<@cSH5H1*{:DIN聼IuL0/E<@ H5QH1zLHzLT$81|$XMH\$HLl$PD$@HC IHD$8HCHMHl$0 AmMIA/MwDE@HDx L9A\uAWMgՀxwH Hc4H>t$@t_@Dp@TH=T$\ T$\Hu5HD$HxuH=T$\HuH|$0H51yAmM*|$@tH|$0H5WQ1yD$@DD$@H\$HMHl$0EcA$ML+D$8{ EDCLt$hM{Ll$hBLt$8LH$1LH薬H$H$5H$*$H$蔽Ll$hf.AAƅANAIA,AmAE MAE MAE MAEMAEMAG00 AG0IAUAE MvAE MiHH5QHHIH1wLt$hH\$HAEML+D$8Hl$0{ EDCL|$hFHPrLH5 QH H1nw~IIqHAIDrm1HQH1sCdH#ff.AWAVAUATUSHH $HH $HfH|$H0AdH%(H$!1O<@D$L)D$P)D$`0HD$(H'HD$(@AdLd$pH޿Lgu$%=@dHD$PH|$HDHL$LIHD$8Jt$LHD$0HD$8HD$ HD$ DxH1DD9IIII<$f?HLHHIHD|$HT$Iu@ t&SC@t C t@C`HD$@<HMHH5L 9A HEƀtLH$L2QLEHHPHFrHH81H]ZYC tzHH5HIHt_H9tMAOHDH tFIGH9tA_t'HDX t%HvFr'H=5QH]DDD;l$RHt$H.HJ<2f?OI$AO0HHHgK fDSC @C DˆCsD9Ht#DHߺH m8HD$ DxHE]HHH0H!HHH9HS1fH HLI!I9D9uLc11L HA9wHiXHLl$(Ht$0IDuHEtKAWHE1HH\IDmA$DIt$IHiXHiXH腴E|$I9uHD$0H|$(HD$ D|(HHD$0HHl$8Lu LmMt2Et#LHMdH;HI9uLHI9uD$LH$!dH3<%(HD$(H![]A\A]A^A_@Ht$ HD~Ht$ D~Hw1H 1JK@F1@PHHHH Hf9tD9r3HH DHD$yH5QQHxPH1mHD$ DxHE1H|$(Ht$0HDwHE1dHCrH ZQHH81s1ҾHٱHD$H$H$Dl$8E1H$HD$ HD$0HD$@Ht$H|$虯HLD$HپHHn12AŅqLHGt$%=uL;t$0s8AHD$ HANM~N4Hc谳IM]DL|$0H|$ IK?ILHD$0]HD$ HuH|$LYH|$HD$PD$LHD$8H|$(HD$(AH|$Dl$8DzH|$ LH έMtWH|$PLd$ 11H|$8H\$LMHQH5QLNDd$,D1DT$0DL$8DD$<{HT$ L1DD$l$,D$(DL$D D 1H5&QLDL$>l$,DL$HH5BQL1DL$>l$,pD$(DL$D S1H5QLZ>l$,DL$6EDL$H5Q1H5~QL>l$,DL$uMH,HL$01H9D$0DBVAUATIUSHooNdH%(H$1o^0oV HD$)D$0of@onP)L$@ov`o~po)\$`oHD$HD$HD$ HD$()T$P)d$p)$)$)$)$)$ooHH)$)$H|HBtf.|HPu HHuH$HL$HT$LLl$0HHD$0LPLL$0LD$(1Y^Ņu.H|$4H$dH3%(uGH[]A\A]ÐHLLSLL$8LD$(HL$ HT$4f.HHWHcdH%(HD$1Htrx\9~XDrH?AfHc Auʈl$L$T$T$HcL$Hx'D9@H='@t2HH|$dH3<%(uH[ff.AWAIAVMAUMATIUSHcH(NH<$LHt$AIcHdH%(HD$1IIEAW8ImL9IBIU MHHHIEHI}E1E1U@=6rI$Hcu؈|$\$D$D$Hc\$Ix\I'ttIM9}vkIEJ0HD$H<$HHCHHcHH9{I}HWL9u&H~!1H|$dH3<%(u{H([]A\A]A^A_{IEI}IEIE$IEIE1IEIEIEu_ff.@AWHMAVIAUATULSHcىH(H HT$H<$AAMcdH<%(H|$1IHLHcIoIGMgHLHHIHItzE11W@=NrIHcu؈|$\$D$D$Hc\$HH't(MI9ovI7L$H|$ALL&L9t܁I?IGIGIG膆IH|$dH3<%(uCH([]A\A]A^A_1IG1IGIG5I袂fHMLD$HDX8DLL$M9vI:tLH@HAWIAVAUATUSHHXNDf0H|$ LHt$(DdH%(HD$H1HcH$HD$HzL4$Hl$LHHHHD$H{$HHDL@HD$HdrHCHt$HHHVHHHl$HHHHD$8HEE1E1DHD$0HD$(LcH|$ HT$HID$H $HcHH9$H|$t*HT$L@H;HHBHHH9uIrB=uшt$FT$GL$DL$ET$DIL9l$tULt$8H|$0'AH;H|$:H\$HdH3%(uQHX[]A\A]A^A_=tH|$σ1H{t1fHHHHHHI?HINl2M9]IJL9[IJLH)H9G<IuH92H)H9&H5r1MHпHD$1@ATuшt$RT$SL$PL$QT$PIlI9I9HHL$L<[ADIJ9LH)HL$.H|$pEljBH|$PDuu)EDDt$SAl$RDD$PEADD$QDt$PMFI AAu%GgH PQHcH>fDHCII9H|$II9HD$5` rIJT8ICILbHIL9*I9QN$HM9w8BDu Ljd$RD$S@|$P@|$QD$PLL9vvHHhLLH)HUHEHB/HB@H(LLH)HEBHBRf.HLLH)HEfB)fBH@I9'HI ITHxH9wH)IJIJH9uHLt$I>szHD$(IHHD$ HHt$XdH34%(Hh[]A\A]A^A_fDHfBGAAASLjd$RD$S@|$PH|$@|$QD$P"ELjd$RD$S@|$P@|$QD$Pf.H|$Ht$ LLT$HHD$L\$@H+LL$8LD$0HD$HHT$LT$HL\$@LL$8HLD$0HT$HD$WH8L$PHH0L$QHH(L$RHH L$SHHL$THHL$ÜL$VHD$Pzd$RD$SL$PL$QD$P̈D$QL$PD$P1H uff.AWAVAUATUSH(HdH%(HD$1HGHGHHvH0lIIHÍ=V rMHzfCfBCfBoCBCHD$EIIES,LL$MLLLfHt$dH34%(H([]A\A]A^A_ԈD$T$D$fECԈD$T$D$fECԈD$T$D$fEoKM^Cˆd$D$T$T$D$HD$EIIEC,ˆd$D$T$ T$ T$ @q.sff.AWIAVIAUATU1SHH^H^dH%(HD$1H5rHHH9r"HuԈD$$$fuHHIIIIIwIIHL@1LLGsI6IHZHFH98DrLE1E1:fE1LfD2I9LHFHLHLH9L>L^HLf:HLAf8L9~zxH~H9L^LZLXDfA dAACfD*f=LDfN4oL9`Dft1D GfLBHL9r1MILfBDrI9M<$1H\$dH3%("H[]A\A]A^A_@|$͈ $<$f8L9~AzA@|$D$AAl$D\$<$xH~H9L^MLLZI8D\$D,$MI0L$Dl$MI(Dl$MI Dl$MIDl$MIDl$L$HH9rAALE1D1f E1oHBPBPB PB PB PB PB PBPDJ1DB HKQ&oHHÐLeqA1HHt.EIA9uHH'qHLHQ1n@1HUQnAWAVAUATIUHH4=HHSHHH?HH!HH*H)HHHH?HIHI)K@HH)HHIAH *H'H)LE1M H@HIIHI?HHL)HIHH?HHH)HHH)HhQHH)1mAIcL9rHD[]A\A]A^A_@HBzՔHLHH)HH *HL)HIHH?L, HQII)LHL)HH)1EmAH͛QL1/mHcIL9jLH)HDHQ1mAIcL9ALH)HfHHtDDfEt:HOHHDDHHfEt IDAH9uADIAHBzՔUISI?HHHHdH%(HD$81HHH 2HL)HiH)HHHHHCHHHH?HHH)HHH)H@HH)HH $HL)HHHHH?H< H4=HH)HHH)HH)HHL$H!L)HH*HHHH?HH)HRHHH)HHL$HH 2H'h0?rHH'HL)HH/L)DAIHAA~X1AAQfmu/AnAAEkdD9u1iҐ9mA9uHcDȺQH)DDHDLQAA)A)iҐDEkd)D)׉¸AD9|D)H tt1H5QHWt#H1H5QAH[]øAWAVAUATUSH_HIM1H|$LYV=H|$?B[K@k8HD$dH3%(H []A\fD\HT$H aQHH5TQ:HDH1H|$HtfDH H $LD$ZLD$H1HC H5QLH $4@HH5QH1Vff.fS1HH5čQu1[HHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$E1HHD$HD$ HD$$D$0HD$dH3%(uHVff.fHHT$0HL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1LGPHHH$1$HD$HD$ HD$D$0OHD$dH3%(uHRUfUHSHHSHHHQ0H1[]Off.@SHSHHQ[01ff.@SHSHH֋Q[01ff.@AVHLAUIATULSHHdH%(H$1Ld$ HYQ$LHD$HD$HD$D$LiC>H|$1RRH HI~QLVMHx HHQHLHHHkH{HHCOD+Il$ H MHI1HT$IHLRHEMHXZC@u +uH]PHt)HUI|$ HuKIT$ HEE@t*D$HL$(dH3 %(u5H0[]A\A]A^fmuHOHxP\Lff.1G@u4SH OHtHS HC HS0C0P[ff.@SHHG@u&H_ HG FG0HXOHH[HHt$19OHt$H,OHH[AUATLd7UHSHL9D*HEPHI|$KfH9sb\HH0Qs@0@qS0QL9s'D+EtH0ADV@tD)HHL9rHH[]A\A]HAVAUATUSDo@A7LHSQH1qLKEtHGL1H$dH3 %(HĨ[]A\A]A^A_DFHAMIA H3HLHKIHMIDLHHxHHH@YH)Ha1HLH LJEHcKfDLJ E11ɺLH5._KHH@Ll$Ju1H5QHtnLJtot9H1H5QXLJu*l$f.1H5pQHuLI1=H5*QHy9FfgnHtmfff.@Ht1f.Ht ݟHt 齟Ht 靟Ht11~fD1DHt1`1ff.fHtH1=D1DHtWATIUHSHt+11MHH9tH[]A\[1]A\f1ff.fH}QHt 1G@tHG HtG@t G8fHtG<øff.fHtw<1øff.fDwwL`}QIcL>@Hf1Hf1HH1HfHf1Hf1HGBHL|QIcL>H1HH1HH1H1H1H1HAHHHT$@HL$HLD$PLL$Xt:)D$`)L$p)$)$)$)$)$)$dH%(HD$(1HHL$H|$H$HD$HD$HD$0D$D$0HD$ ExHL$HHHD$(dH3%(uHAff.fATUHSHPdH%(HD$H1H|$Ld$H|$LtO@HtOHHJEHHtfHH qL>DHHqH DH{ H?H}HyQH1CH}1HH/yQCHD$(dH3%(H0[]A\f.Hu~?CH}<.C HyQH?HKHgH}HxQ1CH}@H/?CH}t @,z$HJ?H}fC H}HwQQB@fZC DH{ HCHH{ 1.fHK H}1HbwQA+H{ H{ 1SH}Hs ?ff.K H}HexQ1AH}HK 1HWuAH}HvQ1YA@Hu~=C)fHh=CH}rHL=CH}^Hli=CH}EDHHK=CH} HB+=CH}Hb =CH}Hw@H=uƄAG<-H|$u%A<$uH|$H5qHD$HII9oLd$AG<fIT$HtHƤ~H9KH|$@HL$AG<u1LH5sQLHII9sfAL$RE1҃IT$LcAIIL9LT$(LL$ n2HT$0L$<@@t$;Q<t$;LT$(LLL$ 1L$iQHD$ f1H5hQH?f@H|$@H(iQHD$ /H|$0/aHiQHD$ H|$P/H|$@/H|$0//fHD$ LMLPHHt$0t$ AVLL$(D$8H H|$赟T$H|$T$蛟H|$葟H|$P7/H|$@-/H|$0#/T$HD$ LMLPHHt$0t$ AVLL$(QH …wIHEH;D$uyH|$HzhQHD$ H|$H5&hQC<uH5kQ1HDKH5fQHITr*PH)HHrfDAWIAVAUIATUSH(|HAL$HD$AD$ȃL$D$L;|$M9A/A]IEt:/@HDPt'b/HI)HHtH([]A\A]A^A_ËL$t S/@HDPt @(fDT$tX+/H@DB tEIEDZ ADJ IL;|$<1H([]A\A]A^A_D$t.@HDP u"I)HH5@A]DX IM9uM1!@AD EHD)HHH9u1YI98AMDJ u'fDDJ HI9uMAH([]A\A]A^A_ff.S%? É u [fDHqپHiQH81,[DW%TH jQHcH> f.+f.,f.%f.&f."f.#f.f. f.f.f.f.f.f.f. f.f.f. f. f.ff.fHt0LjQAIcL>ft1fAf@1@t føft1fAff.f f1ff)ffyf!mDHt(LiiQAIcL>t1A1@tøÅt1AfD ѐ1ff)ffD!fIHt-LhQHIc L>fD1IHD@tH1D1IHH HDH1HDHH@H)HDHH@H!Hff.f1HtL@tpvF@@HfH*.oQ1^@@uJHfH*X1DHfH*1\HxcfH*Y1HЃfHH H*XBf.HЃfHH H*XRfHЃfHH H*XDHЃfHH H*X4fD1HtM@tpvF@@HfH*f.@nQ1^@uJHfH*X1DHfH*1\HxcfH*Y1HЃfHH H*XBf.HЃfHH H*XRfHЃfHH H*XDHЃfHH H*X4fDIHt#HH VeQHcH>HHIHH@HHEDHHIHH H1HH)Hf.H!ff.AVIAUATIULSHHDl$@EuDHHL5A$C4C0C<u!H[]A\A]A^fDG4G0C<tA$DK0AUIMHjQPHqH81%H 1H[]A\A]A^DEt FHLL$5aLL$MuGA$HHH9w)HL4A$C0C41DLHH5iQfAWIAVAUATUSHLt$Pu&BwH _cQIHcH>f.DI9LI4H)H_vToAoNAJoV AR o^0AZ0of@Ab@onPAjPH1[]A\A]A^A_fLHL)b!IHC`Is#tAt1fATIzIIDHI)A1ADHuDDL9HGII)H_hLGXLw`J@1D˃IHI9IzI1HIBXI)AJ`Hf.MDH$I9HD$XD HD$`L+4$M11M9MGIAH$L9I<IGH|$H,LH9JBH\$L}.DHXL9s 8 I@H9@I HI)LHuL HHuHD$IEpH)IEXH$Im`IEhfIE`IEXMKL+4$H LIDx HHX?DMHH~_#@HpI9v xt HHH9v!I9v0@1@uùxu@AB_4HMHAADH<$I8HD$AL9IGHLDAWAVIAUATIUHSHHfDH5\QH IHMI)I9LLHMAOL)A?AGIHt<:tHu<:udBHrHt<}tHufD<}uf.HUxH$HH1H rDe0DH$dH3%(H[]A\A]A^A_ÐH}xHT$-H1HH譽E0L`UxHL?HIALd$0H/RQ1L-1LHH=E0L`+UxHL?HIFnALd$0HQQ1L1LHHż-E0L`UxHL?HIu1DHHuDLH5RQ=AE<=_0HcӸI9r]H[]A\A]A^A_fD_0HcDL!ÃtHL9vAF<E1@HWhFHcHWhFfD_0Hc[f_0HcKfHcW0H=@F_0<=tmAo<CfDH|$XdH3<%(-Hh[]A\A]A^A_11@HLL6AV=&<4!H5\XQL1ExLŃeAG<t&HߟqH='NQHfD11fGxOANAVHwx1I~ +GxAFAN Gx<=<>HHEt H9l$3H$I_`LH9s1f.HGxAFAVH\$ Iv H߃ Ƀ5H|$ IHIw`IXD$8Hl$@D$HHL$0E1IHIW`IHjLhj3 H LH|$0at |$HHH$H1H$2f.Gx AFGxH$ $<=vS<>jAW<AF1H9@ŅAIHKQHD1H9@AG<AIHJQHjf1H9@AG<AIHJQHBf.AW<AF1H9@ŅEAIHJQHDHqH81 DH1H!H9@AG<HIIHUH]JQHbqH81c XZ@H1H!H9@AG<HIIHUH+JQ1H9@ŅwAIHIQH2f.1H9@ŅGAIHIQHf.1/@f1f.@Ef1f/@1.ȸ@Ef.HHFqHHQH81@ H|$@1IHxH81IHI<$HA}txurHIWXHIGhIEH@IGp1H)IohI_p1>fD1f.@Ef1.ȸ@EH H vAWAVAUATIUHSHHH$T$ HL$L$HD$8H$L$HD$@H$DL$HHD$ H$HD$dH%(H$81GDH9HH)HAGxȉA'/Hcƀ|$WA~LHEf.AFt)$AW<HIG@` HAVA1t$0LLt$0ULD$(IH A A_0AG<tL@AV.bH5CQHcH>fDH9A~ ^In u$1In!$HT$`HLY H$fHD$0(AFtHN+Lt$PLt$@AVt$Xt$ t$8$P$PD$HL$x$H$QH@AtA.fH$XdH3%(D Hh[]A\A]A^A_@H$ANAHEQPHD$PH$qUAUH81'H LEFTAH9AHK H)H_vxEFD$DEtDLL$XLL$XLHt$(NHAQHcH>Dt$H}qH=;QHd@E1H9s鋔$uIIVAF H?H (BQHcH>H9wH)Hv$t 0HBQHcH>DH9]H)HwOH9=AFH)H9v+H9$yfADH9H)H8AAFAE݅AI9LIH{HD$8HT$L)LH$A fooPo` op0)$o@@)$oPP)$o``)$opp)$o)$o)$o)$oHD$)$ L)$0)$)d$)$@H$(H$0D$H $5AAG<XLLD $8D $HHAHD $D $9fAG< B1IH5W3QL芝!AF Ѐ|$WLLDAG<H@qLɾH8QLL$XH812EFLL$XH9Iwx@fD|$WA~LHDH9oHH)H_IwxDH9GHH)H7IcwxH@H9HH)HAGxAGy HZfH9HH)HAGyAGx H"f.H9HH)HAwxHA(AH9r&:f.HHDDBDH9v<x@f.ATIUHSHHLO`LWXdH%(HD$1IH$MLLLDLCt^tTMU AT$0H$H$fuH\$dH3%(u0H[]A\ÉHH9wHIL$AH$f@AWIAVAUATUHSHLW`H_XdH%(H$1LL$HD$LLH~uAAƃaADHyqLd$ H4L纀7MW E<MAI!%tLLLT$DIWLDIM)L{LT$MׅA=IH\$ACEtMAFE1Lt HAI9t2A}wD 1H)HLAH8QI9uE<LLtH5QLRH}x`L fH$dH3 %(Hĸ[]A\A]A^A_fLd$ D龀1HQLMW E<{HMIؾH~qARH7QH 8QH81LT$XZLT$:DHIDH7QL羀1nfT$HD$HDAt=E1fKHILTBAHDAuE<u[DL91fDH ~qMMH 7QH6QH81:MELT$H}qH 7QH6QH81LT$lfAUIATIUHSH_H7tNHڿttype=%d unknown%.3omissing format spectoo longcannot read magic file `%s'relative offset at level 0in_offset `%s' invalidsyntax error: `if'syntax error: `elif'syntax error: `else'type `%s' invalid'~' invalid for string typesmultiple rangeszero rangestring modifier `%c' invalid'/%c' not allowed on regex coding error: m->type=%d %c= not supportedstring too long: `%s'incomplete escape<>&^=![]().*?^$|{}no need to escape `%c'cannot get string from `%s'Unparseable number `%s'description `%s' truncatedUnknown !: entry `%s'(no description); %s/%s%s%s%s: %s cannot stat `%s'smallfile `%s' is too %sbad magic in `%s'using regular magic file `%s'Set %zu: Binary patterns: Text patterns:MAGICInvalid action %dapplestrength((------------------------------------------- X6from %s = fFoglio di lavoro Microsoft Exce%sapplication/vnd.ms-excel =B# Bazaar merge directive formatBazaar merge directive =\** This file contains an SQLiteSQLite 2.x database =Cobalt Networks Inc. Firmware vPaged COBALT boot romx&V%.4s =NetImmerse File Format, Versio=n NetImmerse game engine file= [0-9a-z.]+, version %s =8USE LYNX TO DISSOLVE THIS FILELyNX archive =1.Q, song "%.32s">NR, game "%.32s" = must be converted with BinHexBinHex binary textapplication/mac-binhex40x) , version %.3s = `Microsoft Excel 5.0 Worksheet%sapplication/vnd.ms-excel =old timezone data =old timezone data =old timezone data =old timezone data =old timezone data = old timezone data =Tue Jan 22 14:32:44 MET 1991Erlang JAM file - version 4.2 =OTue Jan 22 14:32:44 MET 1991Erlang JAM file - version 4.2 =%!PS-Adobe-3.0 Resource-FontPostScript Type 1 font text =SStart/Stop parameter header:Caris ASCII project summary =1002003old ACE/gr binary file>'- version %c =Inno Setup Uninstall Log (b)InnoSetup Logapplication/x-innosetupdat>%.7sx%s=@{x@%-.38sx @, version 0x%xx H, %u bytes< @x , %sx \%sx , "%s"> @x, %-.9s=+x\%-.9s=+x, %-.42s =;Gamebryo KFM File Version Gamebryo game engine animation File= [0-9a-z.]+, version %s =(*^ ::[ frontEndVersion = Mathematica notebookmb = 9Microsoft Word 6.0 Document%sapplication/msword =;SVN-fs-dump-format-version:Subversion dumpfile><(version: %s) = -----BEGIN CERTIFICATE-----PEM certificate =Warcraft III recorded game%s =Identification_InformationFGDC ASCII metadata = ;Documento Microsoft Word 6Spanish Microsoft Word 6 document dataapplication/msword =A# Bazaar revision bundle vBazaar Bundle = -----BEGIN CERTIFICATE REQPEM certificate request =nut/multimedia containerNUT multimedia container = # This is a shell archiveshell archive textapplication/octet-stream =AAVG7_ANTIVIRUS_VAULT_FILEAVG 7 Antivirus vault file data =# ACE/gr fit description ACE/gr fit description file =Paint Shop Pro Image FilePaint Shop Pro Image File =E-----BEGIN PGP SIGNATURE-PGP signatureapplication/pgp-signature= Gd =.Hpgp =3Windows Registry Editor =4Version 5.00 Windows Registry text (Win2K or above)text/x-ms-regeditreg == ACTApricotdiskimagefloppy image data (ApriDisk) =5 East_Side_InvertationaQuake I save: ddm4 East side invertationa =`Ph`P@@@@@@@@Linux S390=@ =hZ10 64bit kernel=Z9-109 64bit kernel= Z990 64bit kernel=Z900 64bit kernel=ȀZ10 32bit kernel=ȀZ9-109 32bit kernel= Z990 32bit kernel=Z900 32bit kernel =D(***********************Mathematica 3.0 notebook =@# abook addressbook fileabook address bookapplication/x-abook-addressbook =1@ࡱAAFB OM+4AAF legacy file using MS Structured Storage=2 (512B sectors)=3 (4kB sectors) =4@ࡱ +4AAF file using MS Structured Storage=5 (512B sectors)=6 (4kB sectors) =:bsjb pdb v1.0Microsoft Rosyln C# debugging symbols version 1.0 = BDNetscape Address book =-----BEGIN ECDSA PRIVATEPEM ECDSA private key =; -: 0:Source:=< -: 0:Graph:== -: 0:Data:GCOV coverage report =FICHIER GUITAR PRO v3.Guitar Pro Ver. 3 Tablature =UJunglevision Patch FileJunglevision instrument data =// ZenkakuCould not create WBMPCould not save WBMP#define %s %dstatic unsigned char %s = {static char %s = {static unsigned short %s = {static short %s = {bits[]%xinvalid XBMEOF before image was complete.XBM#define %s_width %d #define %s_height %d , 0x%02X}; static unsigned char %s_bits[] = { GIF87aGIF89a??gd warning: one parameter to a memory allocation multiplication is negative or zero, failing operation gracefully gd warning: product of memory allocation multiplication would exceed INT_MAX, failing operation gracefully ?BAAA`"?bX9?v/?o@x@zXzxyx y0y@yPy`ypyyyyyxyyz(zxS_ǼC@ @2e@m.L@>fY@?~u@h=P@,N˟z@V@'T@ E@5i?EfF3@J˜@>)@haeB@k{bi@?EfF3@XC ۤ@}@nd{y@Wdj@e`?=h#OD"u9CY8 kCqxnB0J^B--*7AQa6A>f@?=h#?D Ca _YzڈB]@sˆ@:nA aQJ>@%s (%i, %i) (%i, %i) @ @@@?@@0C-DT! @-DT!@G?@z??@E? ? q?? q? ؿ @@`UU?p?>f@ aQJ>@k{bi@Wdj@e`?>fY@ E@5i?;f?p@@C4CI@;JBf@ư>(;WcDo\opdqVq8q(qr(rr\r r$!sx!>sP"s"s(#t#&t#It\$st$t&cu'u4)`w@*w*w+xF~xGtypԃ4Dd,Ltpt4Tdtԏx$Lpt$4ĖXTԙtěDd$ԝ<$X|d4<`Tt8|TpDį8xdԴ0d`ĺԼp$DԿ$dHld $, 8!!!T!Dd"T"T<#tp#4#$Tp$$D%%8%T%4p%d%%%$%d%&&&&4&'t@'t'''(l(($(D(d(H)\)p)4T*Th*t|****++(++++4+T+t,,,,@,p,,,d,$,4-T-D`-$--,.@.d.x..T.d. /4/H/D\/p/ / / /$ / / 0T @0 p0 04 0D 0T0D1T$1d81TT1x1d1$(2t2T,3D|33T 4D \4 4T!4"85$5d'5D186426D26d97T>|7>7?74?8B8DH8dH9TK9tN9P(:Tt:tW:$X$;$^;^;^;^;`4<bx<d<d<e=eD=f=f=4g=i(>4jt>q>v(?vP?wx?}?$~@t~T@~@$@@@A8AD`ATtAtAĀAA0B|B4BTBdBtBBB(CTDCԃCDCC DDGFEE D(C0e(D BBB4T0>FFED G(D0a(D ABB<00>XFEG I(D0n(D BBB0P>YH K A 0>0>$1>-EEM KHA$81>GECO eHA`1>t1>EY01>IEGG ^ FAH DCA41>GFGA m ABB ACB01?iEGG ~ FAH DCAH02L?FBB G(A0D (^ BBBF C(A BBB|2?2?2?2?2? 2?EU(2?KEAD n CAD (3?\H } K HD3@{BBD G(G0X (F ABBG t(A ABB43<@aKAD _ AAG YFAH,3t@aIDC FABG$3@2EDF ^CA 4@JH | A <<4AFEE D(A0x (I BBBD |4A(4|A|EDD n AAC 4A 4A#HW4A 4A$H[5A$H[,5B@5B T5B_EY$t5XB1EFD [DA$5pB/ECD ]DA5xB/HZ F 5BWH I A 5B!HX6BKH } A 06C $D6CjEDG WAAHl6`CFBB E(D0D8DPq 8A0A(B BBBJ 4X1f06DDEAD b DAG FDA07DDECD b DAE FDAH47EFBB B(A0A8Dpc 8A0A(B BBBA zRx p(00(7dF4FDG ^AB$7xF7EGD `DA( 8FIFIF pAB888FVFEI F(D0n(D ABBt8F(8F>FDD ] ABA 8FPE$8 G(EDG IIA8(G H9$G FIA G&BBF]  AABH $T9P-EAD ]DA$|9P/ECD ]DA9P FBB B(A0A8G 8A0A(B BBBI HBTaHBAW HBAE 40:LYFFED G(D0a(D ABB$h:dY9EGD bDA(:|YKFIF rAB8:YXFEE I(F0n(D BBB:Y ;Y ;Y4;Y*I`P;YEAJ<p;,ZFBE G(C0 (A BBBE ,;ZQKDA {ABB$;[YEID FA8<T[ FBD C(Jj (A ABBG 4D<(\gYFG m AAK DAA|<`\ <\\ @<X\FGB A(A0G  0A(A BBBA (<`4FDG ^AB4=`VFEI F(D0n(D ABB,L=aFAD T ABF H|=aFGB B(A0A8N  8A0A(B BBBB $=g1ECD _DA=g $>g3EED _DA,>h @>g,T>g^EDD r AAG L>(h FFB B(A0A8G> 8A0A(B BBBG >l >l ?l ?l 4?l L?lO`?m't?n"EX?,n T?(nzFBB B(A0A8G L@IA 8A0A(B BBBC @?Ps$EDD q DAE V AAH vDA<@@$D$J$P$$$&$,$2$8$J$P$V$$$&$,$2$8$J$P$V$$$&$,$2$8$J$P$#$<$Z$##$<$Z$##$<$##$<$##$^$e$##$^$e$##$^$e$##$ "#$##$#$<$##$<$!##$m$p$N$T$$#$m$p$N$T$E3##$ $$$$##$ $$$$##$ $$$$##$ $$$$##$<$##$s$~$#$:#$$G#$#$#$:#$#$#$<$$$#$#$#$$#$$#$#$$#$$#$$#$$$#$#$+$++$$+++++++++$$#$O #$B #$!$$$$&$,$2$8$>$D$J$P$#$G#$G#$G#$G#$!##$$#$$#$m$p$N$T$E3#] #$m$p$N$T$$#$%%#$#$ %%#$$$#$!%+     ' 4 E b  { 40%8%o` $ @%j%pD oo$oo<#o%0|@|P|`|p|||||||||}} }0}@}P}`}p}}}}}}}}}~~ ~0~@~P~`~p~~~~~~~~~ 0@P`p 0@P`pЀ 0@P`pЁ 0@P`pЂ 0@P`pЃ 0@P`pЄ 0@P`pЅ 0@P`pІ 0@P`pЇ`0pPP;3o!%Н%3% [ % P%% GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1{A GA$3p11134GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY  GA*GOW*IGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA+GLIBCXX_ASSERTIONS GA*IGA*GA*GA! Н ! 3 I ` t{      I Н6 "Q c 0 @%t%`% " P P h  P' hP w p     ) A _ 5{ 5 Ȭ Ȭ  Ь,1 R 2q I 2 ί ί  5 6W 6r Ʊ Ʊ V V  " /A I"[ /  kG  ~' ~J gk < g   η η; 1[ 1 ֹ ֹ v v  -  X      n%  nM  .s  .  N  N      7  X  w        (  J?  g  (    (  v  0F  v'  E  k    n  n   [, Q >t >    I#1 V ^y ^    . Q r ] l ]  `J  i' D _  ^ ^    3 O 1i 1     f' fP .w .     3 Y }  ^ ^  ! ? ^ !{  `   P  02 Q q   0  ! ) P ~u ~   ) W . .   N# NL s    ^ ^A i  ~ ~ P F P5 .P .m  =<  g y! g! .H .f    G  $ ]E p  >#   ) O a!p   L #( Q x* *  _   Ϙ^B  _h          "! I! Rn! R! ! ! " )" N" s" 2" 2" r" r # 2# X# |# # )# )# -$ )$ L8$ LT$ ln$ l$ $ $ V$ $ V% 9% `% % % Y% % % &  A&  g& % & % & = & 0  & = ' R ' R =' u Z' u y' ' ' ' ' +&( k@( b( +( E( E( e( e( ,) pL) Ot) ) ) ) )  * ** J* h* * d* d* &* !+ &+ <2+ <P+ Kl+ K+ /+ P+ ,H, /$, L>, LZ, lt, l, , , , , - 7- R- n- -*-`%-%-%-%-%`-`%x.%H-.%0K. %xe.%x.@%H.%x.@%x.%.%H/@%0/ %H:/%L/%c/%~/%/ %H/%H/%0/@%`0%0!0@%H;0%R0%m0 %H0%H0%0 %0%0%1%51@%xI1%H[1%Hr1 %H1%x1 %x1%`1%H1`%H1%H2%H12%HG2@%H]2 %0x2%02%02`%02 %02%03`%03%073%0R3%q3%03%x3 %`3%H3%`3`%`3%H3%x4 %`4%0+4%`E4%xW4%xr4@%4%4%04%04%H4%5%05%x,5%xE5%\5@%xr5@%5%5@%05%05`%5 %05%5%x6 %(6%<6%P6*c6 %u6%6%`6`%H6`%`6%H6%6@%x7@%`  H! 3 I t` t{    7 :7 RR7 B]7 Rt7 7 `7 7 7 7 8 )8 %?8 Z8 ~!s8 ~!8 !8 !8 !8 !9 #99 #f9 ~%9 ~%9 &9 &: '5: '_: ,': ,': C): C) ; )7; )_; ); ); *; *< *7< *f< ,< ,< ,,< ,,= M,== M,k= ,= ,= ,= ,> Y-=> Y-[> $.w> `-> $.> 5.> 5.> .? .*? .N? .x? /? /? /? /@ I02@ I0^@ o0@ o0@ 0@ 0A 0E EbE EE EE EE ?GE ?G#F HLF HvF KF KF UF UG V.G UGG VtG VG VG ]G ]H b'H bIH ciH cH lcH cLH lcI c$I cOI fxI fI lI lI lJ l+J oPJ orJ rJ rJ NuJ Nu K fx2K fxbK {K px^K {K }|L }|,L xUL xzL L L L  M 9+M 9TM H{M PM M M M tM tN N =N SN mN PN N N  O 3O =[O =O oO oO O P X )P IP 2gP 2P P P xP P Q tQ t=Q WQ uQ Q Q Q Q vQ  R %R z3R NR V  gR VR R R =S =CS ooS oS &S &T y3T ybT ǢT ǢT T T xU &U Ǧ;U PU iU tU tU U U U V %V ٣AV ٣_V {V V V V MV MW -W JW eW W ϤW ϤW W W gX g6X ٥SX ٥nX kX kX X X X Y 7Y TY ǦoY ЦY Y Y Y tY t Z )Z IZ bZ Z ЦZ ݦZ Ц Z ݦZ Z [ +[ KF[ KT[ Kr[ [ P\[ [ +[ {[ +\  \ 0a,\ I\ d\ ar\ \ B\ 2\ B\ \ PJ] )] _O] _u] n] n] ] ] /^ -^ K^ tj^ t^ ^ ^ ^ _ $_ ?_  M_ e_ #{_ #_ #_ =_ 0 _ =_ d_ @$_ d` *` p$5` P` i` u` ` ͫ`  ` ͫ` /` 0 a a 4a Ma tga ta a a a a 0b a7b ahb b b *b b b tc t5c Qc qc c c c Ϭc /c Ϭd '"d ЬW0d 'Jd Qbd 0!md Qd d `Kd d d  d e *-e 0@e We ne e te e e e f 3f 0[f f tff f Tf Tg 7g Ug {qg ڜ0g {g g g g h I-h IMh kh }h 0h h h h h i 5i Li gi i i i i i >i j P6j PHj Pfj xj P(j xj j k Y3k Y^k k k k l +l Nl &ol &l il il l m ?m cm 0m 0m m m m m n 8n Wn on n 0n @n @n Eo E6o z[o z{o o o o o p QBp Qlp p p p  p q 7>q 7aq Jq Jq \q \q r 6r TVr T{r r r ]r ]s  L @ i Dv 5% 0  p pK% pc r0 H {K a ?+} 09 K  @ @G  r~   RD  ) PT; 2R 2c Q8`<#$%j { |   4`\$`40%8%@%%@%%%!fz y&D\p (?Rb !8JV%]cw/Rn ,;Oc} !:Vk /Diz +;Mfy ,=\o{  ;\osP!& 0  +7 @ FJdn%z 6Oa{ /?CTct0BVj{  '8Sw"*<\u.annobin_gd.c.annobin_gd.c_end.annobin_gd.c.hot.annobin_gd.c_end.hot.annobin_gd.c.unlikely.annobin_gd.c_end.unlikely.annobin_gd.c.startup.annobin_gd.c_end.startup.annobin_gd.c.exit.annobin_gd.c_end.exit.annobin_php_gd_error_method.start.annobin_php_gd_error_method.end.annobin_zm_startup_gd.start.annobin_zm_startup_gd.endphp_free_gd_imagephp_free_gd_fontle_gd_font.annobin_php_free_gd_font.start.annobin_php_free_gd_font.end.annobin__php_image_stream_ctxfree.start.annobin__php_image_stream_ctxfree.end_php_image_stream_ctxfree.annobin__php_image_output_ctxfree.start.annobin__php_image_output_ctxfree.end_php_image_output_ctxfree.annobin_php_free_gd_image.start.annobin_php_free_gd_image.end.annobin_zm_deactivate_gd.start.annobin_zm_deactivate_gd.end.annobin_zm_info_gd.start.annobin_zm_info_gd.end.annobin_zif_imagetypes.start.annobin_zif_imagetypes.end.annobin_zif_gd_info.start.annobin_zif_gd_info.end.annobin__php_image_stream_ctxfreeandclose.start.annobin__php_image_stream_ctxfreeandclose.end_php_image_stream_ctxfreeandclose.annobin_zif_imageloadfont.start.annobin_zif_imageloadfont.endzif_imageloadfont.cold.12.annobin_zif_imageistruecolor.start.annobin_zif_imageistruecolor.end.annobin_zif_imagecolorset.start.annobin_zif_imagecolorset.end.annobin_zif_imagecolorstotal.start.annobin_zif_imagecolorstotal.end.annobin_zif_imagesx.start.annobin_zif_imagesx.end.annobin_zif_imagesy.start.annobin_zif_imagesy.end.annobin_zif_imageantialias.start.annobin_zif_imageantialias.end.annobin_zif_imagesetstyle.start.annobin_zif_imagesetstyle.endzif_imagesetstyle.cold.13.annobin_zif_imagetruecolortopalette.start.annobin_zif_imagetruecolortopalette.endzif_imagetruecolortopalette.cold.14.annobin_zif_imagepalettetotruecolor.start.annobin_zif_imagepalettetotruecolor.end.annobin_zif_imagecolormatch.start.annobin_zif_imagecolormatch.endzif_imagecolormatch.cold.15.annobin_zif_imagesetthickness.start.annobin_zif_imagesetthickness.end.annobin_zif_imagefilledellipse.start.annobin_zif_imagefilledellipse.end.annobin_zif_imagefilledarc.start.annobin_zif_imagefilledarc.end.annobin_zif_imagealphablending.start.annobin_zif_imagealphablending.end.annobin_zif_imagelayereffect.start.annobin_zif_imagelayereffect.end.annobin_zif_imagesavealpha.start.annobin_zif_imagesavealpha.end.annobin_zif_imagecolorallocatealpha.start.annobin_zif_imagecolorallocatealpha.end.annobin_zif_imagecolorresolvealpha.start.annobin_zif_imagecolorresolvealpha.end.annobin_zif_imagecolorclosestalpha.start.annobin_zif_imagecolorclosestalpha.end.annobin_zif_imagecolorexactalpha.start.annobin_zif_imagecolorexactalpha.end.annobin_zif_imagecopyresampled.start.annobin_zif_imagecopyresampled.end.annobin_zif_imagerotate.start.annobin_zif_imagerotate.end.annobin_zif_imagesettile.start.annobin_zif_imagesettile.end.annobin_zif_imagesetbrush.start.annobin_zif_imagesetbrush.end.annobin__php_image_stream_putbuf.start.annobin__php_image_stream_putbuf.end_php_image_stream_putbuf.annobin__php_image_stream_putc.start.annobin__php_image_stream_putc.end_php_image_stream_putc.annobin__php_image_output_putbuf.start.annobin__php_image_output_putbuf.end_php_image_output_putbuf.annobin__php_image_output_putc.start.annobin__php_image_output_putc.end_php_image_output_putc.annobin_zif_imagedestroy.start.annobin_zif_imagedestroy.end.annobin_zif_imagecolorallocate.start.annobin_zif_imagecolorallocate.end.annobin_zif_imagepalettecopy.start.annobin_zif_imagepalettecopy.end.annobin_zif_imagecolorat.start.annobin_zif_imagecolorat.endzif_imagecolorat.cold.16.annobin_zif_imagecolorclosest.start.annobin_zif_imagecolorclosest.end.annobin_zif_imagecolorclosesthwb.start.annobin_zif_imagecolorclosesthwb.end.annobin_zif_imagecolordeallocate.start.annobin_zif_imagecolordeallocate.endzif_imagecolordeallocate.cold.17.annobin_zif_imagecolorresolve.start.annobin_zif_imagecolorresolve.end.annobin_zif_imagecolorexact.start.annobin_zif_imagecolorexact.end.annobin_zif_imagecolorsforindex.start.annobin_zif_imagecolorsforindex.end.annobin_zif_imagegammacorrect.start.annobin_zif_imagegammacorrect.end.annobin_zif_imagesetpixel.start.annobin_zif_imagesetpixel.endzif_imagesetpixel.cold.18.annobin__php_image_bw_convert.start.annobin__php_image_bw_convert.end_php_image_bw_convert_php_image_bw_convert.cold.19.annobin_zif_imageline.start.annobin_zif_imageline.end.annobin_zif_imagedashedline.start.annobin_zif_imagedashedline.end.annobin_zif_imagerectangle.start.annobin_zif_imagerectangle.end.annobin_zif_imagefilledrectangle.start.annobin_zif_imagefilledrectangle.end.annobin_zif_imagearc.start.annobin_zif_imagearc.end.annobin_zif_imageellipse.start.annobin_zif_imageellipse.end.annobin_zif_imagefilltoborder.start.annobin_zif_imagefilltoborder.end.annobin_zif_imagefill.start.annobin_zif_imagefill.end.annobin_zif_imagecolortransparent.start.annobin_zif_imagecolortransparent.end.annobin_zif_imageinterlace.start.annobin_zif_imageinterlace.end.annobin_zif_imagecopy.start.annobin_zif_imagecopy.end.annobin_zif_imagecopymerge.start.annobin_zif_imagecopymerge.end.annobin_zif_imagecopymergegray.start.annobin_zif_imagecopymergegray.end.annobin_zif_imagecopyresized.start.annobin_zif_imagecopyresized.end.annobin_zif_imagesetclip.start.annobin_zif_imagesetclip.end.annobin_zif_imagegetclip.start.annobin_zif_imagegetclip.end.annobin_zif_imagefilter.start.annobin_zif_imagefilter.endphp_image_filter_negatephp_image_filter_grayscalephp_image_filter_brightnessphp_image_filter_contrastphp_image_filter_colorizephp_image_filter_edgedetectphp_image_filter_embossphp_image_filter_gaussian_blurphp_image_filter_selective_blurphp_image_filter_mean_removalphp_image_filter_smoothphp_image_filter_pixelatezif_imagefilter.cold.20.annobin_php_image_filter_pixelate.start.annobin_php_image_filter_pixelate.end.annobin_php_image_filter_smooth.start.annobin_php_image_filter_smooth.end.annobin_php_image_filter_mean_removal.start.annobin_php_image_filter_mean_removal.end.annobin_php_image_filter_selective_blur.start.annobin_php_image_filter_selective_blur.end.annobin_php_image_filter_gaussian_blur.start.annobin_php_image_filter_gaussian_blur.end.annobin_php_image_filter_emboss.start.annobin_php_image_filter_emboss.end.annobin_php_image_filter_edgedetect.start.annobin_php_image_filter_edgedetect.end.annobin_php_image_filter_colorize.start.annobin_php_image_filter_colorize.end.annobin_php_image_filter_contrast.start.annobin_php_image_filter_contrast.end.annobin_php_image_filter_brightness.start.annobin_php_image_filter_brightness.end.annobin_php_image_filter_grayscale.start.annobin_php_image_filter_grayscale.end.annobin_php_image_filter_negate.start.annobin_php_image_filter_negate.end.annobin_zif_imageconvolution.start.annobin_zif_imageconvolution.endzif_imageconvolution.cold.21.annobin_zif_imageflip.start.annobin_zif_imageflip.end.annobin_zif_imagecrop.start.annobin_zif_imagecrop.endzif_imagecrop.cold.22.annobin_zif_imagecropauto.start.annobin_zif_imagecropauto.endzif_imagecropauto.cold.23.annobin_zif_imagesetinterpolation.start.annobin_zif_imagesetinterpolation.end.annobin_zif_imagescale.start.annobin_zif_imagescale.end.annobin_zif_imageaffine.start.annobin_zif_imageaffine.endzif_imageaffine.cold.24.annobin_zif_imageaffinematrixget.start.annobin_zif_imageaffinematrixget.endzif_imageaffinematrixget.cold.25.annobin_zif_imageaffinematrixconcat.start.annobin_zif_imageaffinematrixconcat.endzif_imageaffinematrixconcat.cold.26.annobin_zif_imageresolution.start.annobin_zif_imageresolution.end.annobin_zif_imagecreatetruecolor.start.annobin_zif_imagecreatetruecolor.endzif_imagecreatetruecolor.cold.27.annobin__php_image_create_from_string.isra.2.start.annobin__php_image_create_from_string.isra.2.end_php_image_create_from_string.isra.2_php_image_create_from_string.isra.2.cold.28.annobin_zif_imagecreatefromstring.start.annobin_zif_imagecreatefromstring.endphp_sig_gd2zif_imagecreatefromstring.cold.29.annobin__php_image_create_from.isra.3.start.annobin__php_image_create_from.isra.3.end_php_image_create_from.isra.3_php_image_create_from.isra.3.cold.30.annobin_zif_imagecreatefromgif.start.annobin_zif_imagecreatefromgif.end.annobin_zif_imagecreatefromjpeg.start.annobin_zif_imagecreatefromjpeg.end.annobin_zif_imagecreatefrompng.start.annobin_zif_imagecreatefrompng.end.annobin_zif_imagecreatefromwebp.start.annobin_zif_imagecreatefromwebp.end.annobin_zif_imagecreatefromxbm.start.annobin_zif_imagecreatefromxbm.end.annobin_zif_imagecreatefromxpm.start.annobin_zif_imagecreatefromxpm.end.annobin_zif_imagecreatefromwbmp.start.annobin_zif_imagecreatefromwbmp.end.annobin_zif_imagecreatefromgd.start.annobin_zif_imagecreatefromgd.end.annobin_zif_imagecreatefromgd2.start.annobin_zif_imagecreatefromgd2.end.annobin_zif_imagecreatefromgd2part.start.annobin_zif_imagecreatefromgd2part.end.annobin_zif_imagecreatefrombmp.start.annobin_zif_imagecreatefrombmp.end.annobin__php_image_output.isra.4.start.annobin__php_image_output.isra.4.end_php_image_output.isra.4_php_image_output.isra.4.cold.31.annobin_zif_imagegd.start.annobin_zif_imagegd.end.annobin_zif_imagegd2.start.annobin_zif_imagegd2.end.annobin_zif_image2wbmp.start.annobin_zif_image2wbmp.end.annobin_php_find_gd_font.start.annobin_php_find_gd_font.endphp_find_gd_font.annobin_zif_imagefontwidth.start.annobin_zif_imagefontwidth.end.annobin_php_imagepolygon.isra.7.start.annobin_php_imagepolygon.isra.7.endphp_imagepolygon.isra.7php_imagepolygon.isra.7.cold.32.annobin_zif_imagepolygon.start.annobin_zif_imagepolygon.end.annobin_zif_imageopenpolygon.start.annobin_zif_imageopenpolygon.end.annobin_zif_imagefilledpolygon.start.annobin_zif_imagefilledpolygon.end.annobin_php_imagechar.isra.8.start.annobin_php_imagechar.isra.8.endphp_imagechar.isra.8.annobin_zif_imagechar.start.annobin_zif_imagechar.end.annobin_zif_imagecharup.start.annobin_zif_imagecharup.end.annobin_zif_imagestring.start.annobin_zif_imagestring.end.annobin_zif_imagestringup.start.annobin_zif_imagestringup.end.annobin__php_image_convert.isra.9.start.annobin__php_image_convert.isra.9.end_php_image_convert.isra.9_php_image_convert.isra.9.cold.33.annobin_zif_jpeg2wbmp.start.annobin_zif_jpeg2wbmp.end.annobin_zif_png2wbmp.start.annobin_zif_png2wbmp.end.annobin_php_imagettftext_common.isra.10.start.annobin_php_imagettftext_common.isra.10.endphp_imagettftext_common.isra.10php_imagettftext_common.isra.10.cold.34.annobin_zif_imageftbbox.start.annobin_zif_imageftbbox.end.annobin_zif_imagefttext.start.annobin_zif_imagefttext.end.annobin_zif_imagettfbbox.start.annobin_zif_imagettfbbox.end.annobin_zif_imagettftext.start.annobin_zif_imagettftext.end.annobin_zif_imagefontheight.start.annobin_zif_imagefontheight.end.annobin_zif_imagecreate.start.annobin_zif_imagecreate.endzif_imagecreate.cold.35.annobin_get_module.start.annobin_get_module.end.annobin_phpi_get_le_gd.start.annobin_phpi_get_le_gd.end.annobin__php_image_output_ctx.isra.11.start.annobin__php_image_output_ctx.isra.11.end_php_image_output_ctx.isra.11_php_image_output_ctx.isra.11.cold.36.annobin_zif_imagexbm.start.annobin_zif_imagexbm.end.annobin_zif_imagegif.start.annobin_zif_imagegif.end.annobin_zif_imagepng.start.annobin_zif_imagepng.end.annobin_zif_imagewebp.start.annobin_zif_imagewebp.end.annobin_zif_imagejpeg.start.annobin_zif_imagejpeg.end.annobin_zif_imagewbmp.start.annobin_zif_imagewbmp.end.annobin_zif_imagebmp.start.annobin_zif_imagebmp.endarginfo_gd_infoarginfo_imagearcarginfo_imageellipsearginfo_imagechararginfo_imagecharuparginfo_imagecoloratarginfo_imagecolorallocatearginfo_imagepalettecopyarginfo_imagecreatefromstringarginfo_imagecolorclosestarginfo_imagecolorclosesthwbarginfo_imagecolordeallocatearginfo_imagecolorresolvearginfo_imagecolorexactarginfo_imagecolorsetarginfo_imagecolortransparentarginfo_imagecolorstotalarginfo_imagecolorsforindexarginfo_imagecopyarginfo_imagecopymergearginfo_imagecopymergegrayarginfo_imagecopyresizedarginfo_imagecreatearginfo_imagecreatetruecolorarginfo_imageistruecolorarginfo_imagetruecolortopalettearginfo_imagepalettetotruecolorarginfo_imagesetthicknessarginfo_imagefilledarcarginfo_imagefilledellipsearginfo_imagealphablendingarginfo_imagesavealphaarginfo_imagecolorallocatealphaarginfo_imagecolorresolvealphaarginfo_imagecolorclosestalphaarginfo_imagecolorexactalphaarginfo_imagecopyresampledarginfo_imagerotatearginfo_imagefliparginfo_imageantialiasarginfo_imagecroparginfo_imagecropautoarginfo_imagescalearginfo_imageaffinearginfo_imageaffinematrixconcatarginfo_imageaffinematrixgetarginfo_imagesetinterpolationarginfo_imagesettilearginfo_imagesetbrusharginfo_imagesetstylearginfo_imagecreatefrompngarginfo_imagecreatefromwebparginfo_imagecreatefromgifarginfo_imagecreatefromjpegarginfo_imagecreatefromwbmparginfo_imagecreatefromxbmarginfo_imagecreatefromxpmarginfo_imagecreatefromgdarginfo_imagecreatefromgd2arginfo_imagecreatefromgd2partarginfo_imagecreatefrombmparginfo_imagepngarginfo_imagewebparginfo_imagegifarginfo_imagejpegarginfo_imagewbmparginfo_imagegdarginfo_imagegd2arginfo_imagebmparginfo_imagedestroyarginfo_imagegammacorrectarginfo_imagefillarginfo_imagefilledpolygonarginfo_imagefilledrectanglearginfo_imagefilltoborderarginfo_imagefontwidtharginfo_imagefontheightarginfo_imageinterlacearginfo_imagelinearginfo_imageloadfontarginfo_imagepolygonarginfo_imageopenpolygonarginfo_imagerectanglearginfo_imagesetpixelarginfo_imagestringarginfo_imagestringuparginfo_imagesxarginfo_imagesyarginfo_imagesetcliparginfo_imagegetcliparginfo_imagedashedlinearginfo_imagettfbboxarginfo_imagettftextarginfo_imageftbboxarginfo_imagefttextarginfo_imagetypesarginfo_jpeg2wbmparginfo_png2wbmparginfo_image2wbmparginfo_imagelayereffectarginfo_imagexbmarginfo_imagecolormatcharginfo_imagefilterarginfo_imageconvolutionarginfo_imageresolution.annobin_RGB_to_HWB.start.annobin_RGB_to_HWB.endRGB_to_HWB.annobin_clip_1d.start.annobin_clip_1d.endclip_1d.annobin_php_gd_gdCompareInt.start.annobin_php_gd_gdCompareInt.end.annobin_gd_stderr_error.start.annobin_gd_stderr_error.end.annobin_gd_error.start.annobin_gd_error.end.annobin_gd_error_ex.start.annobin_gd_error_ex.end.annobin_gdSetErrorMethod.start.annobin_gdSetErrorMethod.end.annobin_gdClearErrorMethod.start.annobin_gdClearErrorMethod.end.annobin_php_gd_gdImageCreate.start.annobin_php_gd_gdImageCreate.end.annobin_php_gd_gdImageCreateTrueColor.start.annobin_php_gd_gdImageCreateTrueColor.end.annobin_php_gd_gdImageDestroy.start.annobin_php_gd_gdImageDestroy.end.annobin_php_gd_gdImageColorClosestAlpha.start.annobin_php_gd_gdImageColorClosestAlpha.end.annobin_php_gd_gdImageColorClosest.start.annobin_php_gd_gdImageColorClosest.end.annobin_php_gd_gdImageColorClosestHWB.start.annobin_php_gd_gdImageColorClosestHWB.end.annobin_php_gd_gdImageColorExactAlpha.start.annobin_php_gd_gdImageColorExactAlpha.end.annobin_php_gd_gdImageColorExact.start.annobin_php_gd_gdImageColorExact.end.annobin_php_gd_gdImageColorAllocateAlpha.start.annobin_php_gd_gdImageColorAllocateAlpha.end.annobin_php_gd_gdImageColorAllocate.start.annobin_php_gd_gdImageColorAllocate.end.annobin_php_gd_gdImageColorResolveAlpha.start.annobin_php_gd_gdImageColorResolveAlpha.end.annobin_php_gd_gdImageColorResolve.start.annobin_php_gd_gdImageColorResolve.end.annobin_php_gd_gdImageColorDeallocate.start.annobin_php_gd_gdImageColorDeallocate.end.annobin_php_gd_gdImageColorTransparent.start.annobin_php_gd_gdImageColorTransparent.end.annobin_php_gd_gdImageGetPixel.start.annobin_php_gd_gdImageGetPixel.end.annobin_php_gd_gdImageGetTrueColorPixel.start.annobin_php_gd_gdImageGetTrueColorPixel.end.annobin_gdImageTileGet.start.annobin_gdImageTileGet.endgdImageTileGet.annobin_php_gd_gdImageAABlend.start.annobin_php_gd_gdImageAABlend.end.annobin_php_gd_lsqrt.start.annobin_php_gd_lsqrt.end.annobin_php_gd_gdImageSetStyle.start.annobin_php_gd_gdImageSetStyle.end.annobin_php_gd_gdImageSetThickness.start.annobin_php_gd_gdImageSetThickness.end.annobin_php_gd_gdImageSetBrush.start.annobin_php_gd_gdImageSetBrush.end.annobin_php_gd_gdImageSetTile.start.annobin_php_gd_gdImageSetTile.end.annobin_php_gd_gdImageSetAntiAliased.start.annobin_php_gd_gdImageSetAntiAliased.end.annobin_php_gd_gdImageSetAntiAliasedDontBlend.start.annobin_php_gd_gdImageSetAntiAliasedDontBlend.end.annobin_php_gd_gdImageInterlace.start.annobin_php_gd_gdImageInterlace.end.annobin_php_gd_gdImageCompare.start.annobin_php_gd_gdImageCompare.end.annobin_php_gd_gdAlphaBlend.start.annobin_php_gd_gdAlphaBlend.end.annobin_php_gd_gdImageAlphaBlending.start.annobin_php_gd_gdImageAlphaBlending.end.annobin_php_gd_gdImageSaveAlpha.start.annobin_php_gd_gdImageSaveAlpha.end.annobin_gdLayerOverlay.start.annobin_gdLayerOverlay.end.annobin_gdLayerMultiply.start.annobin_gdLayerMultiply.end.annobin_php_gd_gdImageSetPixel.start.annobin_php_gd_gdImageSetPixel.end.annobin_php_gd_gdImagePaletteCopy.start.annobin_php_gd_gdImagePaletteCopy.end.annobin_dashedSet.start.annobin_dashedSet.enddashedSet.annobin_php_gd_gdImageDashedLine.start.annobin_php_gd_gdImageDashedLine.end.annobin_php_gd_gdImageChar.start.annobin_php_gd_gdImageChar.end.annobin_php_gd_gdImageString.start.annobin_php_gd_gdImageString.end.annobin_php_gd_gdImageString16.start.annobin_php_gd_gdImageString16.end.annobin_php_gd_gdImageCharUp.start.annobin_php_gd_gdImageCharUp.end.annobin_php_gd_gdImageStringUp.start.annobin_php_gd_gdImageStringUp.end.annobin_php_gd_gdImageStringUp16.start.annobin_php_gd_gdImageStringUp16.end.annobin_php_gd_gdImageEllipse.start.annobin_php_gd_gdImageEllipse.end.annobin_php_gd_gdImageFilledEllipse.start.annobin_php_gd_gdImageFilledEllipse.end.annobin_php_gd_gdImageFillToBorder.start.annobin_php_gd_gdImageFillToBorder.end.annobin_php_gd_gdImageFill.start.annobin_php_gd_gdImageFill.end.annobin__gdImageFilledVRectangle.start.annobin__gdImageFilledVRectangle.end_gdImageFilledVRectangle.annobin_php_gd_gdImageFilledRectangle.start.annobin_php_gd_gdImageFilledRectangle.end.annobin_php_gd_gdImageLine.start.annobin_php_gd_gdImageLine.end.annobin_php_gd_gdImageAALine.start.annobin_php_gd_gdImageAALine.end.annobin_gdImageOpenPolygon.start.annobin_gdImageOpenPolygon.end.annobin_php_gd_gdImagePolygon.part.6.start.annobin_php_gd_gdImagePolygon.part.6.endphp_gd_gdImagePolygon.part.6.annobin_php_gd_gdImagePolygon.start.annobin_php_gd_gdImagePolygon.end.annobin_php_gd_gdImageFilledPolygon.start.annobin_php_gd_gdImageFilledPolygon.end.annobin_php_gd_gdImageFilledArc.start.annobin_php_gd_gdImageFilledArc.end.annobin_php_gd_gdImageArc.start.annobin_php_gd_gdImageArc.end.annobin_php_gd_gdImageRectangle.start.annobin_php_gd_gdImageRectangle.end.annobin_php_gd_gdImageCopy.start.annobin_php_gd_gdImageCopy.end.annobin_php_gd_gdImageCopyMerge.start.annobin_php_gd_gdImageCopyMerge.end.annobin_php_gd_gdImageCopyMergeGray.start.annobin_php_gd_gdImageCopyMergeGray.end.annobin_php_gd_gdImageCopyResized.part.8.start.annobin_php_gd_gdImageCopyResized.part.8.endphp_gd_gdImageCopyResized.part.8.annobin_php_gd_gdImageCopyResized.start.annobin_php_gd_gdImageCopyResized.end.annobin_php_gd_gdImageCopyResampled.start.annobin_php_gd_gdImageCopyResampled.end.annobin_php_gd_gdImageSetClip.start.annobin_php_gd_gdImageSetClip.end.annobin_php_gd_gdImageGetClip.start.annobin_php_gd_gdImageGetClip.end.annobin_gdImageSetResolution.start.annobin_gdImageSetResolution.end.annobin_gdImagePaletteToTrueColor.start.annobin_gdImagePaletteToTrueColor.end.annobin_gd_gd.c.annobin_gd_gd.c_end.annobin_gd_gd.c.hot.annobin_gd_gd.c_end.hot.annobin_gd_gd.c.unlikely.annobin_gd_gd.c_end.unlikely.annobin_gd_gd.c.startup.annobin_gd_gd.c_end.startup.annobin_gd_gd.c.exit.annobin_gd_gd.c_end.exit.annobin_php_gd__gdGetColors.start.annobin_php_gd__gdGetColors.end.annobin_php_gd_gdImageCreateFromGdCtx.start.annobin_php_gd_gdImageCreateFromGdCtx.end.annobin_php_gd_gdImageCreateFromGd.start.annobin_php_gd_gdImageCreateFromGd.end.annobin_php_gd_gdImageCreateFromGdPtr.start.annobin_php_gd_gdImageCreateFromGdPtr.end.annobin_php_gd__gdPutColors.start.annobin_php_gd__gdPutColors.end.annobin__gdImageGd.start.annobin__gdImageGd.end.annobin_php_gd_gdImageGd.start.annobin_php_gd_gdImageGd.end.annobin_php_gd_gdImageGdPtr.start.annobin_php_gd_gdImageGdPtr.end.annobin_gd_gd2.c.annobin_gd_gd2.c_end.annobin_gd_gd2.c.hot.annobin_gd_gd2.c_end.hot.annobin_gd_gd2.c.unlikely.annobin_gd_gd2.c_end.unlikely.annobin_gd_gd2.c.startup.annobin_gd_gd2.c_end.startup.annobin_gd_gd2.c.exit.annobin_gd_gd2.c_end.exit.annobin__gd2GetHeader.start.annobin__gd2GetHeader.end_gd2GetHeader.annobin__gd2ReadChunk.start.annobin__gd2ReadChunk.end_gd2ReadChunk.annobin__gdImageGd2.start.annobin__gdImageGd2.end.annobin_php_gd_gdImageCreateFromGd2Ctx.start.annobin_php_gd_gdImageCreateFromGd2Ctx.end.annobin_php_gd_gdImageCreateFromGd2.start.annobin_php_gd_gdImageCreateFromGd2.end.annobin_php_gd_gdImageCreateFromGd2Ptr.start.annobin_php_gd_gdImageCreateFromGd2Ptr.end.annobin_php_gd_gdImageCreateFromGd2PartCtx.start.annobin_php_gd_gdImageCreateFromGd2PartCtx.end.annobin_php_gd_gdImageCreateFromGd2PartPtr.start.annobin_php_gd_gdImageCreateFromGd2PartPtr.end.annobin_php_gd_gdImageCreateFromGd2Part.start.annobin_php_gd_gdImageCreateFromGd2Part.end.annobin_php_gd_gdImageGd2.start.annobin_php_gd_gdImageGd2.end.annobin_php_gd_gdImageGd2Ptr.start.annobin_php_gd_gdImageGd2Ptr.end.annobin_gd_io.c.annobin_gd_io.c_end.annobin_gd_io.c.hot.annobin_gd_io.c_end.hot.annobin_gd_io.c.unlikely.annobin_gd_io.c_end.unlikely.annobin_gd_io.c.startup.annobin_gd_io.c_end.startup.annobin_gd_io.c.exit.annobin_gd_io.c_end.exit.annobin_php_gd_Putword.start.annobin_php_gd_Putword.end.annobin_php_gd_Putchar.start.annobin_php_gd_Putchar.end.annobin_php_gd_gdPutC.start.annobin_php_gd_gdPutC.end.annobin_php_gd_gdPutWord.start.annobin_php_gd_gdPutWord.end.annobin_php_gd_gdPutInt.start.annobin_php_gd_gdPutInt.end.annobin_php_gd_gdGetC.start.annobin_php_gd_gdGetC.end.annobin_php_gd_gdGetByte.start.annobin_php_gd_gdGetByte.end.annobin_php_gd_gdGetWord.start.annobin_php_gd_gdGetWord.end.annobin_gdGetWordLSB.start.annobin_gdGetWordLSB.end.annobin_php_gd_gdGetInt.start.annobin_php_gd_gdGetInt.end.annobin_gdGetIntLSB.start.annobin_gdGetIntLSB.end.annobin_php_gd_gdPutBuf.start.annobin_php_gd_gdPutBuf.end.annobin_php_gd_gdGetBuf.start.annobin_php_gd_gdGetBuf.end.annobin_php_gd_gdSeek.start.annobin_php_gd_gdSeek.end.annobin_php_gd_gdTell.start.annobin_php_gd_gdTell.end.annobin_gd_io_dp.c.annobin_gd_io_dp.c_end.annobin_gd_io_dp.c.hot.annobin_gd_io_dp.c_end.hot.annobin_gd_io_dp.c.unlikely.annobin_gd_io_dp.c_end.unlikely.annobin_gd_io_dp.c.startup.annobin_gd_io_dp.c_end.startup.annobin_gd_io_dp.c.exit.annobin_gd_io_dp.c_end.exit.annobin_dynamicTell.start.annobin_dynamicTell.enddynamicTell.annobin_gdFreeDynamicCtx.start.annobin_gdFreeDynamicCtx.endgdFreeDynamicCtx.annobin_dynamicGetbuf.start.annobin_dynamicGetbuf.enddynamicGetbuf.annobin_dynamicGetchar.start.annobin_dynamicGetchar.enddynamicGetchar.annobin_gdReallocDynamic.start.annobin_gdReallocDynamic.endgdReallocDynamic.annobin_dynamicSeek.start.annobin_dynamicSeek.enddynamicSeek.annobin_appendDynamic.start.annobin_appendDynamic.endappendDynamic.annobin_dynamicPutbuf.start.annobin_dynamicPutbuf.enddynamicPutbuf.annobin_dynamicPutchar.start.annobin_dynamicPutchar.enddynamicPutchar.annobin_php_gd_gdNewDynamicCtxEx.start.annobin_php_gd_gdNewDynamicCtxEx.end.annobin_php_gd_gdNewDynamicCtx.start.annobin_php_gd_gdNewDynamicCtx.end.annobin_php_gd_gdDPExtractData.start.annobin_php_gd_gdDPExtractData.end.annobin_gd_io_file.c.annobin_gd_io_file.c_end.annobin_gd_io_file.c.hot.annobin_gd_io_file.c_end.hot.annobin_gd_io_file.c.unlikely.annobin_gd_io_file.c_end.unlikely.annobin_gd_io_file.c.startup.annobin_gd_io_file.c_end.startup.annobin_gd_io_file.c.exit.annobin_gd_io_file.c_end.exit.annobin_gdFreeFileCtx.start.annobin_gdFreeFileCtx.endgdFreeFileCtx.annobin_fileSeek.start.annobin_fileSeek.endfileSeek.annobin_fileTell.start.annobin_fileTell.endfileTell.annobin_filePutbuf.start.annobin_filePutbuf.endfilePutbuf.annobin_fileGetbuf.start.annobin_fileGetbuf.endfileGetbuf.annobin_filePutchar.start.annobin_filePutchar.endfilePutchar.annobin_fileGetchar.start.annobin_fileGetchar.endfileGetchar.annobin_php_gd_gdNewFileCtx.start.annobin_php_gd_gdNewFileCtx.end.annobin_gd_ss.c.annobin_gd_ss.c_end.annobin_gd_ss.c.hot.annobin_gd_ss.c_end.hot.annobin_gd_ss.c.unlikely.annobin_gd_ss.c_end.unlikely.annobin_gd_ss.c.startup.annobin_gd_ss.c_end.startup.annobin_gd_ss.c.exit.annobin_gd_ss.c_end.exit.annobin_php_gd_gdImagePngToSink.start.annobin_php_gd_gdImagePngToSink.end.annobin_php_gd_gdImageCreateFromPngSource.start.annobin_php_gd_gdImageCreateFromPngSource.end.annobin_gd_io_ss.c.annobin_gd_io_ss.c_end.annobin_gd_io_ss.c.hot.annobin_gd_io_ss.c_end.hot.annobin_gd_io_ss.c.unlikely.annobin_gd_io_ss.c_end.unlikely.annobin_gd_io_ss.c.startup.annobin_gd_io_ss.c_end.startup.annobin_gd_io_ss.c.exit.annobin_gd_io_ss.c_end.exit.annobin_sourceGetbuf.start.annobin_sourceGetbuf.endsourceGetbuf.annobin_sourceGetchar.start.annobin_sourceGetchar.endsourceGetchar.annobin_sinkPutbuf.start.annobin_sinkPutbuf.endsinkPutbuf.annobin_sinkPutchar.start.annobin_sinkPutchar.endsinkPutchar.annobin_gdFreeSsCtx.start.annobin_gdFreeSsCtx.endgdFreeSsCtx.annobin_php_gd_gdNewSSCtx.start.annobin_php_gd_gdNewSSCtx.end.annobin_gd_webp.c.annobin_gd_webp.c_end.annobin_gd_webp.c.hot.annobin_gd_webp.c_end.hot.annobin_gd_webp.c.unlikely.annobin_gd_webp.c_end.unlikely.annobin_gd_webp.c.startup.annobin_gd_webp.c_end.startup.annobin_gd_webp.c.exit.annobin_gd_webp.c_end.exit.annobin_gdImageCreateFromWebpCtx.start.annobin_gdImageCreateFromWebpCtx.endgdImageCreateFromWebpCtx.cold.0.annobin_gdImageCreateFromWebp.start.annobin_gdImageCreateFromWebp.end.annobin_gdImageCreateFromWebpPtr.start.annobin_gdImageCreateFromWebpPtr.end.annobin_gdImageWebpCtx.start.annobin_gdImageWebpCtx.endgdImageWebpCtx.cold.1.annobin_gdImageWebpEx.start.annobin_gdImageWebpEx.end.annobin_gdImageWebp.start.annobin_gdImageWebp.end.annobin_gdImageWebpPtr.start.annobin_gdImageWebpPtr.end.annobin_gdImageWebpPtrEx.start.annobin_gdImageWebpPtrEx.end.annobin_gd_png.c.annobin_gd_png.c_end.annobin_gd_png.c.hot.annobin_gd_png.c_end.hot.annobin_gd_png.c.unlikely.annobin_gd_png.c_end.unlikely.annobin_gd_png.c.startup.annobin_gd_png.c_end.startup.annobin_gd_png.c.exit.annobin_gd_png.c_end.exit.annobin_gdPngFlushData.start.annobin_gdPngFlushData.endgdPngFlushData.annobin_gdPngReadData.start.annobin_gdPngReadData.endgdPngReadData.annobin_gdPngErrorHandler.start.annobin_gdPngErrorHandler.endgdPngErrorHandler.annobin_gdPngWriteData.start.annobin_gdPngWriteData.endgdPngWriteData.annobin_gdPngGetVersionString.start.annobin_gdPngGetVersionString.end.annobin_php_gd_gdImageCreateFromPngCtx.start.annobin_php_gd_gdImageCreateFromPngCtx.end.annobin_php_gd_gdImageCreateFromPng.start.annobin_php_gd_gdImageCreateFromPng.end.annobin_php_gd_gdImageCreateFromPngPtr.start.annobin_php_gd_gdImageCreateFromPngPtr.end.annobin_php_gd_gdImagePngCtxEx.start.annobin_php_gd_gdImagePngCtxEx.end.annobin_php_gd_gdImagePngEx.start.annobin_php_gd_gdImagePngEx.end.annobin_php_gd_gdImagePng.start.annobin_php_gd_gdImagePng.end.annobin_php_gd_gdImagePngPtr.start.annobin_php_gd_gdImagePngPtr.end.annobin_php_gd_gdImagePngPtrEx.start.annobin_php_gd_gdImagePngPtrEx.end.annobin_php_gd_gdImagePngCtx.start.annobin_php_gd_gdImagePngCtx.end.annobin_gd_jpeg.c.annobin_gd_jpeg.c_end.annobin_gd_jpeg.c.hot.annobin_gd_jpeg.c_end.hot.annobin_gd_jpeg.c.unlikely.annobin_gd_jpeg.c_end.unlikely.annobin_gd_jpeg.c.startup.annobin_gd_jpeg.c_end.startup.annobin_gd_jpeg.c.exit.annobin_gd_jpeg.c_end.exit.annobin_php_gd_init_source.start.annobin_php_gd_init_source.end.annobin_php_gd_term_source.start.annobin_php_gd_term_source.end.annobin_php_gd_init_destination.start.annobin_php_gd_init_destination.end.annobin_fatal_jpeg_error.start.annobin_fatal_jpeg_error.endfatal_jpeg_error.annobin_php_gd_fill_input_buffer.start.annobin_php_gd_fill_input_buffer.end.annobin_php_gd_skip_input_data.start.annobin_php_gd_skip_input_data.end.annobin_php_gd_empty_output_buffer.start.annobin_php_gd_empty_output_buffer.end.annobin_php_jpeg_emit_message.start.annobin_php_jpeg_emit_message.endphp_jpeg_emit_message.annobin_php_gd_term_destination.start.annobin_php_gd_term_destination.end.annobin_gdJpegGetVersionInt.start.annobin_gdJpegGetVersionInt.end.annobin_gdJpegGetVersionString.start.annobin_gdJpegGetVersionString.end.annobin_php_gd_gdImageJpegCtx.start.annobin_php_gd_gdImageJpegCtx.end.annobin_php_gd_gdImageJpeg.start.annobin_php_gd_gdImageJpeg.end.annobin_php_gd_gdImageJpegPtr.start.annobin_php_gd_gdImageJpegPtr.end.annobin_php_gd_jpeg_gdIOCtx_src.start.annobin_php_gd_jpeg_gdIOCtx_src.end.annobin_gdImageCreateFromJpegCtxEx.start.annobin_gdImageCreateFromJpegCtxEx.end.annobin_gdImageCreateFromJpegEx.start.annobin_gdImageCreateFromJpegEx.end.annobin_php_gd_gdImageCreateFromJpeg.start.annobin_php_gd_gdImageCreateFromJpeg.end.annobin_gdImageCreateFromJpegPtrEx.start.annobin_gdImageCreateFromJpegPtrEx.end.annobin_php_gd_gdImageCreateFromJpegPtr.start.annobin_php_gd_gdImageCreateFromJpegPtr.end.annobin_php_gd_gdImageCreateFromJpegCtx.start.annobin_php_gd_gdImageCreateFromJpegCtx.end.annobin_php_gd_jpeg_gdIOCtx_dest.start.annobin_php_gd_jpeg_gdIOCtx_dest.end.annobin_gdxpm.c.annobin_gdxpm.c_end.annobin_gdxpm.c.hot.annobin_gdxpm.c_end.hot.annobin_gdxpm.c.unlikely.annobin_gdxpm.c_end.unlikely.annobin_gdxpm.c.startup.annobin_gdxpm.c_end.startup.annobin_gdxpm.c.exit.annobin_gdxpm.c_end.exit.annobin_gdImageCreateFromXpm.start.annobin_gdImageCreateFromXpm.end.annobin_gdfontt.c.annobin_gdfontt.c_end.annobin_gdfontt.c.hot.annobin_gdfontt.c_end.hot.annobin_gdfontt.c.unlikely.annobin_gdfontt.c_end.unlikely.annobin_gdfontt.c.startup.annobin_gdfontt.c_end.startup.annobin_gdfontt.c.exit.annobin_gdfontt.c_end.exit.annobin_php_gd_gdFontGetTiny.start.annobin_php_gd_gdFontGetTiny.endphp_gd_gdFontTinyData.annobin_gdfonts.c.annobin_gdfonts.c_end.annobin_gdfonts.c.hot.annobin_gdfonts.c_end.hot.annobin_gdfonts.c.unlikely.annobin_gdfonts.c_end.unlikely.annobin_gdfonts.c.startup.annobin_gdfonts.c_end.startup.annobin_gdfonts.c.exit.annobin_gdfonts.c_end.exit.annobin_php_gd_gdFontGetSmall.start.annobin_php_gd_gdFontGetSmall.endphp_gd_gdFontSmallData.annobin_gdfontmb.c.annobin_gdfontmb.c_end.annobin_gdfontmb.c.hot.annobin_gdfontmb.c_end.hot.annobin_gdfontmb.c.unlikely.annobin_gdfontmb.c_end.unlikely.annobin_gdfontmb.c.startup.annobin_gdfontmb.c_end.startup.annobin_gdfontmb.c.exit.annobin_gdfontmb.c_end.exit.annobin_php_gd_gdFontGetMediumBold.start.annobin_php_gd_gdFontGetMediumBold.endphp_gd_gdFontMediumBoldData.annobin_gdfontl.c.annobin_gdfontl.c_end.annobin_gdfontl.c.hot.annobin_gdfontl.c_end.hot.annobin_gdfontl.c.unlikely.annobin_gdfontl.c_end.unlikely.annobin_gdfontl.c.startup.annobin_gdfontl.c_end.startup.annobin_gdfontl.c.exit.annobin_gdfontl.c_end.exit.annobin_php_gd_gdFontGetLarge.start.annobin_php_gd_gdFontGetLarge.endphp_gd_gdFontLargeData.annobin_gdfontg.c.annobin_gdfontg.c_end.annobin_gdfontg.c.hot.annobin_gdfontg.c_end.hot.annobin_gdfontg.c.unlikely.annobin_gdfontg.c_end.unlikely.annobin_gdfontg.c.startup.annobin_gdfontg.c_end.startup.annobin_gdfontg.c.exit.annobin_gdfontg.c_end.exit.annobin_php_gd_gdFontGetGiant.start.annobin_php_gd_gdFontGetGiant.endphp_gd_gdFontGiantData.annobin_gdtables.c.annobin_gdtables.c_end.annobin_gdtables.c.hot.annobin_gdtables.c_end.hot.annobin_gdtables.c.unlikely.annobin_gdtables.c_end.unlikely.annobin_gdtables.c.startup.annobin_gdtables.c_end.startup.annobin_gdtables.c.exit.annobin_gdtables.c_end.exit.annobin_gdft.c.annobin_gdft.c_end.annobin_gdft.c.hot.annobin_gdft.c_end.hot.annobin_gdft.c.unlikely.annobin_gdft.c_end.unlikely.annobin_gdft.c.startup.annobin_gdft.c_end.startup.annobin_gdft.c.exit.annobin_gdft.c_end.exit.annobin_gdTcl_UtfToUniChar.start.annobin_gdTcl_UtfToUniChar.endgdTcl_UtfToUniChar.annobin_tweenColorTest.start.annobin_tweenColorTest.endtweenColorTest.annobin_fontRelease.start.annobin_fontRelease.endfontRelease.annobin_tweenColorRelease.start.annobin_tweenColorRelease.endtweenColorRelease.annobin_fontFetch.start.annobin_fontFetch.endfontFetch.annobin_tweenColorFetch.start.annobin_tweenColorFetch.endtweenColorFetch.annobin_fontTest.start.annobin_fontTest.endfontTest.annobin_php_gd_gdFontCacheShutdown.start.annobin_php_gd_gdFontCacheShutdown.endfontCachelibrary.annobin_php_gd_gdFreeFontCache.start.annobin_php_gd_gdFreeFontCache.end.annobin_gdFontCacheMutexSetup.start.annobin_gdFontCacheMutexSetup.end.annobin_gdFontCacheMutexShutdown.start.annobin_gdFontCacheMutexShutdown.end.annobin_php_gd_gdFontCacheSetup.start.annobin_php_gd_gdFontCacheSetup.end.annobin_php_gd_gdImageStringFTEx.start.annobin_php_gd_gdImageStringFTEx.end.annobin_php_gd_gdImageStringTTF.start.annobin_php_gd_gdImageStringTTF.end.annobin_php_gd_gdImageStringFT.start.annobin_php_gd_gdImageStringFT.end.annobin_gdcache.c.annobin_gdcache.c_end.annobin_gdcache.c.hot.annobin_gdcache.c_end.hot.annobin_gdcache.c.unlikely.annobin_gdcache.c_end.unlikely.annobin_gdcache.c.startup.annobin_gdcache.c_end.startup.annobin_gdcache.c.exit.annobin_gdcache.c_end.exit.annobin_php_gd_gdCacheCreate.start.annobin_php_gd_gdCacheCreate.end.annobin_php_gd_gdCacheDelete.start.annobin_php_gd_gdCacheDelete.end.annobin_php_gd_gdCacheGet.start.annobin_php_gd_gdCacheGet.end.annobin_gdkanji.c.annobin_gdkanji.c_end.annobin_gdkanji.c.hot.annobin_gdkanji.c_end.hot.annobin_gdkanji.c.unlikely.annobin_gdkanji.c_end.unlikely.annobin_gdkanji.c.startup.annobin_gdkanji.c_end.startup.annobin_gdkanji.c.exit.annobin_gdkanji.c_end.exit.annobin_han2zen.start.annobin_han2zen.endhan2zen.annobin_error.start.annobin_error.end.annobin_do_convert.constprop.1.start.annobin_do_convert.constprop.1.enddo_convert.constprop.1tmp.14058.annobin_php_gd_any2eucjp.start.annobin_php_gd_any2eucjp.endwhatcode.14018tmp_dest.14082.annobin_wbmp.c.annobin_wbmp.c_end.annobin_wbmp.c.hot.annobin_wbmp.c_end.hot.annobin_wbmp.c.unlikely.annobin_wbmp.c_end.unlikely.annobin_wbmp.c.startup.annobin_wbmp.c_end.startup.annobin_wbmp.c.exit.annobin_wbmp.c_end.exit.annobin_php_gd_getmbi.start.annobin_php_gd_getmbi.end.annobin_php_gd_putmbi.start.annobin_php_gd_putmbi.end.annobin_php_gd_skipheader.start.annobin_php_gd_skipheader.end.annobin_php_gd_createwbmp.start.annobin_php_gd_createwbmp.end.annobin_php_gd_readwbmp.start.annobin_php_gd_readwbmp.end.annobin_php_gd_writewbmp.start.annobin_php_gd_writewbmp.end.annobin_php_gd_freewbmp.start.annobin_php_gd_freewbmp.end.annobin_php_gd_printwbmp.start.annobin_php_gd_printwbmp.end.annobin_gd_wbmp.c.annobin_gd_wbmp.c_end.annobin_gd_wbmp.c.hot.annobin_gd_wbmp.c_end.hot.annobin_gd_wbmp.c.unlikely.annobin_gd_wbmp.c_end.unlikely.annobin_gd_wbmp.c.startup.annobin_gd_wbmp.c_end.startup.annobin_gd_wbmp.c.exit.annobin_gd_wbmp.c_end.exit.annobin_php_gd_gd_putout.start.annobin_php_gd_gd_putout.end.annobin_php_gd_gd_getin.start.annobin_php_gd_gd_getin.end.annobin_php_gd_gdImageWBMPCtx.start.annobin_php_gd_gdImageWBMPCtx.end.annobin_php_gd_gdImageCreateFromWBMPCtx.start.annobin_php_gd_gdImageCreateFromWBMPCtx.end.annobin_php_gd_gdImageCreateFromWBMP.start.annobin_php_gd_gdImageCreateFromWBMP.end.annobin_php_gd_gdImageCreateFromWBMPPtr.start.annobin_php_gd_gdImageCreateFromWBMPPtr.end.annobin_php_gd_gdImageWBMP.start.annobin_php_gd_gdImageWBMP.end.annobin_php_gd_gdImageWBMPPtr.start.annobin_php_gd_gdImageWBMPPtr.end.annobin_gdhelpers.c.annobin_gdhelpers.c_end.annobin_gdhelpers.c.hot.annobin_gdhelpers.c_end.hot.annobin_gdhelpers.c.unlikely.annobin_gdhelpers.c_end.unlikely.annobin_gdhelpers.c.startup.annobin_gdhelpers.c_end.startup.annobin_gdhelpers.c.exit.annobin_gdhelpers.c_end.exit.annobin_php_gd_gd_strtok_r.start.annobin_php_gd_gd_strtok_r.end.annobin_gd_topal.c.annobin_gd_topal.c_end.annobin_gd_topal.c.hot.annobin_gd_topal.c_end.hot.annobin_gd_topal.c.unlikely.annobin_gd_topal.c_end.unlikely.annobin_gd_topal.c.startup.annobin_gd_topal.c_end.startup.annobin_gd_topal.c.exit.annobin_gd_topal.c_end.exit.annobin_zeroHistogram.start.annobin_zeroHistogram.endzeroHistogram.annobin_update_box.isra.1.start.annobin_update_box.isra.1.endupdate_box.isra.1.annobin_fill_inverse_cmap.isra.6.start.annobin_fill_inverse_cmap.isra.6.endfill_inverse_cmap.isra.6.annobin_gdImageTrueColorToPaletteBody.start.annobin_gdImageTrueColorToPaletteBody.endgdImageTrueColorToPaletteBody.annobin_php_gd_gdImageCreatePaletteFromTrueColor.start.annobin_php_gd_gdImageCreatePaletteFromTrueColor.end.annobin_php_gd_gdImageTrueColorToPalette.start.annobin_php_gd_gdImageTrueColorToPalette.end.annobin_gd_gif_in.c.annobin_gd_gif_in.c_end.annobin_gd_gif_in.c.hot.annobin_gd_gif_in.c_end.hot.annobin_gd_gif_in.c.unlikely.annobin_gd_gif_in.c_end.unlikely.annobin_gd_gif_in.c.startup.annobin_gd_gif_in.c_end.startup.annobin_gd_gif_in.c.exit.annobin_gd_gif_in.c_end.exit.annobin_GetDataBlock_.start.annobin_GetDataBlock_.endGetDataBlock_.annobin_GetCode_.start.annobin_GetCode_.endGetCode_.annobin_ReadColorMap.start.annobin_ReadColorMap.endReadColorMap.annobin_LWZReadByte_.start.annobin_LWZReadByte_.endLWZReadByte_.annobin_ReadImage.start.annobin_ReadImage.endReadImage.annobin_php_gd_gdImageCreateFromGifCtx.start.annobin_php_gd_gdImageCreateFromGifCtx.end.annobin_php_gd_gdImageCreateFromGifSource.start.annobin_php_gd_gdImageCreateFromGifSource.end.annobin_php_gd_gdImageCreateFromGif.start.annobin_php_gd_gdImageCreateFromGif.end.annobin_gd_xbm.c.annobin_gd_xbm.c_end.annobin_gd_xbm.c.hot.annobin_gd_xbm.c_end.hot.annobin_gd_xbm.c.unlikely.annobin_gd_xbm.c_end.unlikely.annobin_gd_xbm.c.startup.annobin_gd_xbm.c_end.startup.annobin_gd_xbm.c.exit.annobin_gd_xbm.c_end.exit.annobin_php_gd_gdImageCreateFromXbm.start.annobin_php_gd_gdImageCreateFromXbm.end.annobin_php_gd_gdCtxPrintf.start.annobin_php_gd_gdCtxPrintf.end.annobin_php_gd_gdImageXbmCtx.start.annobin_php_gd_gdImageXbmCtx.end.annobin_gd_gif_out.c.annobin_gd_gif_out.c_end.annobin_gd_gif_out.c.hot.annobin_gd_gif_out.c_end.hot.annobin_gd_gif_out.c.unlikely.annobin_gd_gif_out.c_end.unlikely.annobin_gd_gif_out.c.startup.annobin_gd_gif_out.c_end.startup.annobin_gd_gif_out.c.exit.annobin_gd_gif_out.c_end.exit.annobin_BumpPixel.start.annobin_BumpPixel.endBumpPixel.annobin_gifPutWord.start.annobin_gifPutWord.endgifPutWord.annobin_flush_char.start.annobin_flush_char.endflush_char.annobin_output.start.annobin_output.endoutputmasks.annobin_cl_hash.constprop.3.start.annobin_cl_hash.constprop.3.endcl_hash.constprop.3.annobin_GIFEncode.constprop.2.start.annobin_GIFEncode.constprop.2.endGIFEncode.constprop.2.annobin_php_gd_gdImageGifCtx.start.annobin_php_gd_gdImageGifCtx.end.annobin_php_gd_gdImageGifPtr.start.annobin_php_gd_gdImageGifPtr.end.annobin_php_gd_gdImageGif.start.annobin_php_gd_gdImageGif.end.annobin_gd_security.c.annobin_gd_security.c_end.annobin_gd_security.c.hot.annobin_gd_security.c_end.hot.annobin_gd_security.c.unlikely.annobin_gd_security.c_end.unlikely.annobin_gd_security.c.startup.annobin_gd_security.c_end.startup.annobin_gd_security.c.exit.annobin_gd_security.c_end.exit.annobin_overflow2.start.annobin_overflow2.end.annobin_gd_filter.c.annobin_gd_filter.c_end.annobin_gd_filter.c.hot.annobin_gd_filter.c_end.hot.annobin_gd_filter.c.unlikely.annobin_gd_filter.c_end.unlikely.annobin_gd_filter.c.startup.annobin_gd_filter.c_end.startup.annobin_gd_filter.c.exit.annobin_gd_filter.c_end.exit.annobin_php_gd_gdImageConvolution.part.0.start.annobin_php_gd_gdImageConvolution.part.0.endphp_gd_gdImageConvolution.part.0.annobin_php_gd_gdImageNegate.start.annobin_php_gd_gdImageNegate.end.annobin_php_gd_gdImageGrayScale.start.annobin_php_gd_gdImageGrayScale.end.annobin_php_gd_gdImageBrightness.start.annobin_php_gd_gdImageBrightness.end.annobin_php_gd_gdImageContrast.start.annobin_php_gd_gdImageContrast.end.annobin_php_gd_gdImageColor.start.annobin_php_gd_gdImageColor.end.annobin_php_gd_gdImageConvolution.start.annobin_php_gd_gdImageConvolution.end.annobin_php_gd_gdImageSelectiveBlur.start.annobin_php_gd_gdImageSelectiveBlur.end.annobin_php_gd_gdImageEdgeDetectQuick.start.annobin_php_gd_gdImageEdgeDetectQuick.end.annobin_php_gd_gdImageGaussianBlur.start.annobin_php_gd_gdImageGaussianBlur.end.annobin_php_gd_gdImageEmboss.start.annobin_php_gd_gdImageEmboss.end.annobin_php_gd_gdImageMeanRemoval.start.annobin_php_gd_gdImageMeanRemoval.end.annobin_php_gd_gdImageSmooth.start.annobin_php_gd_gdImageSmooth.end.annobin_gd_pixelate.c.annobin_gd_pixelate.c_end.annobin_gd_pixelate.c.hot.annobin_gd_pixelate.c_end.hot.annobin_gd_pixelate.c.unlikely.annobin_gd_pixelate.c_end.unlikely.annobin_gd_pixelate.c.startup.annobin_gd_pixelate.c_end.startup.annobin_gd_pixelate.c.exit.annobin_gd_pixelate.c_end.exit.annobin_gdImagePixelate.start.annobin_gdImagePixelate.end.annobin_gd_rotate.c.annobin_gd_rotate.c_end.annobin_gd_rotate.c.hot.annobin_gd_rotate.c_end.hot.annobin_gd_rotate.c.unlikely.annobin_gd_rotate.c_end.unlikely.annobin_gd_rotate.c.startup.annobin_gd_rotate.c_end.startup.annobin_gd_rotate.c.exit.annobin_gd_rotate.c_end.exit.annobin_php_gd_gdImageSkewX.start.annobin_php_gd_gdImageSkewX.end.annobin_php_gd_gdImageSkewY.start.annobin_php_gd_gdImageSkewY.end.annobin_php_gd_gdImageRotate90.start.annobin_php_gd_gdImageRotate90.end.annobin_php_gd_gdImageRotate180.start.annobin_php_gd_gdImageRotate180.end.annobin_php_gd_gdImageRotate270.start.annobin_php_gd_gdImageRotate270.end.annobin_gd_color_match.c.annobin_gd_color_match.c_end.annobin_gd_color_match.c.hot.annobin_gd_color_match.c_end.hot.annobin_gd_color_match.c.unlikely.annobin_gd_color_match.c_end.unlikely.annobin_gd_color_match.c.startup.annobin_gd_color_match.c_end.startup.annobin_gd_color_match.c.exit.annobin_gd_color_match.c_end.exit.annobin_php_gd_gdImageColorMatch.start.annobin_php_gd_gdImageColorMatch.end.annobin_gd_transform.c.annobin_gd_transform.c_end.annobin_gd_transform.c.hot.annobin_gd_transform.c_end.hot.annobin_gd_transform.c.unlikely.annobin_gd_transform.c_end.unlikely.annobin_gd_transform.c.startup.annobin_gd_transform.c_end.startup.annobin_gd_transform.c.exit.annobin_gd_transform.c_end.exit.annobin_gdImageFlipVertical.start.annobin_gdImageFlipVertical.end.annobin_gdImageFlipHorizontal.start.annobin_gdImageFlipHorizontal.end.annobin_gdImageFlipBoth.start.annobin_gdImageFlipBoth.end.annobin_gd_crop.c.annobin_gd_crop.c_end.annobin_gd_crop.c.hot.annobin_gd_crop.c_end.hot.annobin_gd_crop.c.unlikely.annobin_gd_crop.c_end.unlikely.annobin_gd_crop.c.startup.annobin_gd_crop.c_end.startup.annobin_gd_crop.c.exit.annobin_gd_crop.c_end.exit.annobin_gdGuessBackgroundColorFromCorners.start.annobin_gdGuessBackgroundColorFromCorners.endgdGuessBackgroundColorFromCorners.annobin_gdColorMatch.start.annobin_gdColorMatch.endgdColorMatch.annobin_gdImageCrop.start.annobin_gdImageCrop.end.annobin_gdImageCropAuto.start.annobin_gdImageCropAuto.end.annobin_gdImageCropThreshold.start.annobin_gdImageCropThreshold.end.annobin_gd_interpolation.c.annobin_gd_interpolation.c_end.annobin_gd_interpolation.c.hot.annobin_gd_interpolation.c_end.hot.annobin_gd_interpolation.c.unlikely.annobin_gd_interpolation.c_end.unlikely.annobin_gd_interpolation.c.startup.annobin_gd_interpolation.c_end.startup.annobin_gd_interpolation.c.exit.annobin_gd_interpolation.c_end.exit.annobin_filter_bicubic.start.annobin_filter_bicubic.endfilter_bicubic.annobin_filter_generalized_cubic.start.annobin_filter_generalized_cubic.endfilter_generalized_cubic.annobin_filter_box.start.annobin_filter_box.endfilter_box.annobin_filter_hermite.start.annobin_filter_hermite.endfilter_hermite.annobin_filter_triangle.start.annobin_filter_triangle.endfilter_triangle.annobin_filter_quadratic.start.annobin_filter_quadratic.endfilter_quadratic.annobin__gdContributionsCalc.start.annobin__gdContributionsCalc.end_gdContributionsCalc.annobin_filter_hanning.start.annobin_filter_hanning.endfilter_hanning.annobin_filter_blackman.start.annobin_filter_blackman.endfilter_blackman.annobin_filter_power.start.annobin_filter_power.endfilter_power.annobin_filter_bell.start.annobin_filter_bell.endfilter_bell.annobin_filter_gaussian.start.annobin_filter_gaussian.endfilter_gaussian.annobin_filter_catmullrom.start.annobin_filter_catmullrom.endfilter_catmullrom.annobin_filter_mitchell.start.annobin_filter_mitchell.endfilter_mitchell.annobin_filter_bspline.start.annobin_filter_bspline.endfilter_bspline.annobin_filter_hamming.start.annobin_filter_hamming.endfilter_hamming.annobin_filter_sinc.start.annobin_filter_sinc.endfilter_sinc.annobin_filter_bessel.start.annobin_filter_bessel.endfilter_besselPone.14037Qone.14038Pone.14048Qone.14049Pone.14059Qone.14060.annobin_gdImageSetInterpolationMethod.part.11.start.annobin_gdImageSetInterpolationMethod.part.11.endgdImageSetInterpolationMethod.part.11.annobin_getPixelInterpolated.start.annobin_getPixelInterpolated.end.annobin_gdImageScaleTwoPass.start.annobin_gdImageScaleTwoPass.end.annobin_gdImageScaleNearestNeighbour.start.annobin_gdImageScaleNearestNeighbour.end.annobin_gdImageScaleBilinear.start.annobin_gdImageScaleBilinear.end.annobin_gdImageScaleBicubicFixed.start.annobin_gdImageScaleBicubicFixed.end.annobin_gdImageScale.start.annobin_gdImageScale.end.annobin_gdDumpRect.start.annobin_gdDumpRect.end.annobin_gdTransformAffineBoundingBox.start.annobin_gdTransformAffineBoundingBox.end.annobin_gdRotatedImageSize.isra.10.start.annobin_gdRotatedImageSize.isra.10.endgdRotatedImageSize.isra.10.annobin_gdImageRotateNearestNeighbour.start.annobin_gdImageRotateNearestNeighbour.end.annobin_gdImageRotateGeneric.start.annobin_gdImageRotateGeneric.end.annobin_gdImageRotateBilinear.start.annobin_gdImageRotateBilinear.end.annobin_gdImageRotateBicubicFixed.start.annobin_gdImageRotateBicubicFixed.end.annobin_gdImageRotateInterpolated.start.annobin_gdImageRotateInterpolated.end.annobin_gdTransformAffineCopy.start.annobin_gdTransformAffineCopy.end.annobin_gdTransformAffineGetImage.start.annobin_gdTransformAffineGetImage.end.annobin_gdImageSetInterpolationMethod.start.annobin_gdImageSetInterpolationMethod.end.annobin_gd_matrix.c.annobin_gd_matrix.c_end.annobin_gd_matrix.c.hot.annobin_gd_matrix.c_end.hot.annobin_gd_matrix.c.unlikely.annobin_gd_matrix.c_end.unlikely.annobin_gd_matrix.c.startup.annobin_gd_matrix.c_end.startup.annobin_gd_matrix.c.exit.annobin_gd_matrix.c_end.exit.annobin_gdAffineApplyToPointF.start.annobin_gdAffineApplyToPointF.end.annobin_gdAffineInvert.start.annobin_gdAffineInvert.end.annobin_gdAffineFlip.start.annobin_gdAffineFlip.end.annobin_gdAffineConcat.start.annobin_gdAffineConcat.end.annobin_gdAffineIdentity.start.annobin_gdAffineIdentity.end.annobin_gdAffineScale.start.annobin_gdAffineScale.end.annobin_gdAffineRotate.start.annobin_gdAffineRotate.end.annobin_gdAffineShearHorizontal.start.annobin_gdAffineShearHorizontal.end.annobin_gdAffineShearVertical.start.annobin_gdAffineShearVertical.end.annobin_gdAffineTranslate.start.annobin_gdAffineTranslate.end.annobin_gdAffineExpansion.start.annobin_gdAffineExpansion.end.annobin_gdAffineRectilinear.start.annobin_gdAffineRectilinear.end.annobin_gdAffineEqual.start.annobin_gdAffineEqual.end.annobin_gd_bmp.c.annobin_gd_bmp.c_end.annobin_gd_bmp.c.hot.annobin_gd_bmp.c_end.hot.annobin_gd_bmp.c.unlikely.annobin_gd_bmp.c_end.unlikely.annobin_gd_bmp.c.startup.annobin_gd_bmp.c_end.startup.annobin_gd_bmp.c.exit.annobin_gd_bmp.c_end.exit.annobin_gdBMPPutInt.start.annobin_gdBMPPutInt.endgdBMPPutInt.annobin_build_rle_packet.start.annobin_build_rle_packet.endbuild_rle_packet.annobin_bmp_read_palette.start.annobin_bmp_read_palette.endbmp_read_palette.annobin_bmp_read_rle.start.annobin_bmp_read_rle.endbmp_read_rle.annobin_gdImageBmpCtx.start.annobin_gdImageBmpCtx.end.annobin_gdImageBmpPtr.start.annobin_gdImageBmpPtr.end.annobin_gdImageBmp.start.annobin_gdImageBmp.end.annobin_gdImageCreateFromBmpCtx.start.annobin_gdImageCreateFromBmpCtx.end.annobin_gdImageCreateFromBmp.start.annobin_gdImageCreateFromBmp.end.annobin_gdImageCreateFromBmpPtr.start.annobin_gdImageCreateFromBmpPtr.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zif_imageantialiasphp_gd_gdImageMeanRemovalphp_gd_gdNewDynamicCtxExphp_gd_gdImageCreateTrueColorgdImageCreateFromJpegPtrExphp_gd_gdFontLargephp_gd_gdImageCreatezif_imagecreatefrombmpzif_imagefttextzif_imagesetclipzif_imagecreatefromstringzif_imagealphablendinggdLayerOverlayphp_gd_gdImageWBMPphp_gd_gdImageNegatephp_gd_jpeg_gdIOCtx_destphp_gd_gdImageSetBrushphp_gd_gdImageCreateFromPngPtrzif_imagepalettecopygdTransformAffineGetImagephp_gd_gdImageSkewYzif_imagecopyresampledphp_gd_skipheaderzif_imagecolorclosestgdImageSetResolutionzif_imagesavealphaphp_gd_gdImageSetAntiAliasedgd_functionsgdImageCreateFromBmpPtrgdImageCreateFromWebpPtrphp_gd_gdFontGetSmallzif_imageaffinezif_imageaffinematrixconcatgdImageFlipVerticalphp_gd_gdImageBrightnessgetPixelInterpolatedgdImageBmpCtxgdImageScalezif_imagecreatefromjpegphp_gd_empty_output_bufferphp_gd_gdImageCreateFromPngphp_gd_gdFontMediumBoldphp_gd_Putcharzif_imagerotatephp_gd_gdGetBytegdImagePaletteToTrueColorgdImagePixelatephp_gd_gdImageColorDeallocatephp_gd_gdImageDashedLinephp_gd_gdImageGifgdDumpRectphp_gd_gdFontGetMediumBoldphp_gd_gdImageSetClipphp_gd_gdCosTgd_stderr_errorzif_imagecolorallocategdImageRotateNearestNeighbourzif_imagegetclipzif_imagecolorexactphp_gd_gdImageCreateFromGd2CtxgdAffineFlipphp_gd_gdImageCreateFromJpegPtrphp_gd_term_destinationphp_gd_gdFontCacheSetupzif_imagewebpzif_imagesetstylephp_gd_gdImageCopyzif_imagegd2zif_imagecolormatchphp_gd_gdImageCreateFromPngCtxphp_gd_gdImageSelectiveBlurphp_gd_gdImageCopyResampledgdAffineScalephp_gd_gdImageStringTTFgdImageCreateFromWebpphp_gd_gdImageContrastzif_imagecolorstotalphp_gd_gdImagePngExzif_imagepalettetotruecolor_finiphp_gd_gdFontGetGiantzif_imagescalephp_gd_gdImageConvolutionphp_gd_gdImageColorAllocategdImageBmpzif_imageistruecolorphp_gd_gdImageColorExactgdAffineInvertphp_gd_gdImageFilledArczif_imagegammacorrectzif_imageinterlacephp_gd_gdImageJpegCtxphp_gd__gdGetColorsphp_gd_gdImageGetClipgdImageCreateFromXpmphp_gd_gdImageGetPixelgd_error_exzif_imageloadfontphp_gd_gdImageRotate90php_gd_gdImagePngPtrExphp_gd_gdNewDynamicCtxphp_gd_gdImageColorTransparentzif_imagecolorresolvealphaphp_gd_gdImageAABlendphp_gd_gdNewSSCtxphp_gd_gdAlphaBlendzif_imagewbmpphp_gd_gdImageFilledPolygonphp_gd_init_sourcezif_imagecolorexactalphaphp_gd_gdImageGrayScalephp_gd_gdImageWBMPPtrphp_gd_gdImageWBMPCtxzif_imagefontheightzif_imagesyzif_imagecolorsetzm_deactivate_gdzif_imagestringupzif_imagecreatefromgd2zif_imagettfbboxgdFontCacheMutexSetupphp_gd_gdFontGetLargephp_gd_gdImageEllipsezif_imagetruecolortopalettephp_gd_gdFreeFontCachephp_gd_fill_input_bufferphp_gd_gdGetBufphp_gd_gdImageCharUpphp_gd_gdImageCreateFromGd2Partphp_gd_gdImageLinezif_image2wbmpphp_gd_gd_getingdAffineApplyToPointFzif_imagecreatetruecolorzif_imagecropzif_imagecreatefromwebpphp_gd_gdGetIntgdFontCacheMutexShutdownzif_imagecopyresizedphp_gd_createwbmpphp_gd_gdSeekzif_imagefilledpolygonphp_gd_lsqrtphp_gd_gdCompareIntzif_imagecreatefromgd2partphp_gd_gdImageSetAntiAliasedDontBlendgdAffineRotategdLayerMultiplyphp_gd_printwbmpphp_gd_term_sourcezif_imagefilledellipsephp_gd_gdImageStringzif_imagesetthicknessphp_gd_gdFontTinyphp_gd_gdImageCreateFromWBMPPtrphp_gd__gdPutColorsgdGetIntLSBphp_gd_gdImageString16gdImageCreateFromBmpCtxphp_gd_gdCacheCreatephp_gd_gdImageFilledRectanglegdImageWebpzif_imagecolordeallocatephp_gd_freewbmpphp_gd_gdFontGiantRepzif_imagefilledrectanglephp_gd_gdImageRotate180php_gd_gdTellphp_gd_gdImageColorClosestphp_gd_gdImageJpegphp_gd_gdImageCreateFromGdgdImageRotateBicubicFixed__dso_handlephp_gd_any2eucjpphp_gd_error_methodzif_imagepngzif_imagecreatezif_imagettftextgdImageFlipBothgdImageWebpPtrphp_gd_gdImageCreateFromWBMPphp_gd_gdImageColorResolveAlphazif_imagecolorsforindexphp_gd_gdFontSmallphp_gd_gdCacheDeletezif_imagegifzif_imagelayereffectzm_startup_gdphp_gd_gdImagePngCtxExphp_gd_gdGetWordphp_gd_gdImageAALinegdImageOpenPolygonphp_gd_gdImageCreateFromGd2Ptrzif_imagecharphp_gd_gdImageStringFTzif_imagearcphp_gd_Putwordphp_gd_gdImageGdPtrgdImageScaleBicubicFixedphp_gd_gdImageSaveAlphaphp_gd_init_destinationgdImageWebpCtxzif_png2wbmpzif_imagecreatefromxbmphp_gd_gdPutBufgdImageWebpExgdSetErrorMethodphp_gd_gdImageSmoothzif_imagecolorclosestalphaphp_gd_gdFontGetTinyphp_gd_gdImagePngCtxphp_gd_gdPutCzif_imagecropautophp_gd_gdImageGaussianBlurzif_jpeg2wbmpzif_imagestringzif_imagecolorallocatealphazif_imagesetbrushzif_imagexbmphp_gd_gdImageSkewXzif_imagecreatefromwbmpphp_gd_gdFontGiantphp_gd_gdImageCreateFromJpegCtxgdImageScaleTwoPassgdImageRotateBilinearzif_imagecreatefromgifzif_imageflipoverflow2zif_imagecolorresolvezm_info_gdphp_gd_writewbmpphp_gd_putmbigdImageScaleNearestNeighbourphp_gd_getmbiphp_gd_gdImagePngToSinkphp_gd_readwbmpzif_imagebmpzif_imagecopymergezif_imagesetinterpolationphp_gd_gdImageSetTilephp_gd_gdImageColorExactAlphaphp_gd_gdImageColorClosestAlphaphp_gd_gdImageSetPixelphp_gd_gdImageTrueColorToPalettephp_gd_gd_strtok_rphp_gd_gdImageArcphp_gd_gdImageRotate270php_gd_gdImageCreateFromGd2PartPtrphp_gd_gdImageCreateFromGifSourcephp_gd_gdImageEmbossgdImageCreateFromWebpCtxphp_gd_gdImageCharphp_gd_gdImageJpegPtrgdImageCreateFromJpegExgdImageCropAutophp_gd_gdDPExtractDatazif_imageellipsegdAffineEqualgdTransformAffineBoundingBoxphp_gd_gdCacheGetphp_gd_gdImageRectanglephp_gd_gdImageStringUp16php_gd_gdFontLargeRepgdImageWebpPtrExphp_gd_gdImageAlphaBlendinggdImageFlipHorizontalzif_imagefontwidthphp_gd_gdImageCreateFromGd2gdAffineTranslatephp_gd_gdSinTgdAffineShearHorizontalzif_imagefilterzif_imagedestroygdImageCropphp_gd_gdImageDestroyphp_gd_gdImagePaletteCopy_DYNAMICzif_imagecopymergegraygdAffineRectilinearphp_gd_gd_putoutzif_imagecreatefromgdphp_gd_gdImageCreateFromGdPtrphp_gd_gdImageCreateFromGd2PartCtxzif_imageaffinematrixgetphp_gd_gdPutIntphp_gd_gdImageGetTrueColorPixelzif_imageftbboxzif_imagepolygonphp_gd_gdImageCreateFromPngSourcegdAffineIdentitygdImageRotateGenericgdImageCreateFromJpegCtxExphp_gd_gdFontCacheShutdownphp_gd_gdImageColorResolvephp_gd_gdImageCopyMergeGrayphp_gd_gdImageSetThicknessphp_gd_gdImageColorMatchphp_gd_gdImageSetStylegdAffineConcatphp_gd_gdImageInterlacegdPngGetVersionStringphp_gd_gdImageGd2php_gd_gdImageCreateFromWBMPCtxphp_gd_gdFontMediumBoldRepphp_gd_jpeg_gdIOCtx_srcphp_gd_gdCtxPrintfgdTransformAffineCopygdImageBmpPtrgdClearErrorMethodzif_imagelinezif_imagefilledarcphp_gd_gdImageCreateFromGdCtxzif_imagecopygdAffineShearVerticalzif_imagesetpixelzif_imagesxzif_imagecreatefromxpmphp_gd_gdImageEdgeDetectQuickphp_gd_gdPutWordphp_gd_gdImageGifCtxphp_gd_gdImageColorClosestHWBphp_gd_gdGetCphp_gd_gdImageXbmCtxphp_gd_gdImageCopyResizedphp_gd_gdImageCreatePaletteFromTrueColorgdImageRotateInterpolatedphp_gd_gdImageColorphp_gd_gdImageGd2Ptrzif_imagefillphp_gd_gdImageCreateFromGif__GNU_EH_FRAME_HDRzif_imagerectanglezif_imagesettilephp_gd_gdFontTinyRepzif_imagecolorclosesthwb__TMC_END___GLOBAL_OFFSET_TABLE_zif_imagecoloratgdImageSetInterpolationMethodphp_gd_gdImageColorAllocateAlphazif_imagedashedlinephp_gd_gdNewFileCtxgdJpegGetVersionIntphp_gd_gdImageStringFTExgdGetWordLSBgdJpegGetVersionStringgdImageCropThresholdphp_gd_gdImageCreateFromGifCtxzif_imagecharupphp_gd_gdImageComparegdImageCreateFromBmpzif_imagejpegphp_gd_gdImageCreateFromJpegphp_gd_gdImageStringUpzif_imagetypesgd_module_entryzif_imagegdzif_imageopenpolygonzif_imagecolortransparentphp_gd_gdImagePngPtrphp_gd_gdFontSmallRepphp_gd_gdImagePolygongdImageScaleBilinearphp_gd_gdImageFillToBorderzif_imagefilltoborderphp_gd_gdImageCreateFromXbmphp_gd_gdImagePngphp_gd_gdImageFillzif_gd_infophp_gd_gdImageFilledEllipsezif_imageconvolutionphp_gd_gdImageCopyMergezif_imageresolutionphp_gd_gdImageGifPtrgd_errorgdAffineExpansionzif_imagecreatefrompngphp_gd_gdImageGdphp_gd_skip_input_datapng_set_strip_16@@PNG16_0getenv@@GLIBC_2.2.5png_write_info@@PNG16_0free@@GLIBC_2.2.5zend_vspprintf_php_stream_caststrcasecmp@@GLIBC_2.2.5__vfprintf_chk@@GLIBC_2.3.4__errno_location@@GLIBC_2.2.5png_read_image@@PNG16_0unlink@@GLIBC_2.2.5zend_parse_parametersFT_Load_Glyph_emalloc_768_ITM_deregisterTMCloneTablestdout@@GLIBC_2.2.5zend_register_ini_entriesstrcpy@@GLIBC_2.2.5FT_Get_Kerningsincosiconv@@GLIBC_2.2.5php_check_open_basedirqsort@@GLIBC_2.2.5zend_list_closepng_set_compression_level@@PNG16_0fread@@GLIBC_2.2.5png_error@@PNG16_0png_read_end@@PNG16_0zend_strndupap_php_snprintfXpmReadFileToXpmImagepng_set_PLTE@@PNG16_0zend_wrong_param_countpng_get_valid@@PNG16_0_php_stream_write_emalloc_80_edataatan2fclose@@GLIBC_2.2.5uncompresspng_write_image@@PNG16_0FT_Done_Facezend_register_string_constant_estrduppng_set_filter@@PNG16_0FT_Done_FreeType_safe_emallocphp_stream_stdio_opsstrlen@@GLIBC_2.2.5jpeg_start_decompress@@LIBJPEG_6.2__stack_chk_fail@@GLIBC_2.4php_open_temporary_filezend_fetch_resourcephp_info_print_table_rowrewind@@GLIBC_2.2.5fmodstrrchr@@GLIBC_2.2.5FT_New_FaceFT_Init_FreeTypezend_wrong_parameters_count_error_emalloc_32_emalloc_largeadd_assoc_string_exmemset@@GLIBC_2.2.5png_get_rowbytes@@PNG16_0getcwd@@GLIBC_2.2.5jpeg_simple_progression@@LIBJPEG_6.2jpeg_destroy@@LIBJPEG_6.2FT_Done_Glyphpng_set_tRNS@@PNG16_0WebPGetInfo_erealloczend_register_resourcepng_set_read_fn@@PNG16_0jpeg_std_error@@LIBJPEG_6.2zend_hash_index_findpng_write_end@@PNG16_0fgets@@GLIBC_2.2.5FT_Glyph_Get_CBoxzend_ini_longzend_fetch_resource2_ex_setjmp@@GLIBC_2.2.5add_assoc_bool_extmpfile@@GLIBC_2.2.5strcmp@@GLIBC_2.2.5putc@@GLIBC_2.2.5png_sig_cmp@@PNG16_0jpeg_destroy_decompress@@LIBJPEG_6.2zend_list_insert__memcpy_chk@@GLIBC_2.3.4zend_register_long_constantjpeg_write_marker@@LIBJPEG_6.2ftell@@GLIBC_2.2.5__gmon_start__jpeg_finish_compress@@LIBJPEG_6.2sinstrtol@@GLIBC_2.2.5XpmFreeXpmImagephp_error_docref0php_info_print_table_endFT_Glyph_To_Bitmapmemcpy@@GLIBC_2.14display_ini_entriesWebPEncodeRGBAjpeg_CreateCompress@@LIBJPEG_6.2zend_register_list_destructors_exphp_sig_jpg_emalloc_1024png_create_info_struct@@PNG16_0add_index_doublejpeg_save_markers@@LIBJPEG_6.2php_file_le_stream_emalloc_16jpeg_set_quality@@LIBJPEG_6.2php_verror__zend_mallocpng_destroy_write_struct@@PNG16_0fflush@@GLIBC_2.2.5FT_Get_Glyphpng_read_info@@PNG16_0_zval_get_long_func__isoc99_sscanf@@GLIBC_2.7jpeg_start_compress@@LIBJPEG_6.2zend_hash_str_findexp_php_stream_copy_to_mempng_get_tRNS@@PNG16_0png_destroy_read_struct@@PNG16_0zend_parse_arg_long_slowpng_set_gray_to_rgb@@PNG16_0get_module_ecallocfseek@@GLIBC_2.2.5php_sig_bmpphp_sig_pngphpi_get_le_gdtan__strcpy_chk@@GLIBC_2.3.4php_write__bss_start_array_initXpmLibraryVersion_convert_to_stringjpeg_set_defaults@@LIBJPEG_6.2jpeg_finish_decompress@@LIBJPEG_6.2_efree_php_stream_seek__printf_chk@@GLIBC_2.3.4_zval_get_double_funciconv_close@@GLIBC_2.2.5FT_Get_Char_Index__longjmp_chk@@GLIBC_2.11png_get_PLTE@@PNG16_0png_get_error_ptr@@PNG16_0jpeg_destroy_compress@@LIBJPEG_6.2access@@GLIBC_2.2.5_php_stream_open_wrapper_exphp_sig_giffopen@@GLIBC_2.2.5_php_stream_free_php_stream_eofpowFT_Set_TransformXpmFreeXpmInfo_php_stream_readpng_get_io_ptr@@PNG16_0jpeg_write_scanlines@@LIBJPEG_6.2png_create_write_struct@@PNG16_0zend_errorpng_set_sig_bytes@@PNG16_0_estrndup_php_stream_tellzend_wrong_parameter_type_errorexit@@GLIBC_2.2.5php_file_le_pstreamfwrite@@GLIBC_2.2.5executor_globalsadd_assoc_long_expng_get_IHDR@@PNG16_0_ITM_registerTMCloneTableadd_next_index_longjpeg_read_header@@LIBJPEG_6.2png_read_update_info@@PNG16_0png_set_write_fn@@PNG16_0FT_Set_Char_Sizephp_info_print_table_startjpeg_resync_to_restart@@LIBJPEG_6.2strdup@@GLIBC_2.2.5jpeg_CreateDecompress@@LIBJPEG_6.2WebPDecodeARGBpng_set_packing@@PNG16_0png_set_pHYs@@PNG16_0png_set_IHDR@@PNG16_0_emalloc_24__cxa_finalize@@GLIBC_2.2.5getc@@GLIBC_2.2.5png_create_read_struct@@PNG16_0__ctype_b_loc@@GLIBC_2.3png_get_pHYs@@PNG16_0iconv_open@@GLIBC_2.2.5stderr@@GLIBC_2.2.5jpeg_read_scanlines@@LIBJPEG_6.2.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``88 @$ Ho<#<#Uo$$d%%pDnBjjx{{s | | ~ $~44 `` \$\$`4`4D^ 0%08%8@%@@ %p@%@% % @ 0- !f4 #PK!modules/curl.sonuȯELF>0G@@8 @KK XX!X! ii!i!888$$JJJ StdJJJ Ptdh.h.h.QtdRtdXX!X!PPGNUʸģ9{iziΖ~B  ~BE| pqXe4~X A*BwLUw:l#UM2 E!Hn Pb z8.m!^e)<]q:" u@&f+sHY3Y}, gh}F"aV p!p! ] p!p!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizecurl_version_infophp_info_print_table_startphp_info_print_table_rowphp_sprintfphp_info_print_table_end__stack_chk_failzend_register_list_destructors_exzend_register_ini_entrieszend_register_long_constantcurl_global_init_efreecurl_global_cleanupzend_unregister_ini_entries_array_initadd_assoc_long_exadd_assoc_string_exadd_next_index_stringadd_assoc_zval_exzend_parse_arg_long_slowzend_wrong_parameter_type_errorzend_wrong_parameters_count_errorcurl_slist_free_allcurl_formfreecurl_easy_setoptzend_ini_string_exstrlen_estrndupzend_llist_add_elementphp_error_docref0core_globalszend_fetch_resourcezend_empty_string_emalloczend_is_truecurl_slist_append_zval_get_string_func_zval_get_long_funczend_fetch_resource_exphp_check_open_basedirphp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_ex_php_stream_cast_zval_ptr_dtorcurl_formaddempty_fcall_info_cachecurl_CURLFile_classinstanceof_function_zend_hash_next_index_insertzend_long_to_strzend_read_property_zend_hash_index_update_ecalloczend_llist_cleanzend_list_closecurl_easy_strerrormemcpycurl_easy_escapecurl_freezend_parse_arg_str_slowcurl_easy_unescapecurl_easy_pausecurl_easy_resetstrncpymemchradd_next_index_zvalcurl_easy_getinfoadd_assoc_str_exadd_assoc_double_exstderrcurl_easy_cleanupzend_hash_destroyphp_output_writezend_call_functionfwritesmart_str_ereallocfreadget_module_emalloc_8zend_llist_init_emalloc_56_zend_hash_initcurl_easy_initzend_register_resourcecurl_easy_duphandlecurl_easy_performfflush_php_stream_flushzend_list_deletezend_llist_get_first_exzend_llist_get_next_exempty_fcall_infocurl_pushheader_bynumzend_fcall_info_initzend_fcall_info_argnzend_fcall_info_args_clear_zval_dtor_func_zval_copy_ctor_funccurl_multi_initzend_parse_parameterscurl_multi_add_handlecurl_multi_remove_handlezend_llist_del_elementcurl_multi_waitzend_parse_arg_double_slowcurl_multi_performcurl_multi_info_readcurl_multi_cleanupcurl_multi_strerrorcurl_multi_setoptcurl_share_initcurl_share_setoptcurl_share_cleanupcurl_share_strerrorzend_update_property_stringzend_unset_propertyzend_throw_exception_object_init_ex__zend_malloczend_new_interned_stringzend_register_internal_classzend_declare_property_stringlibcurl.so.4libc.so.6_edata__bss_startcurl.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64L q ii | ui  X!NX!@NX!X!X!X!j#Y!s#Y!y# Y!#0Y!#@Y!#PY!#`Y!#pY! Y!#Y!#Y!Y!#Y!#Y!Y!#Y!#Z!#Z!#@Z!\!hZ!Z!%[!%([!!X[!&p[!&[!&[!&\!&(\!&X\!&\!&\!&]!&X]!'&]!'&]!'&]!*&8^!&x^!'&^!8&^!'&^!F&8_!'&P_!&_!'&_!&_!&`!&(`!&X`!&p`!N&`!&`!N&a!&Xa!&a!&a!&b!&0b!&xb!&b!&b!R&c!&0c!&Hc!&xc!&c!#c!$ d!-(d!p0d!`e!@d!-Hd!`d!-hd!d!-d!d! e!d!.d!0d!.d!d! e!d! .d!8e!-xe!%e!%e!!e!#e!Pe!c!e!$e!e!`c!f!$f!@f!c! f! $(f!0f!c!@f!,$Hf!0Pf!b!`f!>$hf!pf!`b!f!H$f!f!b!f!U$f!f!a!f!`$f!f!a!f!k$f!Pf!@a!g!v$g!бg!]! g!$(g!00g!\!@g!$Hg!Pg!\!`g!$hg!`pg!a!g!$g!g!`!g!$g!Pg!@`!g!$g!g!@[!g!$g!g!-h!$h! h!_! h!%(h!0h! _!@h!%Hh!Ph!^!`h!-%hh!ph!`^!h!=%h!h! ^!h!S%h!h!]!h!h%h!0h!]!h!y%h!h!@]!i!%i!@i!_! i!%(i!0i!,@i!%Hi!Pi!@\!`i!%hi!pi![!i!%i!i![!i!%i!Pi!Z! p!(p!e!0p!R8p! Pp!pPXp!#p!#o! o!o!<o!=o!\o!]o!lo!uo!o!|o!}l!l!l! l!(l!0l!8l!@l!Hl! Pl! Xl! `l! hl!pl!xl!l!l!l!l!l!l!l!l!l!l!l!l!l!l!l! l!!m!"m!#m!$m!% m!&(m!'0m!(8m!)@m!*Hm!+Pm!,Xm!-`m!.hm!/pm!0xm!1m!2m!3m!4m!5m!6m!7m!8m!9m!:m!;m!>m!?m!@m!Am!Bm!Cn!Dn!En!Fn!G n!H(n!I0n!J8n!K@n!LHn!MPn!NXn!O`n!Phn!Qpn!Rxn!Sn!Tn!Un!Vn!Wn!Xn!Yn!Zn![n!^n!_n!`n!an!bn!cn!dn!eo!fo!go!ho!i o!j(o!k0o!m8o!n@o!oHo!pPo!qXo!r`o!sho!tpo!vxo!wo!xo!yo!zo!{o!|HH97!HtH5R3!%S3!hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhs% ,!D%,!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%+!D%}+!D%u+!D%m+!D%e+!D%]+!D%U+!D%M+!D%E+!D%=+!D%5+!D%-+!D%%+!D%+!D%+!D% +!D%+!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%*!D%}*!D%u*!D%m*!D%e*!D%]*!D%U*!D%M*!D%E*!D%=*!D%5*!D%-*!D%%*!D%*!D%*!D% *!D%*!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%)!D%})!D%u)!D%m)!D%e)!D%])!D%U)!D%M)!D%E)!D%=)!D%5)!D%-)!D%%)!D%)!D%)!D% )!D%)!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%(!D%}(!D%u(!Dù11E1H1'G11Hm'8>H'l~H Hx'tH'H HEH%11J11HtzH;1Q&!MHMH~11H[[H11.JH?11|JH11]JH11>JH11eH H,'t>~xH YH7'HV'H HEH gH H H'H(H |HEyH''H HE]1fH\11AEIg1~YHn[11]1S1Bmh1*i1kD1k1YH[11] H11o1tH11zH11M|H.11{H11vy{H11\H.H11> H11HCH11qH11H11Eg11sT1[Ha11E酎1'1H1Rm1首11ژ1P111w1d1Sޟ1=1HY11cAD$Pp1Hc11-E1£11邥D11x阨H="!H"!H9tH!!Ht H="!H5"!H)HHH?HHtH!!HtfD=]"!u+UH=!!Ht H=^ !d5"!]wff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@ff.@HH@AWAVAUATUSHdH%(H$1I{H3HPH5Q19HU1H5@"UL1H5=1LH5*E  H]@E1L=L5۩HHt/H{LK<,IEH51H~HHIHuLH5ѩ1HU1H5tHU(HtH51XHU8HtH51Aع*H=_ Aع,H=[Aع=H=UAع$H=RAع+H=NAع.H=LAعH=IlAعH=ANAعH=>0AعH=<Aع%H=0Aع H=/Aع$H=)AعH=)AعH=#|Aع H=^AعH=@AعH="AعH=AعH=AعH=AعH=AعH= AعH=nAع !H=uPAعH=ܣ2Aع H=٣Aع H=֣AعH=ӣAع H=ңAعH=ϣAع)H=ǣ~Aع4H=£`AعH=BAع-H=$Aع"H=Aع!H=AعH=Aع&H=Aع'H=Aع(H=pAعH=RAع2H=x41AعH=lAعH=WAعH=RAعH=NAعH=DAعH=9Aع8H=,eAع7H=GAع9H=)Aع<H= Aع:H=Aع;H=Aع#H=Aع5H=ߢAع6H=ۢuAع3H=آWAعZH=9Aع1H=Aع/H=Aع0H=AعH=AعH=AعH=AعH=gAع0H=IAع0 H=+Aع0H= AعH=KAعH=CAع H=<AعH=0Aع H=&wAع H=YAع8H=;Aع0H=Aع0H=AعH=Aع H=Aع0H=Aع H=Aع0H=ڡiAع0H=ӡKAع 0H=ʡ-Aع 0H=ġAع H=Aع0H=Aع0H=Aع H=AعH=yAعH=[AعH==AعHH=vAعH=q1AعH=kAعH=VAعH=L1AعH=EAعH=6oAعH=)Q1AعH=6AعH=AعH=AعH=AعH=1AعH=AعH=AعH=ڠgAعH=ϠI1AعH=Ϡ.AعH=ĠAعH=1AعH=AعH=AعH=AعH=}AعH=_AعH=AAعH=#1AعH=AعH=}AعH=qAعH=jAعH=^AعkH=QrAعH H=BRAعHH=/2AعH="AعH=AعH=1Aع H=Aع H=Aع H=AعnH=cAعoH=EAع?H='Aع>H= Aع H=Aع H=Aع H=AعpH=AعqH=sAعrH=UAعH=|7AعH=p1AعH=gAع@H=aAعH=XAعH=I1AعH=AAعH=3kAعwH=$MAع'H=/1AعH=AعH=AعH=AعH=Aع'H=ݞAعyH=Ӟ~Aع H=ɞ`Aع H=BAع@H=$Aع@H=Aع'H=AعH=AعH=AعH=AعH=pAعH=RAعH=v4AعH=oAعH=hAعH=^AعH=XAع'H=sAعuH=4AعuH=3bAعMH=2DAعH=-&AعH=+AعO H=!AعH= AعH=Aع'H=Aع'H=rAعH=T1AعH=9AعH=AعH=AعH=ݝAعH=AعH=AعH=AعO'H=gAعH=IAعH=+Aع2H= Aع0H=AعwH=|AعH=nAعH=_1AعH=WzAعH=I\Aع'H=S>AعH= Aع H=1AعH= AعH=1AعH=AعH=1AعH=ܜuAعH=ҜWAعH=Ȝ9AعH=AعH=AعH=Aع!0H=Aع H=AعH=Aع'H=gAع'H=IAع*'H=w+AعHH=i AعHH=ZAعH=QAعH=E1AعH=@AعH=4vAعH=,XAع"@H=%:AعH=Aع'H= AعH=Aع'H=Aع'H=Aع'H=AعH=֛hAعH=̛JAعH=›,AعH=Aع# H=Aع'H=AعH=AعH=AعH=xAع'H=ZAعH=VH;Hھ'1DH;oN1H;.H;Hھ-'1H;1[H;x1\H;1D11ҾH=ݒ+Ht8u&11H=Ғ Hu[D8tH;H¾Q'1[鈷AVIAUEATIUHSHHHdH%(HD$1譲L9HEu?H;HD1/1,HL$dH3 %(u=H[]A\A]A^ÐHHնH;DH$H1H{H裷Lff.UHHSHHH2 H@xHt8uHHHE1[']H?HT$1gHL$G,qX HOPdAUATUSHH5PHHP ϱHH,u)H CHHH[]A\A]f.ƅ(Lm(L-Hx IH譵HHHHH@L`AsBAEtU(PABD HCH[]A\A]HU(Hx HHPDItHtH)LH)DHCH[]A\A]fDU(PDAttwDAtftd1ݴff.fG,X HOPu?S HH5HPfH,'H/'H4'H5'SCHi'Hw' `Hq'5Ht'> H5]L胩HHH;t'11覩ǃ,GH-'fDH''H)'A|$M$$AD$uA$IL$Ml$HtL茣IL$LHE1H~AT$A,$La衢|@Hv'fDHm'#fDH';~)H'fDH0I"H-'vH5'A}bru A}c+HCHx7HKI$AT$HAQ tHT$@HD$0HHHD$8H@PxDLL$E1LHy HmH8xHHHHD$ Bf苖HCH Ho"ojHR `h HP0HCH8IH\$D,EHCHx8H88~Ht$0HT$0H;1('HCH` H@0o2ozHR pHP0x HCHx0fD賕HCH H@(o2ozHR px HP0HCHx(fDL IOHT$@H×ǃ,1HH@ΙHE(HCHx(U@讙HE0HCHx0A}bru A}c+MHCHxHXʔHCHT$@H@HP8HCH@@PHCI $HPAD$HJXB`;1ǃ,%耙vlbHCH@xX;H@8HC1H@H@@ǃ,HCH@x`%H@8HC1H@@Pǃ,LL$E1LHi H>uH8ҕxLL$E1LH9 HuH8袕xXHHzJHLtHLM1HMjALt$0j ARjRjH|$H芕H@DEsHCHxHP HCHT$@H@HP8HCHPI$HB@HSHJAT$HAPQX~1ǃ,h×^蹗D$;HCHx8pHHxLPLL$E1LH LT$(HsH8qHT$ LT$(xHHPHxHDT$ fDHT$ LH5fHHDCH;1LAu"HL$H? H5weL Ll$H;1 L<H;1L H;1L ЃH;1L 趃H;1L 蜃TH;1L 肃Hl$ H;10HcH;1H0IH;1H0/gH;1H0-H;1H0H;1H0H;1H 0ǂH;1H 0譂EH;1H0蓂 H;1H0yH;1H0_H;1H0E]H;1L+u'HL$ LH<H5xdHHDH;1L u'HL$ LHI<H5HdHHD賃H;1HT$("@证H;1L( 蕁MH;1L){u'HL$LH;H5cHHD@H;1L* >HK HtAuH5cLPHD$HdH3%(ZHP[]A\A]A^AD$DHD$01LeH;1HT$0"@豀9H|$0HtLDH@ HtI$@AD$[=HD$0H;1HT$0ELl$0ML7Hx HH跅HLHHHH{HCHk D+I$AD$DH_PH1xH_`Ht$H1ҾfDAD$gAD$RfHL$ H5aLg fHL$ H5aLGfHl$01H豃H|$(HtHHH5taL~<D$ H5,aLVD$ H5`L6JD$ H5`LD$ H5`LD$ H5^`LD$ H5/`LbD$ H5`L(D$ H5_LvD$ H5_LVD$ H5w_L6zD$ H5G_L@D$ H5_L~HL$H5^LgfHL$H5^LGfHL$H5^L'TfHL$ H5f^LfHL$ H5:^LfHL$ H5^LǂfHD$0H;1HT$0|AD$HD$0I$YfAD$BfAD$2fAD$"fHD$0H;1HT$0|udAD$D$0A$f.HL$0 LD$8H5(]o{f.AD$fAD$|ff.fATUSHGHx u9HPHt zXHPHt z`HHtx`u5[]A\A~HK1HyD}HHCA~HS1DH:HXL}HuHCH8HXzHCHھ'H@`HCHH@8HCH@PH;1[]A\>fDcA}HS1DHzHP|HHC+A}HS1DHzHX|HHCfmHCHxyHC5'@ HL H;H1fHCHxHPgyHCHھ'H@@XHCH@H@@HCH@H@8H;1&HCHxHXyHCHھ-'H@@`HCH@H@8HCH@@PH;1~fU1SHHpH;Ht1HoN1~H;+N1H~H;'H8*gHCH(H}@HtW*HE@HEHHCH8.xHCHx!xHCHxxHCHxxH{ Ht WHCHxHXwHCH8HXwHCHxHPwHCH8|HCHx|HCHx|HCHx(HtwHCHx(|HCHx0HthwHCHx0k|HCH_|HH[]Q|/Fv3@/tbvH{|HCHx8|HCHxp]zHCHxp{H{{H8{OfD{\fD{fDHAVAUIATIUSHHHHIdH%(H$1HiEPq~GtzHHEH$dH3 %(HHĐ[]A\A]A^f.u$H)}Pu HJHLwDHID$D$h H{ HHD$`{LHLl$`IHII~IFI^xADHuH|$ Lt$pLt$D$xEHD$ 8HUAƄ$0HT$(D$0HD$HLt$8D$TLl$@D$PxAƄ$0|$u5LtI}tHM8zHLc|$uDH\$DHE@HcHtmHEHx0tkLc@kID$0HEH@0xt%HSH@HR0H BHEH@0HS@8'HR0B8H;H1lHCHxpkH{kHEH8HCkH8H8[]A\HWoXXHZXhG,qX HOPAV AUATUHH59ISHHPgIHt^H8iIHq1LL0HI*HCPL5> EhE HEID$[]A\A]A^@E[]A\A]A^ú1kUSHHHGH(H}@HtWHE@HEHH{ HtWtLHC H{0HC(Hǃ!H))1Hǃ,H[]fD/ut>d/qtdbiPfDibfDG,FpX HOPATޔ UHH5}GSHPfHHtmHǾHH;d,tVtQHCHH{@Ht)Wu/ujcDHC@HCHE[]A\@HCx HQPtwt"HPzPE[]A\Hy8HtgHCHPHzPHxPuH HHEE[]A\f.HQ@HtwHBDHCHH@@HE@uÃE1f.+iAfHK1HyDeHt 1HfHCHPzPNfHz8HH3fHK%fg1hDG8Fu< t1@HH9ff.Ht?HHxt5H SH5MHHH[] ff.fS(HdH%(H$1wKHHCURLFileHHHHH@H@@ Hv HHDŽ$HD$Hk HDŽ$HDŽ$HDŽ$ HDŽ$(HDŽ$0HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$8HDŽ$@HDŽ$HHD$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$PHDŽ$H$?HAHu H H5r3HHJH;AH wH5,'JH;AH VH5'JH$dH3%(u H[FHHAsynchDNSYesNo, enabledcURL supportcURL Information%dAgeFeaturesProtocolsHost%s%sSSL VersionZLib VersionIconV VersionlibSSH Versioncurlcurl_multicurl_shareCURLOPT_AUTOREFERERCURLOPT_BINARYTRANSFERCURLOPT_BUFFERSIZECURLOPT_CAINFOCURLOPT_CAPATHCURLOPT_CONNECTTIMEOUTCURLOPT_COOKIECURLOPT_COOKIEFILECURLOPT_COOKIEJARCURLOPT_COOKIESESSIONCURLOPT_CRLFCURLOPT_CUSTOMREQUESTCURLOPT_DNS_CACHE_TIMEOUTCURLOPT_DNS_USE_GLOBAL_CACHECURLOPT_EGDSOCKETCURLOPT_ENCODINGCURLOPT_FAILONERRORCURLOPT_FILECURLOPT_FILETIMECURLOPT_FOLLOWLOCATIONCURLOPT_FORBID_REUSECURLOPT_FRESH_CONNECTCURLOPT_FTPAPPENDCURLOPT_FTPLISTONLYCURLOPT_FTPPORTCURLOPT_FTP_USE_EPRTCURLOPT_FTP_USE_EPSVCURLOPT_HEADERCURLOPT_HEADERFUNCTIONCURLOPT_HTTP200ALIASESCURLOPT_HTTPGETCURLOPT_HTTPHEADERCURLOPT_HTTPPROXYTUNNELCURLOPT_HTTP_VERSIONCURLOPT_INFILECURLOPT_INFILESIZECURLOPT_INTERFACECURLOPT_KRB4LEVELCURLOPT_LOW_SPEED_LIMITCURLOPT_LOW_SPEED_TIMECURLOPT_MAXCONNECTSCURLOPT_MAXREDIRSCURLOPT_NETRCCURLOPT_NOBODYCURLOPT_NOPROGRESSCURLOPT_NOSIGNALCURLOPT_PORTCURLOPT_POSTCURLOPT_POSTFIELDSCURLOPT_POSTQUOTECURLOPT_PREQUOTECURLOPT_PRIVATECURLOPT_PROGRESSFUNCTIONCURLOPT_PROXYCURLOPT_PROXYPORTCURLOPT_PROXYTYPECURLOPT_PROXYUSERPWDCURLOPT_PUTCURLOPT_QUOTECURLOPT_RANDOM_FILECURLOPT_RANGECURLOPT_READDATACURLOPT_READFUNCTIONCURLOPT_REFERERCURLOPT_RESUME_FROMCURLOPT_RETURNTRANSFERCURLOPT_SHARECURLOPT_SSLCERTCURLOPT_SSLCERTPASSWDCURLOPT_SSLCERTTYPECURLOPT_SSLENGINECURLOPT_SSLENGINE_DEFAULTCURLOPT_SSLKEYCURLOPT_SSLKEYPASSWDCURLOPT_SSLKEYTYPECURLOPT_SSLVERSIONCURLOPT_SSL_CIPHER_LISTCURLOPT_SSL_VERIFYHOSTCURLOPT_SSL_VERIFYPEERCURLOPT_STDERRCURLOPT_TELNETOPTIONSCURLOPT_TIMECONDITIONCURLOPT_TIMEOUTCURLOPT_TIMEVALUECURLOPT_TRANSFERTEXTCURLOPT_UNRESTRICTED_AUTHCURLOPT_UPLOADCURLOPT_URLCURLOPT_USERAGENTCURLOPT_USERPWDCURLOPT_VERBOSECURLOPT_WRITEFUNCTIONCURLOPT_WRITEHEADERCURLE_ABORTED_BY_CALLBACKCURLE_BAD_CALLING_ORDERCURLE_BAD_CONTENT_ENCODINGCURLE_BAD_DOWNLOAD_RESUMECURLE_BAD_FUNCTION_ARGUMENTCURLE_BAD_PASSWORD_ENTEREDCURLE_COULDNT_CONNECTCURLE_COULDNT_RESOLVE_HOSTCURLE_COULDNT_RESOLVE_PROXYCURLE_FAILED_INITCURLE_FILE_COULDNT_READ_FILECURLE_FTP_ACCESS_DENIEDCURLE_FTP_BAD_DOWNLOAD_RESUMECURLE_FTP_CANT_GET_HOSTCURLE_FTP_CANT_RECONNECTCURLE_FTP_COULDNT_GET_SIZECURLE_FTP_COULDNT_RETR_FILECURLE_FTP_COULDNT_SET_ASCIICURLE_FTP_COULDNT_SET_BINARYCURLE_FTP_COULDNT_STOR_FILECURLE_FTP_COULDNT_USE_RESTCURLE_FTP_PARTIAL_FILECURLE_FTP_PORT_FAILEDCURLE_FTP_QUOTE_ERRORCURLE_FTP_WEIRD_227_FORMATCURLE_FTP_WEIRD_PASS_REPLYCURLE_FTP_WEIRD_PASV_REPLYCURLE_FTP_WEIRD_SERVER_REPLYCURLE_FTP_WEIRD_USER_REPLYCURLE_FTP_WRITE_ERRORCURLE_FUNCTION_NOT_FOUNDCURLE_GOT_NOTHINGCURLE_HTTP_NOT_FOUNDCURLE_HTTP_PORT_FAILEDCURLE_HTTP_POST_ERRORCURLE_HTTP_RANGE_ERRORCURLE_HTTP_RETURNED_ERRORCURLE_LDAP_CANNOT_BINDCURLE_LDAP_SEARCH_FAILEDCURLE_LIBRARY_NOT_FOUNDCURLE_MALFORMAT_USERCURLE_OBSOLETECURLE_OKCURLE_OPERATION_TIMEDOUTCURLE_OPERATION_TIMEOUTEDCURLE_OUT_OF_MEMORYCURLE_PARTIAL_FILECURLE_READ_ERRORCURLE_RECV_ERRORCURLE_SEND_ERRORCURLE_SHARE_IN_USECURLE_SSL_CACERTCURLE_SSL_CERTPROBLEMCURLE_SSL_CIPHERCURLE_SSL_CONNECT_ERRORCURLE_SSL_ENGINE_NOTFOUNDCURLE_SSL_ENGINE_SETFAILEDCURLE_SSL_PEER_CERTIFICATECURLE_TELNET_OPTION_SYNTAXCURLE_TOO_MANY_REDIRECTSCURLE_UNKNOWN_TELNET_OPTIONCURLE_UNSUPPORTED_PROTOCOLCURLE_URL_MALFORMATCURLE_URL_MALFORMAT_USERCURLE_WRITE_ERRORCURLINFO_CONNECT_TIMECURLINFO_CONTENT_TYPECURLINFO_EFFECTIVE_URLCURLINFO_FILETIMECURLINFO_HEADER_OUTCURLINFO_HEADER_SIZECURLINFO_HTTP_CODECURLINFO_LASTONECURLINFO_NAMELOOKUP_TIMECURLINFO_PRETRANSFER_TIMECURLINFO_PRIVATECURLINFO_REDIRECT_COUNTCURLINFO_REDIRECT_TIMECURLINFO_REQUEST_SIZECURLINFO_SIZE_DOWNLOADCURLINFO_SIZE_UPLOADCURLINFO_SPEED_DOWNLOADCURLINFO_SPEED_UPLOADCURLINFO_SSL_VERIFYRESULTCURLINFO_STARTTRANSFER_TIMECURLINFO_TOTAL_TIMECURLMSG_DONECURLVERSION_NOWCURLM_BAD_EASY_HANDLECURLM_BAD_HANDLECURLM_CALL_MULTI_PERFORMCURLM_INTERNAL_ERRORCURLM_OKCURLM_OUT_OF_MEMORYCURLM_ADDED_ALREADYCURLPROXY_HTTPCURLPROXY_SOCKS4CURLPROXY_SOCKS5CURLSHOPT_NONECURLSHOPT_SHARECURLSHOPT_UNSHARECURL_HTTP_VERSION_1_0CURL_HTTP_VERSION_1_1CURL_HTTP_VERSION_NONECURL_LOCK_DATA_COOKIECURL_LOCK_DATA_DNSCURL_LOCK_DATA_SSL_SESSIONCURL_NETRC_IGNOREDCURL_NETRC_OPTIONALCURL_NETRC_REQUIREDCURL_SSLVERSION_DEFAULTCURL_SSLVERSION_SSLv2CURL_SSLVERSION_SSLv3CURL_SSLVERSION_TLSv1CURL_TIMECOND_IFMODSINCECURL_TIMECOND_IFUNMODSINCECURL_TIMECOND_LASTMODCURL_TIMECOND_NONECURL_VERSION_IPV6CURL_VERSION_KERBEROS4CURL_VERSION_LIBZCURL_VERSION_SSLCURLOPT_HTTPAUTHCURLAUTH_ANYCURLAUTH_ANYSAFECURLAUTH_BASICCURLAUTH_DIGESTCURLAUTH_GSSNEGOTIATECURLAUTH_NONECURLAUTH_NTLMCURLINFO_HTTP_CONNECTCODECURLOPT_PROXYAUTHCURLE_FILESIZE_EXCEEDEDCURLE_LDAP_INVALID_URLCURLINFO_HTTPAUTH_AVAILCURLINFO_RESPONSE_CODECURLINFO_PROXYAUTH_AVAILCURLOPT_FTP_RESPONSE_TIMEOUTCURLOPT_IPRESOLVECURLOPT_MAXFILESIZECURL_IPRESOLVE_V4CURL_IPRESOLVE_V6CURL_IPRESOLVE_WHATEVERCURLE_FTP_SSL_FAILEDCURLFTPSSL_ALLCURLFTPSSL_CONTROLCURLFTPSSL_NONECURLFTPSSL_TRYCURLOPT_FTP_SSLCURLOPT_NETRC_FILECURLFTPAUTH_DEFAULTCURLFTPAUTH_SSLCURLFTPAUTH_TLSCURLOPT_FTPSSLAUTHCURLOPT_FTP_ACCOUNTCURLOPT_TCP_NODELAYCURLINFO_OS_ERRNOCURLINFO_NUM_CONNECTSCURLINFO_SSL_ENGINESCURLINFO_COOKIELISTCURLOPT_COOKIELISTCURLOPT_IGNORE_CONTENT_LENGTHCURLOPT_FTP_SKIP_PASV_IPCURLOPT_FTP_FILEMETHODCURLOPT_CONNECT_ONLYCURLOPT_LOCALPORTCURLOPT_LOCALPORTRANGECURLFTPMETHOD_MULTICWDCURLFTPMETHOD_NOCWDCURLFTPMETHOD_SINGLECWDCURLINFO_FTP_ENTRY_PATHCURLOPT_MAX_RECV_SPEED_LARGECURLOPT_MAX_SEND_SPEED_LARGECURLE_SSL_CACERT_BADFILECURLOPT_SSL_SESSIONID_CACHECURLMOPT_PIPELININGCURLE_SSHCURLOPT_FTP_SSL_CCCCURLOPT_SSH_AUTH_TYPESCURLOPT_SSH_PRIVATE_KEYFILECURLOPT_SSH_PUBLIC_KEYFILECURLFTPSSL_CCC_ACTIVECURLFTPSSL_CCC_NONECURLFTPSSL_CCC_PASSIVECURLOPT_CONNECTTIMEOUT_MSCURLOPT_HTTP_CONTENT_DECODINGCURLOPT_TIMEOUT_MSCURLMOPT_MAXCONNECTSCURLOPT_KRBLEVELCURLOPT_NEW_DIRECTORY_PERMSCURLOPT_NEW_FILE_PERMSCURLOPT_APPENDCURLOPT_DIRLISTONLYCURLOPT_USE_SSLCURLUSESSL_ALLCURLUSESSL_CONTROLCURLUSESSL_NONECURLUSESSL_TRYCURLOPT_PROXY_TRANSFER_MODECURLPAUSE_ALLCURLPAUSE_CONTCURLPAUSE_RECVCURLPAUSE_RECV_CONTCURLPAUSE_SENDCURLPAUSE_SEND_CONTCURL_READFUNC_PAUSECURL_WRITEFUNC_PAUSECURLPROXY_SOCKS4ACURLPROXY_SOCKS5_HOSTNAMECURLINFO_REDIRECT_URLCURLINFO_APPCONNECT_TIMECURLINFO_PRIMARY_IPCURLOPT_ADDRESS_SCOPECURLOPT_CRLFILECURLOPT_ISSUERCERTCURLOPT_KEYPASSWDCURLSSH_AUTH_ANYCURLSSH_AUTH_DEFAULTCURLSSH_AUTH_HOSTCURLSSH_AUTH_KEYBOARDCURLSSH_AUTH_NONECURLSSH_AUTH_PASSWORDCURLSSH_AUTH_PUBLICKEYCURLINFO_CERTINFOCURLOPT_CERTINFOCURLOPT_PASSWORDCURLOPT_POSTREDIRCURLOPT_PROXYPASSWORDCURLOPT_PROXYUSERNAMECURLOPT_USERNAMECURL_REDIR_POST_301CURL_REDIR_POST_302CURL_REDIR_POST_ALLCURLAUTH_DIGEST_IECURLINFO_CONDITION_UNMETCURLOPT_NOPROXYCURLOPT_PROTOCOLSCURLOPT_REDIR_PROTOCOLSCURLOPT_SOCKS5_GSSAPI_NECCURLOPT_SOCKS5_GSSAPI_SERVICECURLOPT_TFTP_BLKSIZECURLPROTO_ALLCURLPROTO_DICTCURLPROTO_FILECURLPROTO_FTPCURLPROTO_FTPSCURLPROTO_HTTPCURLPROTO_HTTPSCURLPROTO_LDAPCURLPROTO_LDAPSCURLPROTO_SCPCURLPROTO_SFTPCURLPROTO_TELNETCURLPROTO_TFTPCURLPROXY_HTTP_1_0CURLFTP_CREATE_DIRCURLFTP_CREATE_DIR_NONECURLFTP_CREATE_DIR_RETRYCURLOPT_SSH_KNOWNHOSTSCURLINFO_RTSP_CLIENT_CSEQCURLINFO_RTSP_CSEQ_RECVCURLINFO_RTSP_SERVER_CSEQCURLINFO_RTSP_SESSION_IDCURLOPT_FTP_USE_PRETCURLOPT_MAIL_FROMCURLOPT_MAIL_RCPTCURLOPT_RTSP_CLIENT_CSEQCURLOPT_RTSP_REQUESTCURLOPT_RTSP_SERVER_CSEQCURLOPT_RTSP_SESSION_IDCURLOPT_RTSP_STREAM_URICURLOPT_RTSP_TRANSPORTCURLPROTO_IMAPCURLPROTO_IMAPSCURLPROTO_POP3CURLPROTO_POP3SCURLPROTO_RTSPCURLPROTO_SMTPCURLPROTO_SMTPSCURL_RTSPREQ_ANNOUNCECURL_RTSPREQ_DESCRIBECURL_RTSPREQ_GET_PARAMETERCURL_RTSPREQ_OPTIONSCURL_RTSPREQ_PAUSECURL_RTSPREQ_PLAYCURL_RTSPREQ_RECEIVECURL_RTSPREQ_RECORDCURL_RTSPREQ_SET_PARAMETERCURL_RTSPREQ_SETUPCURL_RTSPREQ_TEARDOWNCURLINFO_LOCAL_IPCURLINFO_LOCAL_PORTCURLINFO_PRIMARY_PORTCURLOPT_FNMATCH_FUNCTIONCURLOPT_WILDCARDMATCHCURLPROTO_RTMPCURLPROTO_RTMPECURLPROTO_RTMPSCURLPROTO_RTMPTCURLPROTO_RTMPTECURLPROTO_RTMPTSCURL_FNMATCHFUNC_FAILCURL_FNMATCHFUNC_MATCHCURL_FNMATCHFUNC_NOMATCHCURLPROTO_GOPHERCURLAUTH_ONLYCURLOPT_RESOLVECURLOPT_TLSAUTH_PASSWORDCURLOPT_TLSAUTH_TYPECURLOPT_TLSAUTH_USERNAMECURL_TLSAUTH_SRPCURLOPT_ACCEPT_ENCODINGCURLOPT_TRANSFER_ENCODINGCURLAUTH_NTLM_WBCURLGSSAPI_DELEGATION_FLAGCURLOPT_GSSAPI_DELEGATIONCURLOPT_ACCEPTTIMEOUT_MSCURLOPT_DNS_SERVERSCURLOPT_MAIL_AUTHCURLOPT_SSL_OPTIONSCURLOPT_TCP_KEEPALIVECURLOPT_TCP_KEEPIDLECURLOPT_TCP_KEEPINTVLCURLSSLOPT_ALLOW_BEASTCURL_REDIR_POST_303CURLSSH_AUTH_AGENTCURLMOPT_MAX_HOST_CONNECTIONSCURLMOPT_MAX_PIPELINE_LENGTHCURLOPT_SASL_IRCURLOPT_DNS_INTERFACECURLOPT_DNS_LOCAL_IP4CURLOPT_DNS_LOCAL_IP6CURLOPT_XOAUTH2_BEARERCURL_HTTP_VERSION_2_0CURL_VERSION_HTTP2CURLOPT_LOGIN_OPTIONSCURL_SSLVERSION_TLSv1_0CURL_SSLVERSION_TLSv1_1CURL_SSLVERSION_TLSv1_2CURLOPT_EXPECT_100_TIMEOUT_MSCURLOPT_SSL_ENABLE_ALPNCURLOPT_SSL_ENABLE_NPNCURLHEADER_SEPARATECURLHEADER_UNIFIEDCURLOPT_HEADEROPTCURLOPT_PROXYHEADERCURLAUTH_NEGOTIATECURLOPT_PINNEDPUBLICKEYCURLOPT_UNIX_SOCKET_PATHCURLPROTO_SMBCURLPROTO_SMBSCURLOPT_SSL_VERIFYSTATUSCURLOPT_PATH_AS_ISCURLOPT_SSL_FALSESTARTCURL_HTTP_VERSION_2CURLOPT_PIPEWAITCURLOPT_PROXY_SERVICE_NAMECURLOPT_SERVICE_NAMECURLPIPE_NOTHINGCURLPIPE_HTTP1CURLPIPE_MULTIPLEXCURLSSLOPT_NO_REVOKECURLOPT_DEFAULT_PROTOCOLCURLOPT_STREAM_WEIGHTCURLMOPT_PUSHFUNCTIONCURL_PUSH_OKCURL_PUSH_DENYCURL_HTTP_VERSION_2TLSCURLOPT_TFTP_NO_OPTIONSCURLOPT_CONNECT_TOCURLOPT_TCP_FASTOPENCURLOPT_SAFE_UPLOADagefeaturesssl_version_numberhostssl_versionlibz_versionprotocolsopenssl.cafilecurl.cainfoapplication/octet-streamFile-HandleCould not build curl_slistInvalid filename for key %smimepostnamecURL Share Handlecontent_typehttp_codeheader_sizerequest_sizefiletimessl_verify_resultredirect_counttotal_timenamelookup_timeconnect_timepretransfer_timesize_uploadsize_downloadspeed_downloadspeed_uploaddownload_content_lengthupload_content_lengthstarttransfer_timeredirect_timeredirect_urlprimary_ipcertinfoprimary_portlocal_iplocal_portrequest_headerCannot duplicate cURL handleCharConvDebugGSS-NegotiateIDNIPv6krb4LargefilelibzNTLMWBSPNEGOSSPITLS-SRPGSSAPIKERBEROS5UNIX_SOCKETSPSL7.2.34API20170718,NTScurl_initcurl_copy_handlecurl_versioncurl_setoptcurl_setopt_arraycurl_execcurl_getinfocurl_errorcurl_errnocurl_closecurl_strerrorcurl_multi_strerrorcurl_share_strerrorcurl_resetcurl_escapecurl_unescapecurl_pausecurl_multi_initcurl_multi_add_handlecurl_multi_remove_handlecurl_multi_selectcurl_multi_execcurl_multi_getcontentcurl_multi_info_readcurl_multi_closecurl_multi_errnocurl_multi_setoptcurl_share_initcurl_share_closecurl_share_setoptcurl_share_errnocurl_file_createfilenamemimetypechbitmaskshoptionvalueerrornummhmsgs_in_queuestill_runningtimeoutstroptionsCURLE_FTP_USER_PASSWORD_INCORRECTCURLE_SSL_PINNEDPUBKEYNOTMATCHCURLINFO_CONTENT_LENGTH_DOWNLOADCURLINFO_CONTENT_LENGTH_UPLOADCURLOPT_FTP_CREATE_MISSING_DIRSCURLOPT_FTP_ALTERNATIVE_TO_USERCURLOPT_HTTP_TRANSFER_DECODINGCURLOPT_SSH_HOST_PUBLIC_KEY_MD5CURLGSSAPI_DELEGATION_POLICY_FLAGCURLMOPT_CHUNK_LENGTH_PENALTY_SIZECURLMOPT_CONTENT_LENGTH_PENALTY_SIZECURLMOPT_MAX_TOTAL_CONNECTIONSCURL_HTTP_VERSION_2_PRIOR_KNOWLEDGECurl option contains invalid characters (\0)CURLPROTO_FILE cannot be activated when an open_basedir is setDisabling safe uploads is no longer supportedthe provided file handle is not writableYou must pass either an object or an array with the %s argumentCouldn't get HashTable in CURLOPT_POSTFIELDSCURLOPT_SSL_VERIFYHOST no longer accepts the value 1, value 2 will be used insteadInvalid curl configuration optionArray keys must be CURLOPT constants or equivalent integer valuesAttempt to close cURL handle from a callbackAttempt to reset cURL handle from a callbackCould not extract hash key from certificate infoCURLOPT_STDERR resource has gone away, resetting to stderrCURLOPT_INFILE resource has gone away, resetting to defaultCURLOPT_WRITEHEADER resource has gone away, resetting to defaultCURLOPT_FILE resource has gone away, resetting to defaultCould not call the CURLOPT_HEADERFUNCTIONCannot call the CURLOPT_READFUNCTIONCould not call the CURLOPT_WRITEFUNCTIONCannot call the CURLOPT_FNMATCH_FUNCTIONCannot call the CURLOPT_PROGRESSFUNCTIONCould not initialize a new cURL handlecURL Multi HandlemsgCannot call the CURLMOPT_PUSHFUNCTIONInvalid curl multi configuration option?@@CInvalid curl share configuration option__constructgetFilenamegetMimeTypesetMimeTypegetPostFilenamesetPostFilename__wakeupUnserialization of CURLFile instances is not allowed;8 d,    D % Z4   l  H)<?hH6j<h%48NaLtd  d6Ox( 8 H (X <h Px d x       !,!@(!T8!hH!|X!h!x!!!!!!!0!D!X"lH$\\\^x^_X`a@ xal c c ȁX hP x  X H lHPHX|ء\0Dp(X\Hh(t,|8HȻHX(Ƚ`ؾ8,(xh((x(0x,(TzRx $pPFJ w?:*3$"D @\ p $8L`t(<Pdx L=FGB B(A0A8G 8A0A(B BBBH W8EJ8 A F<T PTEQ0lTFAD DP  AABE zRx P$]hV dV `VHA) F S@ WBEE D(D0J@X 0A(A BBBB zRx @((W`AGG0Y JFH dX`BA A(N0} (A ABBK z (A ABBH C (A ABBG j0 D(Yj[p E HAh|`Y BBB B(D0D8G 8A0A(B BBBD NTBADTs LMBBBAGN$zRx ,;0Lu&FAD D0  AABF zRx 0$LhvfLA A(G0 (A ABBF L(A ABBAzRx 0$U5b4<w[KG i AAH KAAAzRx   +AHJ8wFEA A(D@ (A ABBF zRx @$8wcFBA A(D@ (A ABBD t8lxeFBA A(DP (A ABBD zRx P$?8yFBA A(D@ (A ABBI 48, pzRBD D(G0r (C ABBC 8h z_KD  DAL AAA +S AHJL |+BBB B(A0A8D  8A0A(B BBBA  K D, p}C FBB D(A0D 0A(A BBBH zRx ( 8 @~FAC B ABA  ABK zRx  $ h( P*ACG j DAF H T @\ P`FBE D(A0N] 0A(A BBBK zRx (7 H 4FEE B(A0A8G_ 8A0A(B BBBD $zRx , @` 8FBE A(A0N 0A(A BBBG  H t FBB B(A0A8GH 8A0A(B BBBI R 8 $FBA C(GB (A ABBE zRx (  ` ( \?EKD %DA0 p:FAD D0  AABB  4,hXFAD  ABI PD`HB A(K0f (A BBBE H(A BBBA& 4S0(EAG  AAG L`GK  ABE t ABI B ABK 4 Lp% `I[] H AGHBEB B(A0E8GP| 8A0A(B BBBA LsFBE B(D0D8P 8A0A(B BBBC $zRx ,(\EDD l AAE 8\FBD A(D` (A ABBB zRx `$@`tRBA A(D0 (A ABBI K (A ABBG T(C ABB\0prFAD D@  AABC zRx @$HFBB B(A0A8D` 8A0A(B BBBA zRx `(0\0fo K n B U K H H KA8ȢFBA A(G@@ (A ABBI  4(w[KG _ AAJ KAAA,v@@\FBB A(A0D@ 0A(A BBBG (jbi E HA 8`FEA A(D@ (A ABBF  8  ZFEA A(D@ (A ABBI d 9(\0mEAG A AAH 4tw[KG _ AAJ KAAAW85FBD A(D@ (A ABBG , 7$$6EAD iAA Ljbi E HAp8FEA A(D@ (A ABBF  @BBB A(A0DP& 0A(A BBBF zRx P(NP $dsEEG PEH(pADD@` AAE zRx @ 8BED D(G`n (A ABBF L`t$3EDJ SGA$̭OEL7 AA GNUN@NX!j#s#@y# ##### ####@####\! %%!&&&&&&&&&&'&'&'&*&&'&8&'&F&'&&'&&&&&&N&&N&&&&&&&&&R&&&&&#$-p`e!!--- e!.0. e! .-%%!#Pc!$`c!$@c! $c!,$0b!>$`b!H$b!U$a!`$a!k$P@a!v$б]!$0\!$\!$`a!$`!$P@`!$@[!$-$ _!% _!%^!-%`^!=% ^!S%]!h%0]!y%@]!%@_!%,%@\!%[!%[!%PZ!? L i  x8 X!X!o` k! - oooooi!8888899 909@9P9`9p999999999:: :0:@:P:`:p:::::::::;; ;0;@;P;`;p;;;;;;;;;<< <0<@<P<`<p<<<<<<<<<== =0=@=P=`=p=========>> >0>@>P>`>p>>>>>>>>>?? ?0?@?P?`?p????????3e!R pP##GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1x8 GA$3p11130GGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY0GmGA+GLIBCXX_ASSERTIONS GA*GOW*0G1GGA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realignGA*GA!GA*GA* N / MH Me 0G L M M M M NE Nm N N N N N3 N] Nz N N N NB N} N N N N! NO N{ N N O O OL O} O O !O O# !OQ 1O} 0O 1O AO @O AOH QOs PO QO aO `O 0G4 1G_ 0G} aO qO pO  qO,  OT  Oo  O  O  O  O  OP  Os  O  O  O  O+  OY  Oz  O  O  O  O  OE  Oc  O  O  O  O  P+  PI  Pz  P  P  P !P? Pk !P 1P 0P 1P( APX @P{ AP QP PP QP lP? `P R lPn RX!P R  P6@Z!    / O 7m 7 F 1G F \ P  \- lI ` X l  pH 8  `  t9 M DGh t  `  s aG s. J tG`    @  P  G  &) wI@ &e C I5 C ϱ I+ ϱ Ӳ6 IP Ӳo C J C  J  8 3JO i W W w LJ+ w  +3 wJR r  J  ~ Jh ~= ] *p     K  6 -KH b 8z LK 8 J jK J  K& @ X y O O  K4  > b  K4    ' L=c!0O`c!0hc!0}c!`b!H`b!0b!Ha!0a!0@a!0 ]!0!\!0=\!0Ya!0l`!H@`!H@[!H-_!H _!H^!H`^!H2 ^!0P]!Hm]!0@]!0_!`,@\!0[!` [!0 Z!`5  F  [  Mp  M  L  +M  M  M  M ! M'! M! q! %! ! I! I" <" P]" " s" s" L" s # ,# U# ||# 8L# |# q# NL$ q<$ _$ aL|$ $ $ wL$ % }+% LL% }t% %% L% %% & L& A& d& & *& L& *& 3' L2' 3W' z' L9' ' ' M' M' +M( M$( M=( MZ( Mp( M( ( ( ( ) +M0) U) x) >M7) ) ) * z#* uM?* zf* * M* * * M* M+ M,+ MN+ Mk+ M+ M+ M+ + m+  , M, mG, m, , , , - (- ML- t- - - - . F. c. . . . /. /+/ OU/ Oy/ / / / d! `e!`/ e!0 0 M0 N!0 @N70p!F0X!m0 Ny0X!0J0 s0 50 I0 O1 r1 ,1 `;1 L1 `1 f1 RW8v1 Pe1 j1p!1p!1 w1 C 1 &1 j 2 P2 012 mE2 [2 x2 X2 2 02 ?2X!2 2 63 \)3 б;3 P3 i3 pP=v3 0w3 P:3e! 3p!3 c3 3i!3 4 4 ~94p!A4 U4 d4 0|4 4h.4p!4k!4 p4 @Z4 @ 5 "5 j75 P3?2 x8L5 8`- x8 8 ? 0G h.3JX!X!X!i!k!p!p!pai5z55555555 6#606B6\6s666666667707C7U7p!\7p777T377778_2828J8l8}8888888 9!999P13Q9f9y990999 99::1:C:e:y:4:::::::;;*p!.;=;H;^;o;; ;;;;;p!;;<<#<4<D<a<552u<<<<<<<===+=<=\=p====== h4==>p!'>9>T>k>">.annobin_interface.c.annobin_interface.c_end.annobin_interface.c.hot.annobin_interface.c_end.hot.annobin_interface.c.unlikely.annobin_interface.c_end.unlikely.annobin_interface.c.startup.annobin_interface.c_end.startup.annobin_interface.c.exit.annobin_interface.c_end.exit.annobin__curl_easy_setopt_err_long.start.annobin__curl_easy_setopt_err_long.end_curl_easy_setopt_err_long.annobin__curl_easy_setopt_err_curl_off_t.start.annobin__curl_easy_setopt_err_curl_off_t.end_curl_easy_setopt_err_curl_off_t.annobin__curl_easy_setopt_err_string.start.annobin__curl_easy_setopt_err_string.end_curl_easy_setopt_err_string.annobin__curl_easy_setopt_err_write_callback.start.annobin__curl_easy_setopt_err_write_callback.end_curl_easy_setopt_err_write_callback.annobin__curl_easy_setopt_err_resolver_start_callback.start.annobin__curl_easy_setopt_err_resolver_start_callback.end_curl_easy_setopt_err_resolver_start_callback.annobin__curl_easy_setopt_err_read_cb.start.annobin__curl_easy_setopt_err_read_cb.end_curl_easy_setopt_err_read_cb.annobin__curl_easy_setopt_err_ioctl_cb.start.annobin__curl_easy_setopt_err_ioctl_cb.end_curl_easy_setopt_err_ioctl_cb.annobin__curl_easy_setopt_err_sockopt_cb.start.annobin__curl_easy_setopt_err_sockopt_cb.end_curl_easy_setopt_err_sockopt_cb.annobin__curl_easy_setopt_err_opensocket_cb.start.annobin__curl_easy_setopt_err_opensocket_cb.end_curl_easy_setopt_err_opensocket_cb.annobin__curl_easy_setopt_err_progress_cb.start.annobin__curl_easy_setopt_err_progress_cb.end_curl_easy_setopt_err_progress_cb.annobin__curl_easy_setopt_err_debug_cb.start.annobin__curl_easy_setopt_err_debug_cb.end_curl_easy_setopt_err_debug_cb.annobin__curl_easy_setopt_err_ssl_ctx_cb.start.annobin__curl_easy_setopt_err_ssl_ctx_cb.end_curl_easy_setopt_err_ssl_ctx_cb.annobin__curl_easy_setopt_err_conv_cb.start.annobin__curl_easy_setopt_err_conv_cb.end_curl_easy_setopt_err_conv_cb.annobin__curl_easy_setopt_err_seek_cb.start.annobin__curl_easy_setopt_err_seek_cb.end_curl_easy_setopt_err_seek_cb.annobin__curl_easy_setopt_err_cb_data.start.annobin__curl_easy_setopt_err_cb_data.end_curl_easy_setopt_err_cb_data.annobin__curl_easy_setopt_err_error_buffer.start.annobin__curl_easy_setopt_err_error_buffer.end_curl_easy_setopt_err_error_buffer.annobin__curl_easy_setopt_err_FILE.start.annobin__curl_easy_setopt_err_FILE.end_curl_easy_setopt_err_FILE.annobin__curl_easy_setopt_err_postfields.start.annobin__curl_easy_setopt_err_postfields.end_curl_easy_setopt_err_postfields.annobin__curl_easy_setopt_err_curl_httpost.start.annobin__curl_easy_setopt_err_curl_httpost.end_curl_easy_setopt_err_curl_httpost.annobin__curl_easy_setopt_err_curl_mimepost.start.annobin__curl_easy_setopt_err_curl_mimepost.end_curl_easy_setopt_err_curl_mimepost.annobin__curl_easy_setopt_err_curl_slist.start.annobin__curl_easy_setopt_err_curl_slist.end_curl_easy_setopt_err_curl_slist.annobin__curl_easy_setopt_err_CURLSH.start.annobin__curl_easy_setopt_err_CURLSH.end_curl_easy_setopt_err_CURLSH.annobin__curl_easy_getinfo_err_string.start.annobin__curl_easy_getinfo_err_string.end_curl_easy_getinfo_err_string.annobin__curl_easy_getinfo_err_long.start.annobin__curl_easy_getinfo_err_long.end_curl_easy_getinfo_err_long.annobin__curl_easy_getinfo_err_double.start.annobin__curl_easy_getinfo_err_double.end_curl_easy_getinfo_err_double.annobin__curl_easy_getinfo_err_curl_slist.start.annobin__curl_easy_getinfo_err_curl_slist.end_curl_easy_getinfo_err_curl_slist.annobin__curl_easy_getinfo_err_curl_tlssesssioninfo.start.annobin__curl_easy_getinfo_err_curl_tlssesssioninfo.end_curl_easy_getinfo_err_curl_tlssesssioninfo.annobin__curl_easy_getinfo_err_curl_certinfo.start.annobin__curl_easy_getinfo_err_curl_certinfo.end_curl_easy_getinfo_err_curl_certinfo.annobin__curl_easy_getinfo_err_curl_socket.start.annobin__curl_easy_getinfo_err_curl_socket.end_curl_easy_getinfo_err_curl_socket.annobin__curl_easy_getinfo_err_curl_off_t.start.annobin__curl_easy_getinfo_err_curl_off_t.end_curl_easy_getinfo_err_curl_off_t.annobin_curl_write_nothing.start.annobin_curl_write_nothing.endcurl_write_nothing.annobin_zm_info_curl.start.annobin_zm_info_curl.endfeats.19303.annobin_zm_startup_curl.start.annobin_zm_startup_curl.end_php_curl_close.annobin_curl_free_string.start.annobin_curl_free_string.endcurl_free_string.annobin_zm_shutdown_curl.start.annobin_zm_shutdown_curl.end.annobin_zif_curl_version.start.annobin_zif_curl_version.endzif_curl_version.cold.3.annobin_curl_free_slist.start.annobin_curl_free_slist.endcurl_free_slist.annobin_curl_free_post.start.annobin_curl_free_post.endcurl_free_post.annobin__php_curl_set_default_options.start.annobin__php_curl_set_default_options.end_php_curl_set_default_optionscurl_writecurl_readcurl_write_header.annobin_php_curl_option_str.start.annobin_php_curl_option_str.endphp_curl_option_strphp_curl_option_str.cold.4.annobin_php_curl_option_url.start.annobin_php_curl_option_url.endphp_curl_option_url.annobin_zif_curl_error.start.annobin_zif_curl_error.endzif_curl_error.cold.5.annobin_zif_curl_errno.start.annobin_zif_curl_errno.endzif_curl_errno.cold.6.annobin__php_curl_setopt.start.annobin__php_curl_setopt.end_php_curl_setoptcurl_fnmatchcurl_progresscurl_debug_php_curl_setopt.cold.7.annobin_zif_curl_setopt.start.annobin_zif_curl_setopt.endzif_curl_setopt.cold.8.annobin_zif_curl_setopt_array.start.annobin_zif_curl_setopt_array.endzif_curl_setopt_array.cold.9.annobin_zif_curl_close.start.annobin_zif_curl_close.endzif_curl_close.cold.10.annobin_zif_curl_strerror.start.annobin_zif_curl_strerror.endzif_curl_strerror.cold.11.annobin_zif_curl_escape.start.annobin_zif_curl_escape.endzif_curl_escape.cold.12.annobin_zif_curl_unescape.start.annobin_zif_curl_unescape.endzif_curl_unescape.cold.13.annobin_zif_curl_pause.start.annobin_zif_curl_pause.endzif_curl_pause.cold.14.annobin_curl_debug.start.annobin_curl_debug.end.annobin_zif_curl_reset.start.annobin_zif_curl_reset.endzif_curl_reset.cold.15.annobin_create_certinfo.part.2.start.annobin_create_certinfo.part.2.endcreate_certinfo.part.2create_certinfo.part.2.cold.16.annobin_zif_curl_getinfo.start.annobin_zif_curl_getinfo.endzif_curl_getinfo.cold.17.annobin__php_curl_verify_handlers.start.annobin__php_curl_verify_handlers.end_php_curl_verify_handlers.cold.18.annobin__php_curl_close_ex.start.annobin__php_curl_close_ex.end_php_curl_close_ex.annobin__php_curl_close.start.annobin__php_curl_close.end.annobin_curl_write_header.start.annobin_curl_write_header.endcurl_write_header.cold.19.annobin_curl_read.start.annobin_curl_read.endcurl_read.cold.20.annobin_curl_write.start.annobin_curl_write.endcurl_write.cold.21.annobin_curl_fnmatch.start.annobin_curl_fnmatch.endcurl_fnmatch.cold.22.annobin_curl_progress.start.annobin_curl_progress.endcurl_progress.cold.23.annobin_get_module.start.annobin_get_module.end.annobin_alloc_curl_handle.start.annobin_alloc_curl_handle.end.annobin_zif_curl_init.start.annobin_zif_curl_init.endzif_curl_init.cold.24.annobin__php_setup_easy_copy_handlers.start.annobin__php_setup_easy_copy_handlers.end.annobin_zif_curl_copy_handle.start.annobin_zif_curl_copy_handle.endzif_curl_copy_handle.cold.25.annobin__php_curl_cleanup_handle.start.annobin__php_curl_cleanup_handle.end.annobin_zif_curl_exec.start.annobin_zif_curl_exec.endzif_curl_exec.cold.26arginfo_curl_initarginfo_curl_copy_handlearginfo_curl_versionarginfo_curl_setoptarginfo_curl_setopt_arrayarginfo_curl_execarginfo_curl_getinfoarginfo_curl_errorarginfo_curl_errnoarginfo_curl_closearginfo_curl_strerrorarginfo_curl_multi_strerrorarginfo_curl_share_strerrorarginfo_curl_resetarginfo_curl_escapearginfo_curl_unescapearginfo_curl_pausearginfo_curl_multi_initarginfo_curl_multi_add_handlearginfo_curl_multi_remove_handlearginfo_curl_multi_selectarginfo_curl_multi_execarginfo_curl_multi_getcontentarginfo_curl_multi_info_readarginfo_curl_multi_closearginfo_curl_multi_errnoarginfo_curl_multi_setoptarginfo_curl_share_initarginfo_curl_share_closearginfo_curl_share_setoptarginfo_curl_share_errnoarginfo_curlfile_create.annobin_multi.c.annobin_multi.c_end.annobin_multi.c.hot.annobin_multi.c_end.hot.annobin_multi.c.unlikely.annobin_multi.c_end.unlikely.annobin_multi.c.startup.annobin_multi.c_end.startup.annobin_multi.c.exit.annobin_multi.c_end.exit.annobin_curl_compare_resources.start.annobin_curl_compare_resources.endcurl_compare_resources.annobin__php_curl_multi_cleanup_list.start.annobin__php_curl_multi_cleanup_list.end.annobin__php_curl_multi_find_easy_handle.start.annobin__php_curl_multi_find_easy_handle.end_php_curl_multi_find_easy_handle.annobin__php_server_push_callback.start.annobin__php_server_push_callback.end_php_server_push_callback_php_server_push_callback.cold.1.annobin_zif_curl_multi_init.start.annobin_zif_curl_multi_init.end.annobin_zif_curl_multi_add_handle.start.annobin_zif_curl_multi_add_handle.endzif_curl_multi_add_handle.cold.2.annobin_zif_curl_multi_remove_handle.start.annobin_zif_curl_multi_remove_handle.endzif_curl_multi_remove_handle.cold.3.annobin_zif_curl_multi_select.start.annobin_zif_curl_multi_select.endzif_curl_multi_select.cold.4.annobin_zif_curl_multi_exec.start.annobin_zif_curl_multi_exec.endzif_curl_multi_exec.cold.5.annobin_zif_curl_multi_getcontent.start.annobin_zif_curl_multi_getcontent.endzif_curl_multi_getcontent.cold.6.annobin_zif_curl_multi_info_read.start.annobin_zif_curl_multi_info_read.endzif_curl_multi_info_read.cold.7.annobin_zif_curl_multi_close.start.annobin_zif_curl_multi_close.endzif_curl_multi_close.cold.8.annobin__php_curl_multi_close.start.annobin__php_curl_multi_close.end.annobin_zif_curl_multi_errno.start.annobin_zif_curl_multi_errno.endzif_curl_multi_errno.cold.9.annobin_zif_curl_multi_strerror.start.annobin_zif_curl_multi_strerror.endzif_curl_multi_strerror.cold.10.annobin_zif_curl_multi_setopt.start.annobin_zif_curl_multi_setopt.endzif_curl_multi_setopt.cold.11.annobin_share.c.annobin_share.c_end.annobin_share.c.hot.annobin_share.c_end.hot.annobin_share.c.unlikely.annobin_share.c_end.unlikely.annobin_share.c.startup.annobin_share.c_end.startup.annobin_share.c.exit.annobin_share.c_end.exit.annobin_zif_curl_share_init.start.annobin_zif_curl_share_init.end.annobin_zif_curl_share_close.start.annobin_zif_curl_share_close.endzif_curl_share_close.cold.1.annobin_zif_curl_share_setopt.start.annobin_zif_curl_share_setopt.endzif_curl_share_setopt.cold.2.annobin__php_curl_share_close.start.annobin__php_curl_share_close.end.annobin_zif_curl_share_errno.start.annobin_zif_curl_share_errno.endzif_curl_share_errno.cold.3.annobin_zif_curl_share_strerror.start.annobin_zif_curl_share_strerror.endzif_curl_share_strerror.cold.4.annobin_curl_file.c.annobin_curl_file.c_end.annobin_curl_file.c.hot.annobin_curl_file.c_end.hot.annobin_curl_file.c.unlikely.annobin_curl_file.c_end.unlikely.annobin_curl_file.c.startup.annobin_curl_file.c_end.startup.annobin_curl_file.c.exit.annobin_curl_file.c_end.exit.annobin_curlfile_ctor.start.annobin_curlfile_ctor.endcurlfile_ctorcurlfile_ctor.cold.2.annobin_zim_CURLFile___construct.start.annobin_zim_CURLFile___construct.end.annobin_zim_CURLFile___wakeup.start.annobin_zim_CURLFile___wakeup.end.annobin_curlfile_set_property.isra.0.start.annobin_curlfile_set_property.isra.0.endcurlfile_set_property.isra.0curlfile_set_property.isra.0.cold.3.annobin_zim_CURLFile_setMimeType.start.annobin_zim_CURLFile_setMimeType.end.annobin_zim_CURLFile_setPostFilename.start.annobin_zim_CURLFile_setPostFilename.end.annobin_curlfile_get_property.isra.1.start.annobin_curlfile_get_property.isra.1.endcurlfile_get_property.isra.1.annobin_zim_CURLFile_getFilename.start.annobin_zim_CURLFile_getFilename.end.annobin_zim_CURLFile_getMimeType.start.annobin_zim_CURLFile_getMimeType.end.annobin_zim_CURLFile_getPostFilename.start.annobin_zim_CURLFile_getPostFilename.end.annobin_zif_curl_file_create.start.annobin_zif_curl_file_create.end.annobin_curlfile_register_class.start.annobin_curlfile_register_class.endcurlfile_funcsarginfo_curlfile_namederegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zim_CURLFile___wakeupzif_curl_share_setopt_php_curl_multi_cleanup_listcurlfile_register_classzif_curl_multi_selectzif_curl_errorzif_curl_resetzm_shutdown_curlzif_curl_multi_init_finizm_startup_curlzif_curl_unescapezif_curl_multi_errnole_curl_share_handlele_curl_multi_handlezif_curl_share_closezif_curl_getinfozif_curl_setoptzif_curl_errnozif_curl_closezif_curl_setopt_arrayzif_curl_share_init_php_curl_multi_closezif_curl_multi_remove_handle_php_setup_easy_copy_handlers_php_curl_cleanup_handlezim_CURLFile_getPostFilenamealloc_curl_handle__dso_handlezif_curl_exec_php_curl_share_closezif_curl_multi_add_handlezif_curl_strerrorzif_curl_copy_handlezif_curl_multi_info_readzm_info_curlzif_curl_multi_closezif_curl_initcurl_functionscurl_module_entryzif_curl_escapezif_curl_multi_getcontent_DYNAMICzim_CURLFile_getFilenamezim_CURLFile_setMimeType_php_curl_verify_handlersle_curlzif_curl_multi_execzif_curl_pausezif_curl_multi_strerrorzim_CURLFile_getMimeType__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_zim_CURLFile___constructzif_curl_multi_setoptzif_curl_versionzif_curl_share_strerrorzif_curl_share_errnozif_curl_file_createzim_CURLFile_setPostFilenamecurl_easy_escapecurl_freefree@@GLIBC_2.2.5_php_stream_castadd_assoc_zval_ex_zval_ptr_dtorstrncpy@@GLIBC_2.2.5zend_parse_parameters_ITM_deregisterTMCloneTablecurl_global_cleanupzend_is_truecurl_easy_getinfozend_register_ini_entriesphp_check_open_basedirzend_list_closefread@@GLIBC_2.2.5curl_easy_perform_zval_get_string_func_emalloc_56zend_llist_get_next_excurl_version_infocurl_easy_unescapezend_list_deletezend_new_interned_stringsmart_str_erealloccurl_slist_append_edataadd_next_index_zvalzend_llist_del_elementcurl_formfreestrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4_zval_dtor_funczend_unregister_ini_entrieszend_fetch_resourcephp_info_print_table_rowadd_assoc_double_exzend_parse_arg_str_slowzend_wrong_parameters_count_errorphp_output_writezend_read_property_zend_hash_initadd_assoc_string_exzend_register_internal_classcurl_formadd_zend_hash_index_updatezend_register_resourcememchr@@GLIBC_2.2.5zend_llist_get_first_exzend_fetch_resource2_exzend_fcall_info_initcurl_multi_performzend_register_long_constantzend_fcall_info_argncurl_share_cleanupempty_fcall_info_cache__gmon_start__php_error_docref0curl_easy_resetphp_info_print_table_endmemcpy@@GLIBC_2.14zend_hash_destroyzend_register_list_destructors_excurl_easy_duphandlezend_call_functionphp_file_le_streamzend_long_to_str__zend_malloccurl_multi_waitfflush@@GLIBC_2.2.5_php_stream_flush_zval_get_long_funccurl_global_initzend_throw_exceptioncurl_easy_init_emalloc_8curl_pushheader_bynumadd_assoc_str_exzend_parse_arg_long_slowget_module_ecalloc_zend_hash_next_index_insertcurl_easy_strerrorzend_parse_arg_double_slow__bss_start_array_initcurl_easy_pause_efreecore_globalsempty_fcall_infozend_llist_initzend_declare_property_stringinstanceof_function_object_init_excurl_slist_free_allcurl_multi_cleanupzend_llist_cleanadd_next_index_stringzend_fetch_resource_exzend_update_property_string_estrndup_emalloczend_empty_stringcurl_easy_setoptzend_wrong_parameter_type_errorzend_unset_propertyphp_file_le_pstreamfwrite@@GLIBC_2.2.5_zval_copy_ctor_funczend_ini_string_exadd_assoc_long_ex_ITM_registerTMCloneTablephp_sprintfphp_info_print_table_startcurl_CURLFile_classcurl_easy_cleanupzend_fcall_info_args_clearzend_llist_add_element__cxa_finalize@@GLIBC_2.2.5stderr@@GLIBC_2.2.5.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``88 H @ HoUo@dnB-- xx8x8s88P~??@0G0G x3h.h.33JJ X!XX!XX!X  i!ik!kp!p p!p0p- papu8 >[#PK!0U~00modules/imap.sonuȯELF>0l@@8 @X=X= DD!D!+, gg!g!888$$8=8=8= Std8=8=8= Ptd,,QtdRtdDD!D!++GNUDTU DIǧP HUY"FML3ku pqX|}4kSIH`f-8nBEWa hTC u K FW ~9  lF"gX m<v `#7 :` 2+ I W T od8J Ml  n  I3b%Zf kXz>") rU " bYF-+  u nW + aM 7 , ~  /     k    p!Rq!  9  E    p {  Z   p!   Vs  0   0 #  @sN  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizeadd_assoc_long_exstrlenadd_assoc_zval_ex_array_init__stack_chk_failadd_assoc_stringl_exzend_register_ini_entriesunixdrivermail_linkmhdrivermmdfdrivernewsdriverphiledriverimapdrivernntpdriverpop3drivermbxdrivertenexdrivermtxdriverdummydriverauth_logauth_linkauth_md5auth_gssauth_plassl_onceonlyinitzend_register_long_constantmail_parametersfile_globalszend_register_list_destructors_ex_efreemail_close_fullphp_info_print_table_startphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entrieszend_parse_parameterszend_fetch_resourcephp_check_open_basedirmail_openzend_list_deletephp_error_docref0memcpy_emalloc_192pcre_get_compiled_regex_cachephp_pcre_match_implmail_stringmail_append_fullmail_pingimap_getquota_zval_dtor_funcimap_getquotarootimap_setquotaimap_setaclimap_getaclzend_errormail_expunge_fullzend_list_closeap_php_snprintfmail_eltmail_fetch_structuremail_datemail_fetchfrommail_fetchsubjectadd_next_index_stringfind_rightmost_bitphp_strlcatmail_msgnomail_fetch_textzend_empty_stringmail_copy_fullmail_createmail_renamemail_delete_safe_emallocmail_scanmail_free_stringlistrfc822_date_object_initadd_property_string_exadd_property_long_exmail_flag_convert_to_stringrfc822_output_address_listrfc822_output_flushsmart_str_erealloc_zend_hash_str_updatemail_subscribemail_unsubscribemail_fetch_bodymail_fetch_mime_php_stream_open_wrapper_ex_php_stream_freephp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_exrfc822_base64fs_giverfc822_qprintrfc822_8bitrfc822_binarymail_newaddrcpystrcpytxtutf8_mime2text__ctype_b_loc_emalloc_8mail_newsearchpgmmail_newsortpgmmail_sortadd_next_index_long_estrndupmail_criteriamail_free_searchpgmmail_fetch_headermail_newenvelopezend_hash_str_findrfc822_parse_adrlistmail_newbodyconvert_to_longmail_newbody_parameterfs_getmail_newbody_partrfc822_encode_body_7bit_emalloc_largerfc822_headermail_free_body_parameterzend_spprintfmail_free_bodymail_free_enveloperfc822_write_body_header_estrdupmail_search_fullmemchr_zend_hash_next_index_insertmail_threadmail_free_threadnodezend_hash_index_find_emalloc_16zend_register_resourcemail_gcmail_listmail_lsub_php_stream_write__zend_mallocutf8_from_mutf7utf8_to_mutf7mail_uidmail_statusadd_property_str_exmail_longdaterfc822_parse_msg_fullmail_bodystrcasecmpmail_sequencemail_uid_sequenceget_moduleexecutor_globalszend_ini_string_expopen__fprintf_chkpclosemm_searchedmm_existsmm_expungedmm_flagsmm_notifymail_newstringlistmm_listmm_lsubmm_statusmm_logmm_dlogmm_loginphp_strlcpymm_criticalmm_nocriticalmm_diskerrormm_fatalOnUpdateBoolzend_ini_boolean_displayer_cblibcrypto.so.1.1libssl.so.1.1libc-client.so.2007libcrypt.so.1libpam.so.0libgssapi_krb5.so.2libkrb5.so.3libk5crypto.so.3libcom_err.so.2libc.so.6_edata__bss_startimap.soGLIBC_2.3.4GLIBC_2.4GLIBC_2.3GLIBC_2.14GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64 ti  ii  ii   ui  D!qD!qE!E! E!C`E!LhE!ppE!f!E!VE!E! f!E!bE!E!a!E!mE!E!@e!E!zE! E!d!F!F!ЌF!a! F!(F!P0F! \!@F!HF!@PF![!`F!hF!pF! W!F!F!F!V!F!F!F! a!F!F!F!Q!F!F!`F!`Y!G!G!G!`Y! G!-(G!`0G!X!@G!;HG!PG!`S!`G!LhG!pG!Y!G!`G!0G! b!G!hG! G!b!G!uG!PG! ]!G!G!@G!\!H!H!H!]! H!(H!0H!]!@H!HH!ВPH!`!`H!hH!pH! `!H!H!pH! Q!H!H!H!_!H!H!0H!`_!H!H!H!_!I!I! I!Z! I! (I!0I!@Z!@I!1HI!PI!e!`I!=hI!ppI!e!I!GI!I!X!I!SI!pI!@X!I!_I!PI!X!I!iI!0I!W!J!uJ!J!V! J!(J!0J!@R!@J!HJ! PJ!W!`J!hJ! pJ!U!J!J!J!T!J!J!`J!S!J!J!0J!S!J!J!pJ!R!K!K!K!^! K!(K!0K!`[!@K!HK!0PK!Q!`K! hK!pK!K!K!K!K!#K! K!K!3K! K!O!K!?K!PK!@V!L!PL!L!V! L!a(L!0L!U!@L!tHL!PL!U!`L!hL!pL!O!L!L!0L!@O!L!L!~L!N!L!L!L!`d!L!L!L!d!M!M!M!c! M!(M!0M! c!@M!HM!PPM!b!`M!hM!pM!`P!M! M!PM! \!M!M!M!^!M!(M!M!@^!M!:M!M!]!N!KN!N!`[! N!_(N!0N![!@N!rHN!PN! a!`N!hN!pN!]!N!N!N!_!N!N!0N!`_!N!O!XO!pO!O!O!P!(P!@P!xP!%P!P!P!P!P!Q!8Q!PQ!Q!Q!Q!Q!R!(R!XR!pR!R!R!R!S!0S!xS!S!S!S!S!T! T!8T!PT!T!T!T!.T!U!0U!HU!.`U!U!3U!3V!6XV!6V!:V!LV![8W!PW!chW!W!W!GX!GXX!GX!GX!X!hY! Y!8Y!xY!Y!Y!Y!Y!Z!(Z!XZ!pZ!Z!Z![!0[!mH[!qx[![!m[!q[![![8\!P\!h\!y\!\![\!\!]!8]!P]!h]!]!]!]!m^!q ^!X^!p^!m^!q^!^!m^!q_!0_!x_!_!_!_!_!8`!P`!h`!`!`!`!`!a!8a!Pa!ha!a!a!a!8b!Pb!b!b!b!8c!Pc!hc!c!c!c!c!d!0d!xd!d!d!e!Xe!e!e!e!e!e!8f!Pf!hf!f!f!f!f!g!g!0g!`g!(xg!p!g!Ap! E! p!(p!`E!0p!pt@p!rHp! Pp!P~Xp!hp!p!pp!rp!hg!Vg!z0o!8o!@o!Ho! Po!Xo!`o!ho!4po!6xo!8o!?o!Eo!No!eo!oo!to!~o!o!o!o!o!o!o!j!j!j!j!j!j! j! j! j! j!j!j!j!k!k!k!k! k!(k!0k!8k!@k!Hk!Pk!Xk!`k! hk!!pk!"xk!#k!$k!%k!&k!'k!(k!)k!*k!+k!,k!-k!.k!/k!0k!1k!2k!3l!5l!7l!9l!: l!;(l!<0l!=8l!>@l!@Hl!APl!BXl!C`l!Dhl!Fpl!Gxl!Hl!Il!Jl!Kl!Ll!Ml!Ol!Pl!Ql!Rl!Sl!Tl!Ul!Wl!Xl!Yl!Zm![m!\m!]m!^ m!_(m!`0m!a8m!b@m!cHm!dPm!fXm!g`m!hhm!ipm!jxm!km!lm!mm!nm!pm!qm!rm!sm!um!vm!wm!xm!ym!{m!|m!}m!n!n!n!n! n!(n!0n!8n!@n!Hn!Pn!Xn!`n!hn!pn!xn!n!n!n!n!n!n!n!n!n!n!n!n!n!n!n!n!o!o!o!o! o!(o!HH1!HtH5!%!hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhh%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!DHɮ11{HD$ 8H11XHt$F t H*tHt$FH>H11Ht$F t H*tHt$FH>Y1H5C H*H;&H:11E%H11{E$H H11QAD$9H?HH11AD$]:H H&AMHh11HD$@FHH11EIHJH11EKH+1Hخ1\HD$ @)Y1Hz16HD$ @YH11CkgH11hHۮ11KiHD$H1HH1H=!H=!H!H!AD$9iH11aCHjHF11@mH11&mH11 H1RmH11CoH11C&yHH11CxH11rAD$H11OEdHH6H11AFH11D$D$鎓H11HT$Ht$H<$ĔH^11C Hɣ11CH=a HZ H9tHn Ht H=1 H5* H)HHH?HHtHM HtfD= u+UH= Ht H=. Id ]wHHGHGHGHG HG(HG0HG8HG@HGHHGPHGXHG`HGhGpHLJHLJHLJ@HI 1H4 H AWAVAUATUSH(dH%(HD$1H L HHHL5L-RDHKLHHKLHL;LHLLHH[HtS1HiH3H=:uHKLLHKLLbfHD$dH3%(uH([]A\A]A^A_ff.HtgAUATUSHHf.LcLH+IHMLHH=V HH[HuH[]A\A]f.ff.@UH= SHH= H= H= H= H= H= H= H= H= H= H=) tH=} hH= H=- H= H= Aع1ҾH=q11hH- 1-HUHU1/HU11HU13AعH=AعH=gAعH=IAعH=ܖ+AعH=Ж Aع H=Aع H=Aع H=Aع H=Aع H=twAع@ H=cYAع H=Q;Aع H=>Aع H=*AعH=AعH=AعH=Aع H=ӕAع H=iAعH=KAع H=-AعH=AعH=qAعH=ZAعH=DAعH=-Aع H=yAعH=[Aع H==Aع H=ߔAع H=͔Aع H=Aع H=AعH=AعH=AعH=lkAع H=_MAع H=O/Aع H==Aع H=-Aع H=Aع@H=1AعH=Aع H=~AعH=`Aع H=̓BAعH=$AعH=AعH=1AعH=zAع H=eAع H=UAعH=CsAع H=5UAع H=!7Aع H= Aع H=Aع H=1AعH=ԒAعH=Aع H=Aع H=hAعH=JAعH=u,Aع H=`Aع H=NAع H=<= t)H31H=7" H1[]117r1Ҿ?1dfSH_Hs@ tEH= HtH H= HtH H[|@H;ff.SHHtH5s1HvH5w1HW1H5bu0H[SHH5H ,dH%(HD$1HL$HT$HD$tHT$Ht2HxHD$HHvNCHD$dH3%(uRH [ÐHD$HHwHj1Hc41CH뺐H 91Hc4CSHH55H,dH%(HD$1Ht/H$ H5H84Ht/HH@8CHHD$dH3%(uH[CRfSHH5H,dH%(HD$1H2t/H$g H5oH8Ht/HH@@CHHD$dH3%(uH[CfATIH5YUSH0,dH%(HD$(1HL$HT$HD$LL$ LD$HD$ |HD$ H5H8HHHl$HtH%t HHCHT$ HHD$x{HptH4u`HD$HpH;HHHt"AD$HD$(dH3%(u_H0[]A\HD$H8HM11AD$D1DHD$x{HpeuWAUATUHSH,H Hu vfDHHBHuL*LHx IHyLLHHH{HHCLc~BD#H]EH[]A\A]fEH[]A\A]fD1H5TMff.@ATUHH5&SHĀ,dH%(HD$x1HL$HT$HHD$(HD$0HD$(P1LL$8LD$( ZYH|$ foH[+-][0-9HHCfoHHC(foHCC8foHCCHfoHCXfoǃ]{4}Chfoƃ/CxfoƃICMuHߨHt$ HE1E1HLHVjHjjH H}HD$. H56H8kHHH Ht$Ld$0LHD$pHHVHL$ HT$(MH;HAHHEHBHHEHD$HpHt3EHD$xdH3%(uCH[]A\u Hߨu%pE[fD@SHH5UH,dH%(HD$1Ht5H$ H5H8THt/H8HCHD$dH3%(uH[fCrfSH0,Ht$HL$ HT$H5dH%(HD$(1ItgHD$} H5H8HHtbH|$1v1HD$HSH HD$ H;Hp&HHD$(dH3%(uH0[HD$@ff.fSH0,Ht$HL$ HT$H5<dH%(HD$(1itgHD$ H5H8HHtbH|$11HD$HsH$ HD$ H;HpHHD$(dH3%(uH0[HD$@ff.fSHH5H@,dH%(HD$81HL$HT$LD$tcHD$ H5‡H8HtbHT$H HD$0HL$ HL$HT$(H8HT$ Hq}HCHD$8dH3%(uH@[CfSHH5ćH0,dH%(HD$(1HL$HT$LL$ LD$tQHD$ H5H8"HtMHt$ H8HNHt$HVHt$HHCHD$(dH3%(uH0[DC"fUSHH5ކH(,dH%(HD$1HL$HT$tlHD$. H56H8kHHtc1H)1H+H oHD$H}Hp}HH HD$dH3%(uH([]fCRfSHH5H,dH%(HD$1H2t1H$g H5oH8Ht/H8113CHD$dH3%(uH[fDCfUHH5ŅSH(_,dH%(HD$1HL$HT$HD$t_HD$ H5˄H8Ht[u'HT$HtHƀHEHPHD$H8BEHD$dH3%(uH([]@EfAWL=AVIAUATIUHSHHM,$LH1LHnHMHLH|1LHHH}I$HHHI $HL$HL$HLH,H}HLLJ1LHWH߾1H}tRI$HLhM,$LHLHHm@H1HLHfDHHHL[1]HA\A]A^A_fAWAVAUATUSHH,Ht$HT$ H5ۃdH%(H$81oHD$  H5H8IHH|$1I}H8PHl$0AAHEHD$HE HD$HD$(H$fLHI}11ILeA @tЃ<RD$0H|$A ȃ<5 D$1Ѓ<ڃFD$2Ѓ<߃AD$3Ѓ< ܃DHfD$4ȃXD$5I1(H|$L; LH}ft$FIuH H!%tDHJHDѹ Hf IHD$(HHH! tIu€DHCHD؉LIHH(A$I!%tHDIT$LD@II)INL)H<H,1H|$HEgMI}L;g8H$8dH3%(HH[]A\A]A^A_@HD$@f.{fBH<$I]HHtX8H|$(u H5HH5]HH|$(u ff.fSHH5<H ,dH%(HD$1HL$HT$t6HD$ H5H8LHt7Ht$H8CHHD$dH3%(uH [f.CbfAUATUHH5SH8_,dH%(HD$(1HL$HT$HD$HD$ LD$HD$Ht HHD$7 H5?~H8tIHHt$rI<$HcH;w8aE1Ht$HL$ 1H\$ IHu7H EHHEHD$(dH3%(H8[]A\A]H{ HHLIHI$I|$ID$I\$ADLeE돐D$+H8-fDLD$1fDERff.@UHH5}SH8_,dH%(HD$(1HL$HT$HD$LL$LD$ etMHD$ H5|H8Ht'1ɃtRH\$ H8HSH\$Hs0Ht"EHD$(dH3%(u"H8[]@EHL$ff.UHH5}SH8_,dH%(HD$(1HL$HT$HD$ LL$ LD$tPHD$ H5{H8Ht*tWH\$H8HSH\$HsMHt'EHD$(dH3%(u+H8[]fEHL$ HSHH5{H ,dH%(HD$1HL$HT$t=HD$ H5zH8,HtHL$H8HqHt CHD$dH3%(uH [CBfSHH5{H ,dH%(HD$1HL$HLD$tEH$M H5UzH8Ht HL$H8HQHL$Hq;Ht%CHD$dH3%(uH [CfSHH5OzH ,dH%(HD$1HL$HT$kt=HD$ H5yH8HtHL$H8HqHt CHD$dH3%(uH [CfAVAUATIH5{USH,dH%(HD$1H1H$HchHXHH9rH11rt@^?H9vOr@^v.qH9v=HPH9v1 <^HDH&;H9wLc LL=LUHHHPLMH@Lh3HJ~@^vp&H9L3~@^HQ-H9wHDI$@<%AD$HD$dH3%(H[]A\A]A^H@2@&tCH9vHffDDAHPDƃuKH9@ <^HHJB-H9w^fDH9rHЃDH95D@L[Hz?A 0J3@rL9>KDiA^HzL[ Lj?A 0JsHK@rH9ASMsI}LۍJ^CL ?AAUAS?AAUH9Rr@^BI}HK?AAU3AuL9SDZA^L[I}I ?AAUKHS4AuM91H'@HJB-HBDFHHHOA+t%?A,tA@A`wEHA@AAACA HDzH9<-HLqL9>f蘰HLHHHEH}HEH]蜱HD$DH(@HD$dH3%(SH([]A\A]A^A_DI IPIA&HL9cLAA]HL&'1ۿ I(AAAA<@D@EAAA@v[AAEAA=AA,<@v%DHvHD$0 H5mSH8ݩHHt#xtHwH;Hl$@HvHE`HD$0H54SH8虩IHt xG E1HD$8HDpHXIJ3H$H9#AE11Ld$(D$Kf<H5RHD$HH;HIHtxtHI$fEH;H5RIHtxtH菬I$fEH;H5cR賨IHtCxtHMI<$IHHH=4RIE8IEHEIELmH;H5RTHt x%H;H5S1IHtxtH˧I<$HΪHEH;H5QIHtxtH萧I<$H蓪HEH; H5S軧IHtxtHUI<$HXHE H;H5PQ耧IHt;xtHI$HxHHE(I4$HHNHHQ-H; H5S)Ht xH; H5PIHxtH蜦I$HxH蛤HEhI4$HHNHHQ诤I$H@HEpH;H5P蟦IHtxtHII$HH;H5_PjIHtxtHI$HH;H50PE12IHt%xtH̥I<$E1H̨HH H9$CtE<uH;H5OΥIHtxA$|$T$}T$HExILftfAH;H5OqIHtx?I$fAGH;H5NBIHtfx諧HD$I$HxHբHL$HHAI4$HNHHQH=N訧HL$HIGHAIOH;H5NHt xH;H5hP蝤IHtxKI<$H>IGH;H5MfIHtxI<$HIGH; H5P/IHtxI<$HЦIG H;H5MIHt7xFI$HxH蕡IG(I4$HHNHHQ詡H; H5O襣Ht xH; H5cM肣IHxI$HxHIGhI4$HHNHHQ/I$H@IGpH;H5MIHtxI$IH;H5LIHtx\I$IH;H5L轢D$IHxI<$H HND$IH9$~DLd$(E&Ht f}rHt$HH|$@3@HT$HHt$@HH蔡HMLd$`DxMcB+L躞LHHIHD$Xԟ fLt$XMcI|$ΝLAHIcHcAH蒥It$HJ<(HD$X茟Hl$X fBt-Md$MuMcH|$`5I,Ld$XLHHLF BD=LfBL=轟HD$HH/f8L@hH|$XH1L KHK1rHzLl$XLHx IH蝝LLHHHEH}HELe衞HD$ BD%H|$XH(@HtHH|$HH|$@衝HD$hdH3%(Hx[]A\A]A^A_fDHEhHEpwf.HE1Lp@HLHD$I9tzfA~tfIFHD$kIHD$Hx蚢I$A~tLwIHxHwID$I6HHNHHQ苝Ml$MI L9t$uLm:HE1Lp@HLHD$I9~fDA~tfIFHD$軡IHD$HxI$A~tLǞIHxHǜID$I6HHNHHQۜMl$MI L9t$uLm0裚T$IIHX7HHH8H8H(VH6HHH؝HءHȡLHxHD$ @UHExHHsvIGhIGpofLxxH@HBLG%fDL`MH@HH0 L€tʺE1HE1DhHXIIL9f{tP蕟{HtH贜HHxH贚HEHEH3HHNHHQLeIH I9u8@MbL觘H=?HD$PLl$XH$L5FfDH<$LH\$PܟHMMH_F1HYFLP1S跙XHZ轚Hl$XMGh1MH4FL1H苙H蓚MHl$XMuLL EMHHE11RHZHD$HL`@HLHD$I9DA|$tnID$HD$IHD$Hx@IA|$tLI$HxHIFI4$HHNHHQ0HD$Lt$IFI L9d${HD$IGd@HHD$HL`@HLHD$I9A|$tnID$HD$IIHD$HxxIA|$tLUI$HxHTIFI4$HHNHHQhHD$Lt$IFI L9d${HD$IG0L%C|1HN1跙HD$ @fDAUATUHH5DSHH_,dH%(HD$81HL$HT$HD$LL$LD$ HD$ HD$(HD$/ H57AH8lIHH|$HwH^H[ HIHB HL$ 1HD$(u HT$HrI}HwH|$(t D$ H= 1H謕H HtFH3H襗H[HuHš H\$0Ht!Hl$0fDH[HDH\$0HuH LH HD$8dH3%(u3HH[]A\A]ÐLEH|$(N5脗@AWAVAUATUSHH,Ht$HT$hH5IBdH%(H$1L#H1虔HD$h1ҾLxLpHD$XLt$I_H菚HHD$HH\$1MH$Ot>HD$@DHD$MI)H,It7L9w2Hx?HxI9rL=H)HyHuL|$LHH$LC'HH 9AHH5@HLH5IʔHD$HH8誖H|$HPH$dH3%(HĨ[]A\A]A^A_8=1IL+d$II9tpHLHl$H)HHH[DH\$@H)H v@HH5?HHH5CHHD$HH8HD$I\$L?H)H<H|$($HHtdHL$H)HpHD$0LHH)Ht$8HL$ H~:L9t$ w3H|$ @x=t:HxI9rL?H)H轔HuM)LM6f.8?uIHD$PHD$0Ll$HHt$(H)L+d$HLH.ADLl$]Ht$ LH+l$8LHQAD-LL$PLl$pbBH\$@LL$ H谖HL$HHH5w>角HL$pHH5F莒HD$HH8nHD$H9D$pLL$ tH|$pLL$ AQI\$H؀ w?H&HsEHt$XID$fTH w#H&HHrHf.=I9~/fH\$LL$ HHT$xHH~LL$ HD$pHH|$HAHD$@ t H*HD$@HD$tD_u HuH\$LL$ HcHT$xHHCLL$ HD$ppHt$|?I9HHD$H8gLff.USHH5D;Hh,dH%(HD$X1HL$HHD$D$,ALLHD$H$3 H5;:H8pHHH|$,JLD$1H5<HD$H}HKH|$HHD$tD$tdHHD$ 1H؎HHL$0HHT$ cH|$YHD$XdH3%(u*Hh[]fCH|$֎Hl$ f.AWAVAUATIH5;USHH_,dH%(HD$81HD$0HL$HD$ HD$(HT$HD$0PHD$(P1LL$8LD$(蝑ZY1~*HD$(HŁt HD$(HH HEHD$0HH8H53;IHtg@<<I?G~IDpE1I?ILHt$x/HHzvH1虌IEM9uH=) HtH H= HtӎH H|${tH贏H|$HwH H|$H HwHH mHD$HT$(1HpHHO5] HHHh:AD$ I$HD$8dH3%(upHH[]A\A]A^A_fDHT$ H 1~tfAD$DIHzH1BhHqD11裎ff.SHH5|7H ,dH%(HD$1HL$HT$tIHD$Ht HʕHD$9 H5A6H8vHt1Ht$H8CHD$dH3%(uH [C蒍fUHSH,ulH= tR1H؊H Ht@H3H]H[HuH= 蘐H H[]fDEH[]f1H57uff.UHH5M6SH(,dH%(HD$1HL$HLD$ǍH$ H55H85Hb HL$H H HQHL$H8HqRH=ڕ th1H讉HǕ HtfH3H5H[HuH= pH H HD$dH3%(uH([]EҋfUHH5-5SH(,dH%(HD$1HL$HLD$觌H$ؔ H53H8HB HL$H H8HQHL$Hq-H=Ք tk1H虈H” HtDH3HH[HuH= XH H HD$dH3%(uH([]E躊f.AVAUATUSHH $HH $HdH%(H$ 1H= IIHIHuG\@H  LHLAHDH=P HLH9HtH wH11H$ dH3 %(Hu8H []A\A]A^Hz觍HLHHAHޑD裉AVAUATIH54UHSHdH%(HD$1H}H<$HH蔅IMLHx IH蠆LLHHHH{HCLk襇I$BD+EHD$dH3%(uKH[]A\A]A^IMwEfDHѐ HI$E脈@,HV1ff.,HVff.SHH5|1H ,dH%(HD$1HL$HT$tJHD$O H5W0H8范HtGHt$-H8H;G86CHHD$dH3%(uH [fDC蒇fUSHH5o0H(,dH%(HD$1HL$HLD$gH$ H5/H8ՂHHH豉HD$HT$H}Hp HteH H5T2H芈Hː uWu3HD$dH3%(H([]DCH H51HH q H51HH6 @H A H51H͇H VH  H5 4H襇H &fH ُ H5E1HuH ą@AVAUL-A1ATIUSHH dH%(HD$1HI@HH HtLHHKHtH50HHKHtH54H΃HKHtH5 8H豃A|$I<$u HGLPxHH者H[8H[HT$dH3%(Lu H []A\A]A^辄ff.ATIUSHH dH%(HD$1HKHtH5.LHKHt1H50LHKHtH50LւHK8Ht1H50L蹂HK8HtH5/L蜂HKXHt H5.LHK`Ht H5.LbHKhHt H5N/LEHKpHt H5vIL$( LH5-!%sI\$0Hk L|$ LH5 !Hl$0u1LL5!qHvH LHrHKHH5 r|$(H|$ uHD$ LH@PxHHwtH[HuLH5 LLH]lI}H9_8qHD$8dH3%(uJHH[]A\A]A^A_f+ifDAFfDILH@PxHYkfHs @H(if@H@ HfDAUIATIUSHH?dH%(HD$1H<$Ht+HDH?H_ tlHlH$HHuIEI$HD$dH3%(u H[]A\A]jDAVAUIH5ATUSH@,dH%(HD$81HL$HT$LD$Ok`HD$s H5H8eHcHT$H\$s Hs Hs H8HHshH=s 1L1g1Ҿ@mHis IHHl$ L5I}H jH[ Ht{HkH LHgHK HH5PjCL H5DHAD$A$gA}uIELH@PxH{H5r H~L hr HD$8dH3%(u H@[]A\A]A^fAEhAVAUIH5ATUSH@,dH%(HD$81HL$HT$LD$oi`HD$q H5H8cHcHT$H\$q Hq Hq H8HHscH=q 1LQe1Ҿ`kHq IHHl$ L5I}H,hH[ Ht{HjH LHfHK HH5piCL H5dHAD$A$eA}uIELH@PxH{H5p H~L@fp HD$8dH3%(u H@[]A\A]A^fAEfH .ef@Hff.HHt,SH8Ht HgHHxH[gDUSHHo Ht'H+n uzH=o Ho Ho HtNHm t'H-H H11,fH[HuH=Io $iH9o H1[]H-LCH H11eH[HZfUHSH,ulH=n tR1HbHn Ht@H3HMgH[HuH=n Hn H[]fDEH[]f1H5fuff.HNcfHfAUIATIUSHHdH%(HD$1H$HtHDH[HeH$HuIEI$HD$dH3%(u H[]A\A]CdAWIH=`AVI AUI1ATMULSHH$1VhE1H11Ҿ DD$ H=0hH5rH`DD$ HHmH|$PtHD$P81LHH߾fMt A<$Ht }1LHH߾YfMtLHH1;fH $HH1!fHeE1AHD[]A\A]A^A_DHH,H1e0f.1LHH߾eH27fHHH1efSHH5H@,dH%(HD$81HL$HH$HD$HHD$HD$ HD$(HD$0HD$8HD$8PHD$8PHD$8P1LL$0LD$(bH H<$H}kHt$H~LkHT$HzkHD$0LL$(LD$ HHHHEIIMLEIHMLEHL$HLQIEHHHPHZYCHD$8dH3%(uH@[0aUSHHH=j t)H-j -HEHH@Hj H[] Hj HHj H@H{j H|j H[]ff.fff.ff.ff.ATH=UHSuHHi HuE=]HHHi cHH\Hi HBHi H@[]A\ÐHHCHu\HHCIpcI$H\ID$ID$[]A\Ð=i AVAUATIUSHtUuGH=8i H-3i \LHEHcHH<\HCHCHi []A\A]A^H=i AtSL5i LIF HbHEH[DmHEH]HE [H-h ]A\A]A^LHHh ibHEH[Hh HBHh DhHh HXHuh H@ Hfh []Heh A\A]A^fD{[LHHh aHH.[Hg HBHg H@Hg Hg =h AVAUATUHStXH=g L%g ZHID$H~aHHZHCHCHg []A\A]A^H=g AIL5g pHIF H!aHHVZDkHCLcHC HSg []A\A]A^f[ZHHHf `HHZHf HBHf H@Hf []Hf A\A]A^DHHHf `HHYHf HBHf DhHf L`Hf H@ Hf []Hf A\A]A^ff.@HHzf t HJH sf t HJH lf t HJH ef t HJ H ^f t HB(HWf fDHAUATIUHSHHe HuRRLHHe _HHXHve HBHke HhH`e H@BfDHHCHuLHCI(_IEH\XImIEIEH[]A\A]Ðff.@ff.SHHt,HHWH5d Hߺ[WH5d HlWf.ff.ff.fDHHSTORAGEusagelimitNILIMAP_OPENTIMEOUTIMAP_READTIMEOUTIMAP_WRITETIMEOUTIMAP_CLOSETIMEOUTOP_DEBUGOP_READONLYOP_ANONYMOUSOP_SHORTCACHEOP_SILENTOP_PROTOTYPEOP_HALFOPENOP_EXPUNGEOP_SECURECL_EXPUNGEFT_UIDFT_PEEKFT_NOTFT_INTERNALFT_PREFETCHTEXTST_UIDST_SILENTST_SETCP_UIDCP_MOVESE_UIDSE_FREESE_NOPREFETCHSO_FREESO_NOSERVERSA_MESSAGESSA_RECENTSA_UNSEENSA_UIDNEXTSA_UIDVALIDITYSA_ALLLATT_NOINFERIORSLATT_NOSELECTLATT_MARKEDLATT_UNMARKEDLATT_REFERRALLATT_HASCHILDRENLATT_HASNOCHILDRENSORTDATESORTARRIVALSORTFROMSORTSUBJECTSORTTOSORTCCSORTSIZETYPETEXTTYPEMULTIPARTTYPEMESSAGETYPEAPPLICATIONTYPEAUDIOTYPEIMAGETYPEVIDEOTYPEMODELTYPEOTHERENC7BITENC8BITENCBINARYENCBASE64ENCQUOTEDPRINTABLEENCOTHERIMAP_GC_ELTIMAP_GC_ENVIMAP_GC_TEXTSimap2007fIMAP c-Client VersionenabledSSL SupportKerberos SupportrS|llCouldn't re-open streamrSS|SSrSc-client imap_getquota failedrSlrSSSc-client imap_getacl failedr|l%ld.num%ld.next%ld.branch%4ld) } (%ld chars)rlrl|lBad message numberrSS|lrSSDriverMailboxNmsgsRecentUnreadDeletedSizerz|l\DELETEDrlS|lNo body information availablerzl|SlwbUnexpected end of stringrll|lSSUnrecognized sort criteria-aaremailreturn_pathNO HOSTin_reply_tobccmessage_idcustom_headersencodingcharsetCHARSETtype.parametersdisposition.typecontents.datalinesbytesmd5BOUNDARY %s--%s%s%s%s%s--%s--%srS|lSdefaultREFERENCESPSS|llaDISABLE_AUTHENTICATORCouldn't open stream %sFailed to read from socketFailed to write to streamflagsmessagesunseenuidnextuidvaliditypersonaladlSubjectnewsgroupsfollowup_toreferencesfromaddressbccaddressreply_toaddresssenderaddresssenderreturn_pathaddressUFAXrl|llSUnseenFlaggedAnsweredDraft%4ldMsgnoMailDate%ldudatefetchfromfetchsubjectS|SUNKNOWNrlSifsubtypeifdescriptionifidifdispositionifdparametersattributevalueifparameterspartsrfc822rS|lflaggedanswereddeleteddraftattributesdelimiter%s (errflg=%ld)sendmail_pathFrom: %s To: %s Cc: %s Bcc: %s Subject: %s %s SSS|SSSSNo to field in mail command[ALERT] 7.2.34API20170718,NTSimap.enable_insecure_rsh0standardimap_openimap_reopenimap_closeimap_num_msgimap_num_recentimap_headersimap_headerinfoimap_rfc822_parse_headersimap_rfc822_write_addressimap_rfc822_parse_adrlistimap_bodyimap_bodystructimap_fetchbodyimap_fetchmimeimap_savebodyimap_fetchheaderimap_fetchstructureimap_gcimap_expungeimap_deleteimap_undeleteimap_checkimap_listscanimap_mail_copyimap_mail_moveimap_mail_composeimap_createmailboximap_renamemailboximap_deletemailboximap_subscribeimap_unsubscribeimap_appendimap_pingimap_base64imap_qprintimap_8bitimap_binaryimap_utf8imap_statusimap_mailboxmsginfoimap_setflag_fullimap_clearflag_fullimap_sortimap_uidimap_msgnoimap_listimap_lsubimap_fetch_overviewimap_alertsimap_errorsimap_last_errorimap_searchimap_utf7_decodeimap_utf7_encodeimap_utf8_to_mutf7imap_mutf7_to_utf8imap_mime_header_decodeimap_threadimap_timeoutimap_get_quotaimap_get_quotarootimap_set_quotaimap_setaclimap_getaclimap_mailimap_headerimap_listmailboximap_getmailboxesimap_scanmailboximap_listsubscribedimap_getsubscribedimap_fetchtextimap_scanimap_createimap_renametimeout_typestream_idoptionsstrmessageadditional_headersrpathenvelopesequencemsg_nosectionunique_msg_idreversesearch_criteriaflaginbufmime_encoded_textaddress_stringdefault_hostfilerefpatternfrom_lengthsubject_lengthcontentold_namenew_namemsglistrightsqrootmailbox_sizemboxfoldern_retriesuserpasswordparamsinternal date not correctly formattedc-client imap_getquotaroot failedinvalid value for the flags parameterinvalid value for the options parameterABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+,No body MIME information availableInvalid modified UTF-7 character: `%c'Stray modified base64 character: `%c'Invalid modified base64 character: `%c'Search options parameter has to be greater than or equal to 0body parameter must be a non-empty arraycannot generate multipart e-mail without components.The boundary should be no longer than 4kbFunction returned an empty treeInvalid argument, expect string or array of stringsRetries must be greater or equal to 0From length has to be between 0 and %dSubject length has to be between 0 and %dCould not execute mail delivery programNo subject field in mail commandNo message string in mail command-/13,.02/[0-3][0-9]-((Jan)|(Feb)|(Mar)|(Apr)|(May)|(Jun)|(Jul)|(Aug)|(Sep)|(Oct)|(Nov)|(Dec))-[0-9]{4} [0-2][0-9]:[0-5][0-9]:[0-5][0-9] ;,:HPCpLLL)Md_MM M M NKN|uNNNt OOdOxP4PPP0PPLQ#QPRR S@TT<0^h^__p`apbDPce$PfH0ghhipjxkk m( px `q s t8 td u 0v v z |@ p}x  p0 0T 0 p ( L 0 ,h``H0p@($0xк @`00\dPD@p`t@ P0hp@<@0d x0@< P`4H\pzRx $5@ FJ w?:*3$"D>0 \MpLN(HhNFBB B(A0A8D` 8A0A(B BBBA <7L tFBA K(DIFRA (A ABBD zRx (=*8d FBA K(DP& (A ABBD zRx P$=*\ FBB B(A0A8DU 8A0A(B BBBG CFD$zRx ,=L8p ̜FBA K(Dp (A ABBB L `4FBB B(A0A8Jv 8A0A(B BBBH ( P6EAN AAC zRx $o  >      ޡ>  ޡe    R   `y  R'  ٣F  ٣f    :      ^  ^?  ئ_  Zm5z  ئ  X  m5  X   % D oa o O O / /  > i  F F ` m7 `! Ը< m*R Ըv n %n* n  OnL : W  $ $ f n! f "7 nM "h  Jo!  u u  & A ^ y koX     7 ] % %  o!   / T l  E  E < oU0 <]     $ 9p#@ b  ]  0 \p3 0( M p"m  , , Z Z - O o      5 W w      -? -] y p"  @ pj @  + B ] v      /  /  , E * \ * r       f  f  u  u 1 L h    E!@f! f!xa!H@e!0d!0 a!05 \!M[!Ho W!`V!H a!`Q!``Y!xX! `S!`# Y!`?  b!HO b!0d  ]!`x \!` ]!0 ]!x `!x  `!x  Q!H _!H!`_!`5!_!HP!Z!Hg!@Z!H!e!!e!0!X!0!@X!0!X!0!W!0!V!0"@R!`"W!06"U!xP"T!xl"S!~"S!H"R!H"^!`"`[!`"Q!`"" #"#O!x6#@V!0O#V!0h#U!0#U!0#O!0#@O!H#N!H#`d!H#d!H$c!`0$ c!xD$b!HX$`P!j$@^!`$[!`$ @q$ pq$ q$p!$D!% q %D!+%4=9% 6G% iW% n% 0z% %% @% x% % % & & `0,& }B& pR&p!_& s& Ќ&E!& & & p& & r(&  ' 0' ~-' 3' H' 06X' !p' P' ' p' `' ' ' 9' P ( ( V)( P>( 0*W( sqc( Вv( ( ( l( ( ( U4 Y(g!(p!( `x) 0) 0#) `t1) A) P~iN) b) Pr)p!) ) ) @) ) r) ") *`E! * &* 6* I* PW* 4s* p* P* * p* *j!* * @ + #+ 3+ ptn C+ 0[+ 0r+ 8`\!"@#K Y Y c 0l  #8=D!D!E!g!j!p!p!qa+ Z+++ +++ ++, ,,!,-,p!4,>,H,X,s,,, p ,,,,,**,--"/-C- L-\-f-%y-------b5-..!.5.G.Y. a.t.......`%.../ //3/  V5J5 @sV5]5k555 5555566"6;6F6R6e6u666 66 646.annobin_php_imap.c.annobin_php_imap.c_end.annobin_php_imap.c.hot.annobin_php_imap.c_end.hot.annobin_php_imap.c.unlikely.annobin_php_imap.c_end.unlikely.annobin_php_imap.c.startup.annobin_php_imap.c_end.startup.annobin_php_imap.c.exit.annobin_php_imap.c_end.exit.annobin_zm_globals_ctor_imap.start.annobin_zm_globals_ctor_imap.endzm_globals_ctor_imap.annobin_zm_activate_imap.start.annobin_zm_activate_imap.end.annobin_mail_getquota.start.annobin_mail_getquota.end.annobin_mail_getacl.start.annobin_mail_getacl.end.annobin_zm_startup_imap.start.annobin_zm_startup_imap.endmail_close_itle_imap.annobin_mail_close_it.start.annobin_mail_close_it.end.annobin_zm_info_imap.start.annobin_zm_info_imap.end.annobin_zif_imap_timeout.start.annobin_zif_imap_timeout.endCSWTCH.669CSWTCH.670.annobin_zif_imap_num_msg.start.annobin_zif_imap_num_msg.end.annobin_zif_imap_num_recent.start.annobin_zif_imap_num_recent.end.annobin_zif_imap_reopen.start.annobin_zif_imap_reopen.end.annobin_zif_imap_last_error.start.annobin_zif_imap_last_error.end.annobin_zif_imap_append.start.annobin_zif_imap_append.endzif_imap_append.cold.16.annobin_zif_imap_ping.start.annobin_zif_imap_ping.end.annobin_zif_imap_get_quota.start.annobin_zif_imap_get_quota.endzif_imap_get_quota.cold.17.annobin_zif_imap_get_quotaroot.start.annobin_zif_imap_get_quotaroot.endzif_imap_get_quotaroot.cold.18.annobin_zif_imap_set_quota.start.annobin_zif_imap_set_quota.end.annobin_zif_imap_setacl.start.annobin_zif_imap_setacl.end.annobin_zif_imap_getacl.start.annobin_zif_imap_getacl.endzif_imap_getacl.cold.19.annobin_zif_imap_expunge.start.annobin_zif_imap_expunge.end.annobin_zif_imap_close.start.annobin_zif_imap_close.endzif_imap_close.cold.20.annobin_build_thread_tree_helper.start.annobin_build_thread_tree_helper.endbuild_thread_tree_helper.annobin_zif_imap_headers.start.annobin_zif_imap_headers.end.annobin_zif_imap_msgno.start.annobin_zif_imap_msgno.end.annobin_zif_imap_body.start.annobin_zif_imap_body.endzif_imap_body.cold.21.annobin_zif_imap_mail_copy.start.annobin_zif_imap_mail_copy.end.annobin_zif_imap_mail_move.start.annobin_zif_imap_mail_move.end.annobin_zif_imap_createmailbox.start.annobin_zif_imap_createmailbox.end.annobin_zif_imap_renamemailbox.start.annobin_zif_imap_renamemailbox.end.annobin_zif_imap_deletemailbox.start.annobin_zif_imap_deletemailbox.end.annobin_zif_imap_utf7_encode.start.annobin_zif_imap_utf7_encode.end.annobin_zif_imap_listscan.start.annobin_zif_imap_listscan.end.annobin_zif_imap_check.start.annobin_zif_imap_check.end.annobin_zif_imap_mailboxmsginfo.start.annobin_zif_imap_mailboxmsginfo.end.annobin_zif_imap_delete.start.annobin_zif_imap_delete.end.annobin_zif_imap_undelete.start.annobin_zif_imap_undelete.end.annobin_zif_imap_setflag_full.start.annobin_zif_imap_setflag_full.end.annobin_zif_imap_clearflag_full.start.annobin_zif_imap_clearflag_full.end.annobin__php_rfc822_write_address.start.annobin__php_rfc822_write_address.end_php_rfc822_write_address_php_rfc822_soutr.annobin__php_rfc822_soutr.start.annobin__php_rfc822_soutr.end.annobin_add_assoc_object.start.annobin_add_assoc_object.endadd_assoc_object.annobin_zif_imap_subscribe.start.annobin_zif_imap_subscribe.end.annobin_zif_imap_unsubscribe.start.annobin_zif_imap_unsubscribe.end.annobin_zif_imap_fetchbody.start.annobin_zif_imap_fetchbody.endzif_imap_fetchbody.cold.22.annobin_zif_imap_fetchmime.start.annobin_zif_imap_fetchmime.endzif_imap_fetchmime.cold.23.annobin_zif_imap_savebody.start.annobin_zif_imap_savebody.endphp_mail_gets.annobin_zif_imap_base64.start.annobin_zif_imap_base64.end.annobin_zif_imap_qprint.start.annobin_zif_imap_qprint.end.annobin_zif_imap_8bit.start.annobin_zif_imap_8bit.end.annobin_zif_imap_binary.start.annobin_zif_imap_binary.end.annobin_zif_imap_rfc822_write_address.start.annobin_zif_imap_rfc822_write_address.end.annobin_zif_imap_utf8.start.annobin_zif_imap_utf8.end.annobin_zif_imap_utf7_decode.start.annobin_zif_imap_utf7_decode.endzif_imap_utf7_decode.cold.24.annobin_zif_imap_sort.start.annobin_zif_imap_sort.endzif_imap_sort.cold.25.annobin_zif_imap_fetchheader.start.annobin_zif_imap_fetchheader.endzif_imap_fetchheader.cold.26.annobin_zif_imap_mail_compose.start.annobin_zif_imap_mail_compose.endzif_imap_mail_compose.cold.27.annobin_zif_imap_search.start.annobin_zif_imap_search.end.annobin_zif_imap_mime_header_decode.start.annobin_zif_imap_mime_header_decode.end.annobin_zif_imap_thread.start.annobin_zif_imap_thread.endzif_imap_thread.cold.28.annobin_zif_imap_open.start.annobin_zif_imap_open.endzif_imap_open.cold.29.annobin_zif_imap_gc.start.annobin_zif_imap_gc.endzif_imap_gc.cold.30.annobin_zif_imap_alerts.start.annobin_zif_imap_alerts.end.annobin_zif_imap_list.start.annobin_zif_imap_list.end.annobin_zif_imap_lsub.start.annobin_zif_imap_lsub.end.annobin_php_mail_gets.start.annobin_php_mail_gets.endphp_mail_gets.cold.31.annobin_php_imap_mutf7.isra.6.start.annobin_php_imap_mutf7.isra.6.endphp_imap_mutf7.isra.6.annobin_zif_imap_utf8_to_mutf7.start.annobin_zif_imap_utf8_to_mutf7.end.annobin_zif_imap_mutf7_to_utf8.start.annobin_zif_imap_mutf7_to_utf8.end.annobin_zif_imap_uid.start.annobin_zif_imap_uid.endzif_imap_uid.cold.32.annobin_zif_imap_status.start.annobin_zif_imap_status.end.annobin__php_imap_parse_address.start.annobin__php_imap_parse_address.end_php_imap_parse_address.annobin__php_make_header_object.start.annobin__php_make_header_object.end_php_make_header_object.annobin_zif_imap_headerinfo.start.annobin_zif_imap_headerinfo.endzif_imap_headerinfo.cold.33.annobin_zif_imap_rfc822_parse_headers.start.annobin_zif_imap_rfc822_parse_headers.end.annobin_zif_imap_rfc822_parse_adrlist.start.annobin_zif_imap_rfc822_parse_adrlist.end.annobin_zif_imap_bodystruct.start.annobin_zif_imap_bodystruct.endzif_imap_bodystruct.cold.34.annobin__php_imap_add_body.start.annobin__php_imap_add_body.end_php_imap_add_body.annobin_zif_imap_fetchstructure.start.annobin_zif_imap_fetchstructure.endzif_imap_fetchstructure.cold.35.annobin_zif_imap_fetch_overview.start.annobin_zif_imap_fetch_overview.endzif_imap_fetch_overview.cold.36.annobin_get_module.start.annobin_get_module.end.annobin_mail_newfolderobjectlist.start.annobin_mail_newfolderobjectlist.end.annobin_mail_free_foblist.start.annobin_mail_free_foblist.end.annobin_zif_imap_list_full.start.annobin_zif_imap_list_full.end.annobin_zif_imap_lsub_full.start.annobin_zif_imap_lsub_full.end.annobin_mail_newerrorlist.start.annobin_mail_newerrorlist.end.annobin_mail_free_errorlist.start.annobin_mail_free_errorlist.end.annobin_zm_deactivate_imap.start.annobin_zm_deactivate_imap.end.annobin_zif_imap_errors.start.annobin_zif_imap_errors.end.annobin_mail_newmessagelist.start.annobin_mail_newmessagelist.end.annobin_mail_free_messagelist.start.annobin_mail_free_messagelist.end.annobin__php_imap_mail.start.annobin__php_imap_mail.end_php_imap_mail.cold.37.annobin_zif_imap_mail.start.annobin_zif_imap_mail.endzif_imap_mail.cold.38.annobin_mm_searched.start.annobin_mm_searched.end.annobin_mm_exists.start.annobin_mm_exists.end.annobin_mm_expunged.start.annobin_mm_expunged.end.annobin_mm_flags.start.annobin_mm_flags.end.annobin_mm_notify.start.annobin_mm_notify.end.annobin_mm_list.start.annobin_mm_list.end.annobin_mm_lsub.start.annobin_mm_lsub.end.annobin_mm_status.start.annobin_mm_status.end.annobin_mm_log.start.annobin_mm_log.end.annobin_mm_dlog.start.annobin_mm_dlog.end.annobin_mm_login.start.annobin_mm_login.end.annobin_mm_critical.start.annobin_mm_critical.end.annobin_mm_nocritical.start.annobin_mm_nocritical.end.annobin_mm_diskerror.start.annobin_mm_diskerror.end.annobin_mm_fatal.start.annobin_mm_fatal.endimap_depsarginfo_imap_openarginfo_imap_reopenarginfo_imap_closearginfo_imap_num_msgarginfo_imap_num_recentarginfo_imap_headersarginfo_imap_headerinfoarginfo_imap_rfc822_parse_headersarginfo_imap_rfc822_write_addressarginfo_imap_rfc822_parse_adrlistarginfo_imap_bodyarginfo_imap_bodystructarginfo_imap_fetchbodyarginfo_imap_savebodyarginfo_imap_fetchheaderarginfo_imap_fetchstructurearginfo_imap_gcarginfo_imap_expungearginfo_imap_deletearginfo_imap_undeletearginfo_imap_checkarginfo_imap_listscanarginfo_imap_mail_copyarginfo_imap_mail_movearginfo_imap_mail_composearginfo_imap_createmailboxarginfo_imap_renamemailboxarginfo_imap_deletemailboxarginfo_imap_subscribearginfo_imap_unsubscribearginfo_imap_appendarginfo_imap_pingarginfo_imap_base64arginfo_imap_qprintarginfo_imap_8bitarginfo_imap_binaryarginfo_imap_utf8arginfo_imap_statusarginfo_imap_mailboxmsginfoarginfo_imap_setflag_fullarginfo_imap_clearflag_fullarginfo_imap_sortarginfo_imap_uidarginfo_imap_msgnoarginfo_imap_listarginfo_imap_lsubarginfo_imap_fetch_overviewarginfo_imap_alertsarginfo_imap_errorsarginfo_imap_last_errorarginfo_imap_searcharginfo_imap_utf7_decodearginfo_imap_utf7_encodearginfo_imap_utf8_to_mutf7arginfo_imap_mutf7_to_utf8arginfo_imap_mime_header_decodearginfo_imap_threadarginfo_imap_timeoutarginfo_imap_get_quotaarginfo_imap_get_quotarootarginfo_imap_set_quotaarginfo_imap_setaclarginfo_imap_getaclarginfo_imap_mailarginfo_imap_getmailboxesarginfo_imap_getsubscribedderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zif_imap_utf8zif_imap_reopenzif_imap_utf8_to_mutf7zif_imap_gczif_imap_status__GNU_EH_FRAME_HDRzif_imap_undeletezif_imap_fetchmimezif_imap_listzif_imap_rfc822_parse_adrlistzif_imap_unsubscribezif_imap_deletemailboxzif_imap_savebodymail_free_messagelistzif_imap_qprintimap_globalsmail_newmessagelistzif_imap_headers__dso_handlezif_imap_set_quotazif_imap_get_quotarootzif_imap_mail_composezm_deactivate_imapzm_activate_imapzif_imap_mutf7_to_utf8zif_imap_binaryzif_imap_timeout_finizif_imap_utf7_encodezif_imap_threadzif_imap_mailboxmsginfozif_imap_getaclzif_imap_subscribezif_imap_msgnomail_free_foblistzif_imap_rfc822_write_addresszif_imap_clearflag_fullmail_free_errorlistzif_imap_mailzif_imap_bodyzif_imap_checkzif_imap_utf7_decodemail_newfolderobjectlistmail_getaclzif_imap_mail_copyzif_imap_alertszif_imap_get_quotazif_imap_appendzif_imap_setflag_fullzif_imap_num_msgzif_imap_close_DYNAMIC__TMC_END__zif_imap_fetchbodyzif_imap_uid_php_imap_mailzif_imap_sortzif_imap_searchzm_info_imapzif_imap_num_recentzif_imap_deleteimap_module_entryzif_imap_list_fullzif_imap_fetchheaderzif_imap_fetchstructurezif_imap_listscanmail_getquotamail_newerrorlistzif_imap_base64imap_functionszif_imap_expungezif_imap_setaclzif_imap_lsub_fullzif_imap_8bitzif_imap_mime_header_decodezif_imap_pingzif_imap_headerinfozif_imap_mail_movezif_imap_openzif_imap_bodystruct_GLOBAL_OFFSET_TABLE_zif_imap_lsubzif_imap_rfc822_parse_headerszif_imap_createmailboxzif_imap_errorszm_startup_imapzif_imap_fetch_overviewzif_imap_renamemailboxzif_imap_last_errormm_statusmtxdriverphp_info_print_table_startget_moduleauth_gsszend_fetch_resourcemm_nocriticalunixdrivermail_sequencecpytxtmail_openphp_strlcatmail_string_edatamail_lsubmail_sortap_php_snprintfrfc822_output_address_listdisplay_ini_entriespopen@@GLIBC_2.2.5mm_criticalauth_plautf8_from_mutf7php_strlcpyauth_md5_emalloc_largepcre_get_compiled_regex_cachemail_newbody_part__cxa_finalize@@GLIBC_2.2.5strlen@@GLIBC_2.2.5mm_fatalmail_parametersmail_scanmail_newstringlistutf8_mime2text_php_stream_free_php_stream_open_wrapper_exmail_expunge_fullmail_pingimap_setquota_array_init_zend_hash_str_updatemail_uid_sequencerfc822_qprintmail_free_searchpgmmail_fetch_header_php_stream_writemm_listmail_free_envelopemail_statusmail_free_threadnodezend_fetch_resource2_exzend_spprintfmail_free_bodymail_gcexecutor_globalsphiledrivermail_uidmmdfdriverfs_getmail_newsearchpgmadd_property_string_exmm_loginmemcpy@@GLIBC_2.14_zval_dtor_funcmail_deletefile_globalsmail_subscribemail_newaddrmail_listmail_search_fullimap_getquotarootmhdriverfind_rightmost_bit_efreezend_list_deleterfc822_base64rfc822_parse_msg_fulladd_next_index_longmail_criteriamail_fetch_bodydummydriveradd_property_str_ex__ctype_b_loc@@GLIBC_2.3strcasecmp@@GLIBC_2.2.5add_assoc_zval_exmemchr@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4mail_longdateOnUpdateBoolmail_newenveloperfc822_headerphp_check_open_basedirphp_error_docref0zend_register_list_destructors_ex_convert_to_stringauth_link_zend_hash_next_index_insertfree@@GLIBC_2.2.5php_info_print_table_rowzend_hash_str_findphp_file_le_streammail_fetchsubject_estrdupimapdrivermail_fetchfromzend_parse_parametersmail_copy_fullmail_datezend_register_resourcefs_giverfc822_binaryphp_info_print_table_endmail_free_body_parameterpop3drivermail_flagadd_property_long_exmm_logmail_threadphp_file_le_pstreamzend_empty_string_emalloc_8add_assoc_long_exadd_assoc_stringl_expclose@@GLIBC_2.2.5mm_diskerroradd_next_index_stringzend_ini_boolean_displayer_cbzend_list_closemail_newsortpgmmail_fetch_textnntpdriverauth_logmm_dlogmm_existsimap_getquotassl_onceonlyinitmm_flagsmbxdrivermail_elt__bss_startmail_createmm_notify_object_initmm_expungedmail_append_full_estrndupmm_lsubzend_register_ini_entriesphp_pcre_match_implsmart_str_erealloc__fprintf_chk@@GLIBC_2.3.4mail_linkzend_errorrfc822_8bitmail_newbody_parametermail_msgnomail_free_stringlistmail_renamemm_searchedcpystr_safe_emallocmail_fetch_structuremail_close_full_ITM_deregisterTMCloneTablemail_body_emalloc_192__zend_malloczend_register_long_constantrfc822_output_flushzend_hash_index_findrfc822_daterfc822_write_body_headernewsdriver_emalloc_16zend_ini_string_exmail_fetch_mimemail_newbodytenexdriver__gmon_start__convert_to_long_ITM_registerTMCloneTablemail_unsubscriberfc822_encode_body_7bit.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``8 @K Ho\!\!Uo""`d@#@#(nBKK xYYsYY@ ~cc0 0l0lu     ,##X8=8= D!DD!DE!E" g!gj!jpp!p p!p 0p- qapH sx< 6#PK!YLn||modules/zip.sonuȯELF>M@Xu@8 @     888$$ Std Ptdhhh44QtdRtd GNU *Gwvk@x#@ BE| pqXv1a pB<\ o9 vlpP1\T+S R *cGrsC)sS',Dim !1W>Pi, UF"}@<}q!!a P !__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizephp_info_print_table_startphp_info_print_table_rowzip_libzip_versionphp_info_print_table_endzend_hash_destroyphp_unregister_url_stream_wrapperzip_fclose_efreezip_get_num_fileszip_get_errorzip_error_code_systemzip_error_finizip_error_code_zip_ecalloczend_object_std_initobject_properties_initzend_parse_parameterszip_stat__stack_chk_failphp_error_docref0zip_stat_index_array_initadd_assoc_string_exadd_assoc_long_ex_safe_emallocstrcpyzip_add_dirzip_error_clearphp_check_open_basedirexpand_filepathzip_closezip_openstrlenzend_hash_find_convert_to_stringzend_get_std_object_handlers_zval_dtor_funczend_std_get_propertieszend_object_std_dtorzip_strerrorzip_discardzip_get_archive_commentmemcpyzip_get_namezend_empty_stringexecutor_globals_zval_ptr_dtorzend_is_true_zend_hash_updatezip_name_locatezip_get_file_commentzend_fetch_resourcezip_freadzend_list_close_emalloc_80zip_fopen_indexzend_register_resource_emalloc_16zip_file_set_encryptionzip_set_file_compressionzip_file_get_external_attributeszip_file_set_external_attributeszip_fopen_emalloc_8virtual_file_ex__memcpy_chkphp_dirnamezend_spprintfphp_basename_php_stream_stat_path_php_stream_open_wrapper_ex_php_stream_write_php_stream_free_php_stream_mkdirzend_hash_index_findzip_unchangezip_unchange_allzip_unchange_archivezip_deletezip_set_file_commentzip_set_archive_commentzip_renamezip_source_bufferzip_add_safe_erealloczip_source_freezip_error_strerrorzip_set_default_password_emalloc_40_emalloc_32_zend_hash_str_addzend_declare_property_null__zend_malloczend_new_interned_stringzend_register_internal_class_zend_hash_initzend_ce_countablezend_class_implementszend_declare_class_constant_longphp_register_url_stream_wrapperzend_register_list_destructors_exphp_statzip_source_filezip_file_addglobstrncpy__xstatadd_next_index_stringglobfreephp_stream_dirent_alphasort_php_stream_scandirpcre_get_compiled_regexap_php_snprintfphp_pcre_execzend_hash_str_findstrstr_zval_get_long_func_estrndupget_modulestrchrstrncasecmpzip_file_get_errorphp_stream_context_get_option_php_stream_alloc_estrduplibzip.so.5libz.so.1libc.so.6_edata__bss_startzip.soGLIBC_2.27GLIBC_2.14GLIBC_2.3.4GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64  ti  ii ' ui 1 W W  ( 0_0 @ @ hH P  ` h @p  t pr  z    ]        ( @0 ` @ H 0P  ` h Њp  ˻  @ ֻ @   b `  P    `  ( @k0  @ )H jP ` ` 8h Pp  D   O `\  X Z ` b `t  m c ` z( P0 @ H P ` h pp      p `  `}  Ǽ P}  Լ Z  ޼( z0 @ @ H 0yP  ` h xp @ - v  H u  [  u @ o ps `  r  X +p \  } \  +0 \H Rx } \ R +   X }p    +   X }p     }0 Px  +   0 H x   } +X }p Ľ + Ľ +0 x }  + P8 Px +   8 }P ͽ ս  ޽  60 ^H x 6    RX p   p   @o @  o  ' m  6( n0 ` @ FH `lP  ` Uh p @ h   w p   P   X    0 x    ž $X $  !$(! 0!8!XP! XX!ܵ!!!! ![@!`H!pP!X!`!$x!   9 = T s u x }        (  0  8  @  H P X ` h p x             ! " # $ % & ' ( ) *( +0 ,8 -@ .H /P 0X 1` 2h 3p 4x 5 6 7 8 : ; < > ? @ A B C D E F G H I J K L( M0 N8 O@ PH QP RX S` Uh Vp Wx X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m( n0 o8 p@ qH rP tX v` wh yp zx { | } ~    HHI HtH52 %3 hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQ% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%ݴ D%մ D%ʹ D%Ŵ D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%ݳ D%ճ D%ͳ D%ų D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%ݲ D%ղ D%Ͳ D%Ų D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%ݱ D%ձ D%ͱ D%ű DHp11Ef Hp11C) Hp11CH h11xCuHUp11WCHg116LEHg11 EHo11EHo11EHqg111H#g11CHko11mCHJo11LCHf11+Cr!HXo11 Q"SHnH11C[HHn11C$#Hn11C#Hf11#Hkn11mCQ$HJn11LC%H)n11+C%He11 l%Hm11C=&Hm11C'HCe11P'Hm11C[(Hqm11sCN)Hd11R(H6m118Eh)Hd11EG)Hdm11H|$AVuA.u LtjH|$ 1,Hd11EU0Hzl11|E40HYl11[Cp2H8l11:C%3H[ H[Hl11C 4Hk11C5HZc114Hk11C5Hk11CK6H?l11iC6Hb11HC6H%k11'C6Hk11C7Hk11C`7Hj11AE8Hj11C[]A\A]A^[H]A\Hoj11qC:HTf11PENH-j11/ENH j11CO1H!k1RHxd11$EhRHyj11GRMع1Hj1HERH*k11L\H=Q HJ H9tHn Ht H=! H5 H)HHH?HHtHe HtfD= u+UH=B Ht H=> dͩ ]wHtHGf1ff.fH?d@HCH]H5]1H]H5]1H]H5]1H5]H1HQHH= lH=i]1HfUSHHoHt)HH}Ht HEHHCH[]ff.fwUSHHHH߉|H[]USHHH6H߉LH[]ATUSGHw )HcHH`aHIH Il$(ID$HHHH [ID$@H]A\ATUHSH`dH%(HD$X1(uKHG HL`M,1HT$H5_t#HD$1HL$LHptt EHD$XdH3%(u@H`[]A\HD$H[HpHC Hx#ZHtHPxE HUH`4ff.@USHHhdH%(HD$X1(uQHD$HG HhH,1HL$HH5[t T$H4$HL$HPt,CHD$XdH3%(Hh[]f.1HHL$HߺH5ZHL$ HߺH5tZL$@HߺH5bZlHL$(HߺH5XZSHL$8HߺH54Z:HL$0Hߺ H5!Z!L$DHߺ H5ZL$FHH5ZDUSHHhdH%(HD$X1(u_HG H$HhH,1HHT$H5Y;t/Ht$H~$HHL$Ht&CHD$XdH3%(Hh[]@1H~HL$HߺH5WYHL$ HߺH5XL$@HߺH5XHL$(HߺH5XHL$8HߺH5XHL$0Hߺ H5XL$DHߺ H5XL$FHH5}Xg ff.fATUSHH`dH%(HD$X1(u{HG L`M,1HL$HH5dtSH|$HtBH,$|=/uW1HL$HLuxyCH9,$tH,f.CHD$XdH3%(urH`[]A\ú!H4$HHRHD$D/DwfDHLHtLOCiCQff.fAUATUHH5 WSHH(,dH%(HD$1{(HL$HT$D$HD$t111hu5HD$dH3%(H([]A\A]@;tH[ H(H|$HHetEHD$1Hx`IHtH;HtxHH{Ht ~HCt$HT$LIHt-D$u%LcLL+C EL(HcD$EHE^ff.AWAVAAUIATIUSHH(dH%(HD$1~Ht&HVH$T$t|$uTHE1HI$HxHt\H3E1{HtLH9tcHL$dH3 %(LukH([]A\A]A^A_HE1HH7I$HxHuLDHLP@IH9uD$ tH$*uH<$uNff.Hf.H(tvUHSHHHt u\E~#1fHEHP1LL$(LD$ ZYH|$ Ht$(1HJHxeT$0HL$ HHLD$ xHH|$HD$T$ @HH|$HD$t$ @H0C @CHD$8dH3%(uHH[]ff.fUSHHxdH%(HD$h1(uYHD$HG HhH,1HL$HLL$LD$H5n=`tH4$1HL$ Ht$CHD$hdH3%(u4Hx[]fDL$DD$HT$H4$&xC@USHH8dH%(HD$(1(HD$HG HhHHHT$H,HD$H5<P1LL$0LD$(ZYtRH<$Ht$1HQHx,L$DD$ HHT$cxC fDCHD$(dH3%(uH8[]ff.fAVAUATUHSHpdH%(HD$h1(t+EHD$hdH3%(Hp[]A\A]A^HG H$HD$HD$HXH(I,HL$1HLD$H5z;[tH4$1HL$ H`HD$8HH|$ H4$HT$HHIM Lt$ LLLHHLsHsHHCIIƅCuHߨ&fDHy HI$EfD1HT$LD$H5r:X{Ht$H~T$HHL$ HBDH4$HT$HD$HHD$HHpIMcLBD3I$LsEsfHV1HV~ff.AWAVAUATUSHH $HH $HH $HdH%(H$11III*H|$ 11LHD$ D$(HcD$(H\$ Ht1Ht,;/@</tJHuHIH=vY1H$1dH3 %( H1[]A\A]A^A_@HvT.:HDHL$01LL>ŅuIv B|;/FH$H޹LHHD$H|$LHHu$.LD$H|$L1H7111HLH|$I{H|$1HT$pHL$H|$MF1H71Ņ5=?H|$ŅL1LIHtoH|$E11ɺH5@7H$^IHu[HcHL HLr޾LALЉH|$xAVuA.uL'H|$FH|$ <H\HDH|$L11HAPlHfH|$AVuA.uLDH|$ :1H|$L1H5IH|$1HT$pH|$hH|$ ^fH|$1ɺ ŅH|$&AFYA.OL::f.H|$H|$AVuA.uLtkH|$ 0fH|$1ɺ  Ņ H|$vkL~Tff.fAUATUHSHdH%(H$1(t3FH$dH3%(H[]A\A]H,1HL$HT$LD$HD$H5"4tH|$uEfDH|$1HT$ "BHC L`MHD$HtPtvH8GtDh1@HCL9HT$HH:HHtۀxuHHt$LHu9LMDh1ۅ)[Ht$HLHCL9t7HúHLlHuH;;11DEP@HHt$LHuH|$1ɺn`USHHhdH%(HD$X1(u]HG HhH,1HL$HH5Z=tH|$u6CHD$XdH3%(uPHh[]FH4$1HL$HuHt$ HuCf.USHHdH%(HD$1(u=HG HhHt^,1HH56藺HH@H@ HHdeflatedHH@ X@!I$E4OHHHdeflatedHH@ H@I$H@E HHHtokenize@!H@I$H@ HH@ dEùHHHimplodedHH@ H@I$H@EdOceHI$HH@H@@redufP@d@EHHnk@H@I$H@@shrufHE迵edH@HI$H@H@@storfpE詸HHHimplodedH@H@ 踴,HV[ff.,HV;ff.,HV1ff.,HVff.AWAVIAUIATIUDSHH(dH%(HD$1HHH=m HH$D$蹴Ht"Im uXSIL0LhL`hH蚳H=n HH#HD$dH3%(uH([]A\A]A^A_@ _ff.@SHdH%(H$1誸(o@HPm (m oH m oP$m oX4m o`D%m ohT-#m opd5'm oxt=+m o,m o -m o.m o/m o%0m HH2m .m H+HLl HHJl Hkl HHl HVHl HxH!l HHKl ~veHHHHZipArchiHHfP H@H@ @"Hli HHDŽ$HD$HN H$HHDŽ$HDŽ$HDŽ$ HDŽ$(HDŽ$0HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$8HDŽ$@HDŽ$HHD$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$PHDŽ$H$:1HLH=i Hk ٰ11AH5xH=G11AH5+H=111AH5H=11AH H="A11HH=hHYg H=ej H1蛳H=Oj H5H=2j H5H=j H5İH=i H5z觰H=i H5g芰H=i H5TmH=i H5@PH=i H513H=li 1ɺ H5$@H=Mi H5H=0i H5߯H=i H5¯H=h H5襯H=h H H5膯H=h 1ɺH5lH=h H5OH=h H52H=fh H5H=Ih H5yH=,h H5hۮH=h H5W辮H=g H5E衮 H=g H53脮 H=g H5#g H=g H5JH=~g H5-H=ag H5H=Dg H5aH='g H5֭bH= g H5蹭H=f 1ɺH5蟭H=f H5肭H=f H5{eH=f H5hHH=|f H5T+H=_f H5?H=Bf H5*H=%f H5ԬH=f H5跬 H=e H5蚬 H=e H5} H=e H5` H=e H5C H=we H5&H=Ze H5 H==e H5zH= e H5hϫH=e H5Z貫H=d H5D蕫H=d H50xH=d H5[H=d H5 >H=rd H5!H=Ud H5H==d 1ɺ H5H=d H5ͪH=d H5谪H=c H5蓪H=c H5vH=c H5YH=c H5s<H=pc H5aH=Sc H5T H=6c H5F H=c H55ȩ H=b H5"諩 H=b H5莩 H=b H5q H=b H5TH=b H57H=kb H5H=Nb H5H=1b H5H=b H5èH=a H5覨H=a H5艨H=a 1ɺH5{oH=a H5fRH=a H5T5H=ia H5BH51_ H=蕩1H&H=S~1HH= "a aa H$dH3%(u H1[ATUSHH $H dH%(H$1H\$HHHI#HHH!%tHDHVHDHHH)蠪|$tIH11HڧHHt2 HLHOHxH肨HpH$dH3 %(u H []A\AUATUHSH8dH%(HD$(1(t)EHD$(dH3%(H8[]A\A]HG H$HD$HD$HD$L`MHHT$ H,HD$ H5!P1LL$ LD$/ZYrH\$ HCHHH|$L,$t2HJ9LHL#EHH$IHD$ 轣ff.fUSHHdH%(HD$1(uMHG HhHtc,1HH5\t.H4$HxHxCfCHD$dH3%(uH[]կAWAVAUATUSHH $HdH%(H$1˯HՁW$H9I1ỈHD$L賧…H<$HD$HH$H0H8H蠡1L 1֥H<$Lt$Pt\f.HD$L<H4Ht*Lmu!D$h%=@uHD$J48L舦HH9$wLF$1t)H$dH3 %(u+H[]A\A]A^A_@1L&1ɸ膡fDAWAVAUATUSHH $HHL$ HHHAdH%(H$1vLX Ht$@11HD$,.H$dH3%(D$,H[]A\A]A^A_ÐHT$fD1HL$hHT$xLD$pH5 {H|$xHXDH HD$fDH|$xE1I}H5 HD$HIHH|$xHD$@E1H|$@語IH|$xLl$@qޙff.ffHQ @HHHDff.1fAWAVAUATUSHH $HxHHdH%(H$h1H#xHH޺H=8I踛HSLHDIHHҘIH=IǹHM)Ll$`LLEL11HBD<`LI՗D$ 1LHT$wIHH}H1HHEIt$HDžH)HLHL$ L%B|3/HD$8MHE0HD$HHEHEXHEHHEhHHE(HE8HE@HEAWuA/uLt9,@H$hdH34%(D$ Hx[]A\A]A^A_#ɐHE0M@c@AWuA/uLu-D$ 9AGuA/uLt莕D$ Yff.UHSHH_t*H{Ht 蝚HCH;Ht ȘHHYHEH[]DAUATUS1HLgI<$t/ID$Ht%HHIݚHx:HHt I9ID$HH[]A\A]M`HH[]A\A]I|$M`HI赕1H&H1͗L赖AWAVAUATUSHH $H8H#IMdH%(H$(1HMHH޺H=H&HSHHDTIHH@H=|A<$rqL)HIHD$ LHHD$視11LHBD< AH|$I4H|$HT$ؘHD$H<Mt>HH5L迕Ht#xH0H|$HߕLl$Hu1LHHL1H=M HhHL(H@H@HMtPHHx IHLHIHI$I|$ID$Ml$CD,M&AWuR@{1H$(dH3 %(HuzH8[]A\A]A^A_fDH|$螕AW1uA/uLt4DAWuA/uLtˑ1p1AUATUSHdH%(HD$1:rD$HHIH*uvHT$HԖIHt\1LH?HHtgBH1H=K HXHL(H@H@7LHLH1HL$dH3 %(HuH[]A\A]LXAHHenabledZip1.15.4Zip version1.11.4Libzip headers versionLibzip library versionziprbindexcrcmtimecomp_sizecomp_methodencryption_methodP|lEmpty string as entry nameEmpty string as sourceInternal zip error returneds|lr|lZip Entryrr|sZip Directoryll|ssl|ssl|llz/z/|lsz/z/|llll|lsll|lP|lll|ll%s/%sw+bp|zIllegal archivesslssSstatusstatusSysnumFilescommentCREATEEXCLCHECKCONSOVERWRITEFL_NOCASEFL_NODIRFL_COMPRESSEDFL_UNCHANGEDFL_ENC_GUESSFL_ENC_RAWFL_ENC_STRICTFL_ENC_UTF_8FL_ENC_CP437CM_DEFAULTCM_STORECM_SHRINKCM_REDUCE_1CM_REDUCE_2CM_REDUCE_3CM_REDUCE_4CM_IMPLODECM_DEFLATECM_DEFLATE64CM_PKWARE_IMPLODECM_BZIP2CM_LZMACM_TERSECM_LZ77CM_WAVPACKCM_PPMDER_OKER_MULTIDISKER_RENAMEER_CLOSEER_SEEKER_READER_WRITEER_CRCER_ZIPCLOSEDER_NOENTER_EXISTSER_OPENER_TMPOPENER_ZLIBER_MEMORYER_CHANGEDER_COMPNOTSUPPER_EOFER_INVALER_NOZIPER_INTERNALER_INCONSER_REMOVEER_DELETEDOPSYS_DOSOPSYS_AMIGAOPSYS_OPENVMSOPSYS_UNIXOPSYS_VM_CMSOPSYS_ATARI_STOPSYS_OS_2OPSYS_MACINTOSHOPSYS_Z_SYSTEMOPSYS_Z_CPMOPSYS_CPMOPSYS_WINDOWS_NTFSOPSYS_MVSOPSYS_VSEOPSYS_ACORN_RISCOPSYS_VFATOPSYS_ALTERNATE_MVSOPSYS_BEOSOPSYS_TANDEMOPSYS_OS_400OPSYS_OS_XOPSYS_DEFAULTEM_NONEEM_AES_128EM_AES_192EM_AES_256P|sllEmpty string as filenameInvalid expression%s%c%sCannot read <%s>.P|laP|saEmpty string as patternremove_all_pathremove_pathadd_path%s%ssetPasswordcountgetStatusStringaddEmptyDiraddFromStringaddFileaddGlobaddPatternrenameIndexrenameNamesetArchiveCommentgetArchiveCommentsetCommentIndexsetCommentNamegetCommentIndexgetCommentNamedeleteIndexdeleteNamestatNamestatIndexlocateNamegetNameIndexunchangeArchiveunchangeAllunchangeIndexunchangeNameextractTogetFromNamegetFromIndexgetStreamsetExternalAttributesNamesetExternalAttributesIndexgetExternalAttributesNamegetExternalAttributesIndexsetCompressionNamesetCompressionIndexsetEncryptionNamesetEncryptionIndexcompflagsopsysattrentrynamelenpathtofilesnew_namecontentfilepathstartlengthoptionsdirnameAPI20170718,NTSzip_openzip_closezip_readzip_entry_openzip_entry_closezip_entry_readzip_entry_filesizezip_entry_namezip_entry_compressedsizezip_entry_compressionmethodzip_entryzip_entzip_dpmodeInvalid or uninitialized Zip objectCannot destroy the zip context: %sCannot destroy the zip contextFull extraction path exceed MAXPATHLEN (%i)Invalid argument, expect string or array of stringsEmpty string as new entry namePattern exceeds the maximum allowed length of %d charactersAt least one of the passed flags is invalid or not supported on this platformadd_path string too long (max: %i, %i given)remove_path option expected to be a stringEmpty string given as remove_path optionremove_path string is too long (max: %d, %zd given)add_path option expected to be a stringEmpty string given as the add_path optionadd_path string too long (max: %d, %zd given)Entry name too long (max: %d, %zd given)\\\\D2zip://Zip stream error: %sCan't set zip passwordzip wrapper;48|PxTʋ -Lw<ՌP  8 Yl s ( t 8Psώx+@mƏp) J`S\}Xِ] xUvHt48hȖ$L(txhȜH`Xx((P8 X\ ئ بd h 8@ جd h X (  H < h$Hdȶ,Th|8 t(,lxh(,(,X4H(\HphH0\(DlhHzRx $wFJ w?:*3$"Dh\p Hr`'H^$xCEAD vAA $-EAD ^CA$-EAD ^CA(@mFAA YIB0lFAD D|  AABA zRx $!(h{EAG AAK zRx $M!(4EAG AAE d.B0tؔ3FAA G  AABA  (!8ЕrFBA K(GPZ (A ABBE zRx P$لJH,FBE E(D0A8G`x 8A0A(B BBBH x<KDD Y AAJ DAABA 8 FBA D(DPu (A ABBD 3!8ИFBA D(DPu (A ABBD d!8lBBA D(G@w (A ABBC zRx @$HAFEE E(A0A8Gp 8A0A(B BBBA H(uFEE E(A0A8Gp 8A0A(B BBBG Ht(FBB B(A0A8D` 8A0A(B BBBA 8*FBA A(G`u (A ABBD zRx `$}B80l FBA A(Gu (A ABBD zRx (K!8oFBK A(DP (A ABBG (LEANP AAD EN l AH 0lEN ^ AF 0TءFAK D0  AABA 41FAA G I y  AABK zRx  $!$hOEAD BAAzRx   L``׀"A`|P=XUC(`EAGP AAA zRx P j!4 ģEAGPBXP`RXAPi AAA l?;(T hEAG@w AAJ zRx @ !( ̤EAG@ AAA `!( <EAGP AAA H;(0 ܥOEAJ AAJ zRx $!4 ̦#EAG`BhPpRhA` AAA zRx ` t;( EAG AAG zRx $O!4X EAGP@XP`RXAPk AAA $;@ WBBB A(D0Du 0A(A BBBD zRx (~B 4 TH BBB B(A0A8G L@L`Lb 8A0A(B BBBE $zRx b,i~Y8 0FBA D(G~ (A ABBH zRx (N~B(P EAGh AAI  P~!( <EAG0n AAC zRx 0 ~! >Eg D H A zRx  } D @l>Eg D H A X} D(xtEAGg AAJ  |}!(EAGP AAD ]};(EAG AAJ X}!(8dEAG@t AAE 9}!(xijEAG AAD }c(tEAG@ AAC h=}B@FBE A(A0DPE 0A(A BBBH zRx P(}"<txPBB A(A0y(G BBB zRx 0(|%](A BBB@LAA HABGH P ABA zRx  $N| ADB(|EAG@f AAK ,|!@`BBB K(D0F@ 0A(A BBBH (ĺ<кHPܺBBE E(D0D8G` 8A0A(B BBBE $pH EI1 CA 4 BAA G I   AABA Dp3FBA D(D`u (A ABBD @hPpRhA`L zB(XTEAG0~ AAA z!PFBB B(A0A8G L"@ 8A0A(B BBBE $zRx ",&z?`(bFBB B(A0A8G L"s 8A0A(B BBBB "K"P"A"$zRx ",yL2BBB B(A0A8G L!A 8A0A(B BBBH $zRx !, z#T8h4|0 (4P0tFBB B(A0A8G I! 8A0A(B BBBD $\[EDD FFAH8FBA A(F0~ (D ABBI H (D ABBA PFBB B(A0A8G I  8A0A(B BBBG $zRx  ,oy8FBA A(D@ (A ABBA GNUWW 0_@ h @tprz]   @` 0 Њ ˻@ ֻ@ b` P  ` @k )j` 8P D O`\ XZ` b`t mc` zPp  p` `} ǼP} ԼZ ޼z@ 0y x@ -v Hu [ u@ ops` r +\}\+\R}\R+}+}}P+}+}Ľ+Ľ+}+PP+}ͽս޽6^6R p @o@ o 'm 6n` F`l U@ h wp P ž$$= x>   o`@  p 3H ooooo >>>>>?? ?0?@?P?`?p?????????@@ @0@@@P@`@p@@@@@@@@@AA A0A@APA`ApAAAAAAAAABB B0B@BPB`BpBBBBBBBBBCC C0C@CPC`CpCCCCCCCCCDD D0D@DPD`DpDDDDDDDDDEE E0E@EPE`EpEEEEEEEEEFF F0F@F3$ X Xܵ! [`p$GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1x>͵ GA$3p1113M\GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113`GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYW\GA+GLIBCXX_ASSERTIONSGA+GLIBCXX_ASSERTIONS`t GA*FORTIFY W \+ -WB -W] My W -W -W -W -W W. XS Wk X X X  X X  X X4 XQ X'a!8s X Y XC Y )Y Y & )YH ]Yh 0Y-{ ]Y Y `Y- Y Y Ym!- YS Zw Z M! Z [\ Z{ N!- [\R ]u `\ 2NB ] #_ ]3 tN!1 #_R `q 0_r NJ ` a ` a. aJ aY a b a b c# bB N!i c d c O! d  ffA  dY  !Oy  ff  g  pfA  g  5i  gu2  5iX  j|  @i  j  :k  j*  =OB'  :kS  `l}  @k   O!  `l  m  `lo !!  mC  nc  mv !  n  6o  n  6o  o  @o  o;  pU  ob  p~  q  p1  O!  q  Or  rO  O" OrL crt Pr O O O" O" O"9 O"Z cr| r pr= O r cs& rF P!n cs St ps #P; St5 uZ `tr ^P! u u u P!: ui v u P; v wJ vOr P! w #y  x#3 P;b #y y 0y 7Q!& y\ z z XQ; z G}4 zWM QBn G} _} P} _} r}& `}? r}k c } QY c ! p08 .RBW  f  pR! f  5 pP R!s  N > R  N' Q P>n R   W  R! WB Lk ` R; L > P S!C >q ۉ @ AS! ۉ  Ċ/ G bScg Ċ  Њ SB  A \ T"  @  )T% @9 Y @l NT     ZT!  =  Hi    H  e  P! e0! Z! pw! ! ! ! ! œ" -" œg" " Г"!" " # H ## 7# t# # # $ C#$ 38$ {TBU$ C}$ $ P$ T!$ $ z% T?(% zD% ^% Us% % "% 2% U#% ""& >G& 0_& >& N& @& N& \&@ H' 0#'<' 0[' H|' x'` `' `' H'@ H ( 02(` 0W( Hz( H( H(` H( 0) 0") H>)` H[)` Hx) `) `) 0)@ x) x*@ x;* x^* `}*@ `*` `* `* `* 0 +@ 0+ 0,+ `C+` 0[+ Hr+@ 0+ 0+ 0+ 0+ `+ , -W3, -WQ, Wp, -W, -W, -W, -W, -W - `.- tM- `_- t- - - - - t. !. k@. [R. kr. . p. . ϴ. W/ ϴ)/ J/!XZ/ 0W\/ `Wo/ W/!/ / W/ //@!H 0 д0!.0 b3 ;0 H0!_0 u0 0 0h0!0 2 x>8`@H3 x> > PF M еh     !!a00000 1111@1U1k11 1111112$242M2_2z22!2222223 33(3<3P3i3~33333333 4484F4]4r44444455%515R5 a5s55 5555566 6.6G6[6}6,!6666 P 667 7-7=7U7j7t7!7777777 7778+8@8Q8i8s8~88888288899 9)9;9 U9b9j999"9999:.annobin_php_zip.c.annobin_php_zip.c_end.annobin_php_zip.c.hot.annobin_php_zip.c_end.hot.annobin_php_zip.c.unlikely.annobin_php_zip.c_end.unlikely.annobin_php_zip.c.startup.annobin_php_zip.c_end.startup.annobin_php_zip.c.exit.annobin_php_zip.c_end.exit.annobin_php_zipobj_get_filename.start.annobin_php_zipobj_get_filename.endphp_zipobj_get_filename.annobin_php_zip_free_prop_handler.start.annobin_php_zip_free_prop_handler.endphp_zip_free_prop_handler.annobin_zm_info_zip.start.annobin_zm_info_zip.endzm_info_zip.annobin_zm_shutdown_zip.start.annobin_zm_shutdown_zip.endzm_shutdown_zipzip_prop_handlers.annobin_php_zip_free_entry.start.annobin_php_zip_free_entry.endphp_zip_free_entry.annobin_php_zip_get_num_files.start.annobin_php_zip_get_num_files.endphp_zip_get_num_files.annobin_php_zip_status_sys.start.annobin_php_zip_status_sys.endphp_zip_status_sys.annobin_php_zip_status.start.annobin_php_zip_status.endphp_zip_status.annobin_php_zip_object_new.start.annobin_php_zip_object_new.endphp_zip_object_newzip_object_handlers.annobin_c_ziparchive_getStream.start.annobin_c_ziparchive_getStream.endc_ziparchive_getStreamc_ziparchive_getStream.cold.37.annobin_c_ziparchive_statIndex.start.annobin_c_ziparchive_statIndex.endc_ziparchive_statIndexc_ziparchive_statIndex.cold.38.annobin_c_ziparchive_statName.start.annobin_c_ziparchive_statName.endc_ziparchive_statNamec_ziparchive_statName.cold.39.annobin_c_ziparchive_addEmptyDir.start.annobin_c_ziparchive_addEmptyDir.endc_ziparchive_addEmptyDirc_ziparchive_addEmptyDir.cold.40.annobin_c_ziparchive_open.start.annobin_c_ziparchive_open.endc_ziparchive_openc_ziparchive_open.cold.41.annobin_php_zip_get_property_ptr_ptr.start.annobin_php_zip_get_property_ptr_ptr.endphp_zip_get_property_ptr_ptr.annobin_php_zip_get_gc.start.annobin_php_zip_get_gc.endphp_zip_get_gc.annobin_php_zip_object_free_storage.start.annobin_php_zip_object_free_storage.endphp_zip_object_free_storage.annobin_c_ziparchive_getArchiveComment.start.annobin_c_ziparchive_getArchiveComment.endc_ziparchive_getArchiveCommentc_ziparchive_getArchiveComment.cold.42.annobin_c_ziparchive_getNameIndex.start.annobin_c_ziparchive_getNameIndex.endc_ziparchive_getNameIndexc_ziparchive_getNameIndex.cold.43.annobin_php_zip_property_reader.start.annobin_php_zip_property_reader.endphp_zip_property_readerphp_zip_property_reader.cold.44.annobin_php_zip_read_property.start.annobin_php_zip_read_property.endphp_zip_read_property.annobin_php_zip_has_property.start.annobin_php_zip_has_property.endphp_zip_has_property.annobin_php_zip_get_properties.start.annobin_php_zip_get_properties.endphp_zip_get_properties.annobin_c_ziparchive_getCommentName.start.annobin_c_ziparchive_getCommentName.endc_ziparchive_getCommentNamec_ziparchive_getCommentName.cold.45.annobin_c_ziparchive_getCommentIndex.start.annobin_c_ziparchive_getCommentIndex.endc_ziparchive_getCommentIndexc_ziparchive_getCommentIndex.cold.46.annobin_zif_zip_entry_read.start.annobin_zif_zip_entry_read.endzif_zip_entry_readle_zip_entry.annobin_zif_zip_entry_open.start.annobin_zif_zip_entry_open.endzif_zip_entry_openle_zip_dir.annobin_zif_zip_entry_close.start.annobin_zif_zip_entry_close.endzif_zip_entry_close.annobin_zif_zip_close.start.annobin_zif_zip_close.endzif_zip_close.annobin_zif_zip_read.start.annobin_zif_zip_read.endzif_zip_read.annobin_zif_zip_open.start.annobin_zif_zip_open.endzif_zip_openzif_zip_open.cold.47.annobin_php_zip_free_dir.start.annobin_php_zip_free_dir.endphp_zip_free_dirphp_zip_free_dir.cold.48.annobin_php_zipobj_get_zip_comment.start.annobin_php_zipobj_get_zip_comment.endphp_zipobj_get_zip_comment.annobin_c_ziparchive_count.part.2.start.annobin_c_ziparchive_count.part.2.endc_ziparchive_count.part.2c_ziparchive_close.part.31c_ziparchive_unchangeArchive.part.18c_ziparchive_unchangeAll.part.17.annobin_c_ziparchive_count.start.annobin_c_ziparchive_count.endc_ziparchive_countc_ziparchive_count.cold.49.annobin_c_ziparchive_setEncryptionIndex.start.annobin_c_ziparchive_setEncryptionIndex.endc_ziparchive_setEncryptionIndexc_ziparchive_setEncryptionIndex.cold.50.annobin_c_ziparchive_setEncryptionName.start.annobin_c_ziparchive_setEncryptionName.endc_ziparchive_setEncryptionNamec_ziparchive_setEncryptionName.cold.51.annobin_c_ziparchive_locateName.start.annobin_c_ziparchive_locateName.endc_ziparchive_locateNamec_ziparchive_locateName.cold.52.annobin_c_ziparchive_setCompressionIndex.start.annobin_c_ziparchive_setCompressionIndex.endc_ziparchive_setCompressionIndexc_ziparchive_setCompressionIndex.cold.53.annobin_c_ziparchive_setCompressionName.start.annobin_c_ziparchive_setCompressionName.endc_ziparchive_setCompressionNamec_ziparchive_setCompressionName.cold.54.annobin_c_ziparchive_getExternalAttributesIndex.start.annobin_c_ziparchive_getExternalAttributesIndex.endc_ziparchive_getExternalAttributesIndexc_ziparchive_getExternalAttributesIndex.cold.55.annobin_c_ziparchive_getExternalAttributesName.start.annobin_c_ziparchive_getExternalAttributesName.endc_ziparchive_getExternalAttributesNamec_ziparchive_getExternalAttributesName.cold.56.annobin_c_ziparchive_setExternalAttributesIndex.start.annobin_c_ziparchive_setExternalAttributesIndex.endc_ziparchive_setExternalAttributesIndexc_ziparchive_setExternalAttributesIndex.cold.57.annobin_c_ziparchive_setExternalAttributesName.start.annobin_c_ziparchive_setExternalAttributesName.endc_ziparchive_setExternalAttributesNamec_ziparchive_setExternalAttributesName.cold.58.annobin_php_zip_get_from.isra.12.start.annobin_php_zip_get_from.isra.12.endphp_zip_get_from.isra.12php_zip_get_from.isra.12.cold.59.annobin_c_ziparchive_getFromIndex.start.annobin_c_ziparchive_getFromIndex.endc_ziparchive_getFromIndex.annobin_c_ziparchive_getFromName.start.annobin_c_ziparchive_getFromName.endc_ziparchive_getFromName.annobin_php_zip_extract_file.isra.13.start.annobin_php_zip_extract_file.isra.13.endphp_zip_extract_file.isra.13php_zip_extract_file.isra.13.cold.60.annobin_c_ziparchive_extractTo.start.annobin_c_ziparchive_extractTo.endc_ziparchive_extractToc_ziparchive_extractTo.cold.61.annobin_c_ziparchive_unchangeName.start.annobin_c_ziparchive_unchangeName.endc_ziparchive_unchangeNamec_ziparchive_unchangeName.cold.62.annobin_c_ziparchive_unchangeIndex.start.annobin_c_ziparchive_unchangeIndex.endc_ziparchive_unchangeIndexc_ziparchive_unchangeIndex.cold.63.annobin_c_ziparchive_unchangeAll.start.annobin_c_ziparchive_unchangeAll.endc_ziparchive_unchangeAllc_ziparchive_unchangeAll.cold.64.annobin_c_ziparchive_unchangeArchive.start.annobin_c_ziparchive_unchangeArchive.endc_ziparchive_unchangeArchivec_ziparchive_unchangeArchive.cold.65.annobin_c_ziparchive_deleteName.start.annobin_c_ziparchive_deleteName.endc_ziparchive_deleteNamec_ziparchive_deleteName.cold.66.annobin_c_ziparchive_setCommentName.start.annobin_c_ziparchive_setCommentName.endc_ziparchive_setCommentNamec_ziparchive_setCommentName.cold.67.annobin_c_ziparchive_setCommentIndex.start.annobin_c_ziparchive_setCommentIndex.endc_ziparchive_setCommentIndexc_ziparchive_setCommentIndex.cold.68.annobin_c_ziparchive_setArchiveComment.start.annobin_c_ziparchive_setArchiveComment.endc_ziparchive_setArchiveCommentc_ziparchive_setArchiveComment.cold.69.annobin_c_ziparchive_renameName.start.annobin_c_ziparchive_renameName.endc_ziparchive_renameNamec_ziparchive_renameName.cold.70.annobin_c_ziparchive_renameIndex.start.annobin_c_ziparchive_renameIndex.endc_ziparchive_renameIndexc_ziparchive_renameIndex.cold.71.annobin_c_ziparchive_addFromString.start.annobin_c_ziparchive_addFromString.endc_ziparchive_addFromStringc_ziparchive_addFromString.cold.72.annobin_c_ziparchive_getStatusString.start.annobin_c_ziparchive_getStatusString.endc_ziparchive_getStatusStringc_ziparchive_getStatusString.cold.73.annobin_c_ziparchive_close.start.annobin_c_ziparchive_close.endc_ziparchive_closec_ziparchive_close.cold.74.annobin_c_ziparchive_setPassword.start.annobin_c_ziparchive_setPassword.endc_ziparchive_setPasswordc_ziparchive_setPassword.cold.75.annobin_php_zip_entry_get_info.isra.33.start.annobin_php_zip_entry_get_info.isra.33.endphp_zip_entry_get_info.isra.33.annobin_zif_zip_entry_compressionmethod.start.annobin_zif_zip_entry_compressionmethod.endzif_zip_entry_compressionmethod.annobin_zif_zip_entry_compressedsize.start.annobin_zif_zip_entry_compressedsize.endzif_zip_entry_compressedsize.annobin_zif_zip_entry_name.start.annobin_zif_zip_entry_name.endzif_zip_entry_name.annobin_zif_zip_entry_filesize.start.annobin_zif_zip_entry_filesize.endzif_zip_entry_filesize.annobin_php_zip_register_prop_handler.constprop.34.start.annobin_php_zip_register_prop_handler.constprop.34.endphp_zip_register_prop_handler.constprop.34zip_class_entry.annobin_zm_startup_zip.start.annobin_zm_startup_zip.endzm_startup_zipzip_class_functions.annobin_php_zip_add_file.isra.27.part.28.constprop.36.start.annobin_php_zip_add_file.isra.27.part.28.constprop.36.endphp_zip_add_file.isra.27.part.28.constprop.36.annobin_c_ziparchive_addFile.start.annobin_c_ziparchive_addFile.endc_ziparchive_addFilec_ziparchive_addFile.cold.76.annobin_c_ziparchive_deleteIndex.start.annobin_c_ziparchive_deleteIndex.endc_ziparchive_deleteIndexc_ziparchive_deleteIndex.cold.77.annobin_php_zip_glob.start.annobin_php_zip_glob.endphp_zip_glob.cold.78.annobin_php_zip_pcre.start.annobin_php_zip_pcre.endphp_zip_pcre.cold.79.annobin_php_zip_add_from_pattern.start.annobin_php_zip_add_from_pattern.endphp_zip_add_from_patternphp_zip_add_from_pattern.cold.80.annobin_c_ziparchive_addPattern.start.annobin_c_ziparchive_addPattern.endc_ziparchive_addPattern.annobin_c_ziparchive_addGlob.start.annobin_c_ziparchive_addGlob.endc_ziparchive_addGlob.annobin_get_module.start.annobin_get_module.endarginfo_ziparchive_openarginfo_ziparchive_setpasswordarginfo_ziparchive__voidarginfo_ziparchive_addemptydirarginfo_ziparchive_addfromstringarginfo_ziparchive_addfilearginfo_ziparchive_addglobarginfo_ziparchive_addpatternarginfo_ziparchive_renameindexarginfo_ziparchive_renamenamearginfo_ziparchive_setarchivecommentarginfo_ziparchive_getarchivecommentarginfo_ziparchive_setcommentindexarginfo_ziparchive_setcommentnamearginfo_ziparchive_getcommentindexarginfo_ziparchive_getcommentnamearginfo_ziparchive_unchangeindexarginfo_ziparchive_unchangenamearginfo_ziparchive_statnamearginfo_ziparchive_statindexarginfo_ziparchive_extracttoarginfo_ziparchive_getfromnamearginfo_ziparchive_getfromindexarginfo_ziparchive_getstreamarginfo_ziparchive_setextattrnamearginfo_ziparchive_setextattrindexarginfo_ziparchive_getextattrnamearginfo_ziparchive_getextattrindexarginfo_ziparchive_setcompnamearginfo_ziparchive_setcompindexarginfo_ziparchive_setencryption_namearginfo_ziparchive_setencryption_indexzip_functionsarginfo_zip_openarginfo_zip_closearginfo_zip_readarginfo_zip_entry_openarginfo_zip_entry_closearginfo_zip_entry_readarginfo_zip_entry_filesizearginfo_zip_entry_namearginfo_zip_entry_compressedsizearginfo_zip_entry_compressionmethod.annobin_zip_stream.c.annobin_zip_stream.c_end.annobin_zip_stream.c.hot.annobin_zip_stream.c_end.hot.annobin_zip_stream.c.unlikely.annobin_zip_stream.c_end.unlikely.annobin_zip_stream.c.startup.annobin_zip_stream.c_end.startup.annobin_zip_stream.c.exit.annobin_zip_stream.c_end.exit.annobin_php_zip_ops_write.start.annobin_php_zip_ops_write.endphp_zip_ops_write.annobin_php_zip_ops_flush.start.annobin_php_zip_ops_flush.endphp_zip_ops_flush.annobin_php_zip_ops_stat.start.annobin_php_zip_ops_stat.endphp_zip_ops_stat.annobin_php_zip_ops_close.start.annobin_php_zip_ops_close.endphp_zip_ops_close.annobin_php_zip_ops_read.start.annobin_php_zip_ops_read.endphp_zip_ops_read.annobin_php_stream_zip_opener.start.annobin_php_stream_zip_opener.endphp_stream_zip_opener.cold.0.annobin_php_stream_zip_open.start.annobin_php_stream_zip_open.endzip_stream_wopsderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__php_stream_zipio_opsphp_stream_zip_openzip_module_entryphp_zip_pcre__dso_handlephp_stream_zip_wrapperphp_stream_zip_openerphp_zip_glob_DYNAMIC__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE__php_stream_stat_pathzip_unchange_allglobfree@@GLIBC_2.2.5zip_get_namezip_set_file_comment_php_stream_alloc_zval_ptr_dtorstrncpy@@GLIBC_2.2.5zip_error_code_systemzend_parse_parameters_ITM_deregisterTMCloneTablezip_set_archive_commentzend_is_truestrcpy@@GLIBC_2.2.5_php_stream_mkdirphp_check_open_basedirzend_list_closezend_object_std_initap_php_snprintfzend_new_interned_string_php_stream_writezend_declare_property_null_emalloc_80_edatazip_error_strerrorzip_set_file_compression_estrdup_safe_emallocstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4zip_file_add_zval_dtor_funczip_renamezend_fetch_resourcestrchr@@GLIBC_2.2.5php_info_print_table_rowzip_unchange_archivevirtual_file_ex_emalloc_32zip_stat_index_zend_hash_initadd_assoc_string_exzip_error_fini_zend_hash_str_addzend_register_internal_classzend_spprintfphp_stream_context_get_optionphp_pcre_execzend_register_resourcezend_hash_index_findzip_set_default_passwordexpand_filepathzip_libzip_versionzip_get_archive_comment__memcpy_chk@@GLIBC_2.3.4zend_declare_class_constant_longzend_ce_countablezip_source_bufferzip_add_dirzip_file_get_external_attributes__gmon_start__php_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14zend_hash_destroyzend_register_list_destructors_exzip_discardzip_source_free__xstat@@GLIBC_2.2.5_emalloc_16zip_source_file__zend_mallocstrncasecmp@@GLIBC_2.2.5_zval_get_long_funcphp_unregister_url_stream_wrapperzend_hash_str_find_php_stream_scandir_emalloc_8zip_file_set_external_attributesget_module_ecallocphp_register_url_stream_wrapperphp_stream_dirent_alphasortphp_basenamezip_error_clearzend_std_get_propertieszend_object_std_dtorzip_fopen__bss_start_array_init_convert_to_string_efree_emalloc_40zip_fclosezip_statzip_unchangezip_get_errorzend_class_implementszip_file_set_encryption_php_stream_open_wrapper_exzip_get_file_comment_php_stream_freepcre_get_compiled_regexzip_freadzip_deleteadd_next_index_string_estrndupphp_dirnamezip_file_get_errorzip_name_locatezip_fopen_indexglob@@GLIBC_2.27zend_empty_string_safe_ereallocexecutor_globalsphp_statadd_assoc_long_ex_ITM_registerTMCloneTablezip_strerrorzip_addphp_info_print_table_startzend_get_std_object_handlers__cxa_finalize@@GLIBC_2.2.5zend_hash_findzip_error_code_zipstrstr@@GLIBC_2.2.5_zend_hash_updateobject_properties_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``48  @@@ HoUo`dHHnB33p xx>x>s>>~PFPFMMg ее hh4P       0! !P 0- al(3 ::5t#PK!rF-mmmodules/ftp.sonuȯELF>@D@Xe@8 @     888$$ Std Ptd<<QtdRtd  GNUU(;i\s(iDۈ/j@ jm| pCEqX~*?i:( 8Uy H1~, 7~(wF"`DOpp]m}jP(T{*DSreaK&X!D x !!__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezend_object_std_dtorzend_throw_errorzend_object_std_initobject_properties_initphp_info_print_table_startphp_info_print_table_rowphp_info_print_table_endzend_parse_parametersobject_init_ex__stack_chk_failzend_argument_value_errorzend_ce_value_errorzend_throw_exceptionphp_error_docrefstrlenmemcpyzval_ptr_dtorzend_try_assign_typed_ref_str_zend_new_array_0add_next_index_string_efreezend_hash_next_index_insertphp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_php_stream_seek_php_stream_tell_php_stream_open_wrapper_ex_php_stream_freeunlinkzend_fetch_resource2_exzend_zval_type_namezend_argument_type_errorzend_string_init_internedzend_register_internal_class_exstd_object_handlerszend_register_long_constantget_modulepoll__errno_locationphp_socket_strerrorrecvSSL_readSSL_get_errorSSL_shutdownmemmove__ctype_b_locSSL_get_SSL_CTXSSL_newSSL_set_fdSSL_get_sessionSSL_set_sessionSSL_connectacceptcloseSSL_copy_session_idSSL_free_ecallocphp_network_connect_socket_to_hostgetsocknamememchrzend_hash_str_updateSSL_writesendstrpbrkap_php_slprintfTLS_client_methodSSL_CTX_newSSL_CTX_set_optionsSSL_CTX_ctrlSSL_CTX_freestrchr_estrdupstrrchr_estrndupzend_spprintfap_php_snprintfgetpeernamesscanfstrtoulphp_any_addrphp_sockaddr_sizebindlistenphp_network_connect_socketinet_ntopstrtollgmtime_rmktimeERR_clear_errorERR_get_errorERR_error_string_n_php_stream_fopen_tmpfile_php_stream_write_safe_emalloc_php_stream_getc_php_stream_putc_php_stream_eoflibargon2.so.0libssl.so.1.1libcrypto.so.1.1libc.so.6_edata__bss_startftp.soOPENSSL_1_1_0GLIBC_2.14GLIBC_2.4GLIBC_2.3GLIBC_2.2.5/opt/cpanel/ea-libzip/lib64:/opt/cpanel/ea-libicu/lib:/opt/cpanel/libargon2/lib64u mg mii ii ui  N M  @ tH NP  ` h Op   `Q   0R   v   0S @  S  ( T0  @ ƸH  UP  ` иh Up @ ڸ V   `W   pX   PY @  PZ   ( [0  @ H \P  ` "h 0^p  . v ` 7 `  ? b  J Pe  Z @f  c( j0  @ oH  hP ` ` wh np   l   0w   w   `o   0p  ( p0  @ H PxP  ` ȹh Pxp  ѹ q @  pP  Y  ` Yh    Y  @ YH `   Y   Y( @ `   ݷ ! O Y    @ X ݷ Y     ݷ ! O@ YH `  s  ݷ ! O Y  @ s` x ݷ ! O Y  Y   @ ` x ݷ ! O Y    8 ݷ@ !X O Y  ( Y  s @ X ݷ` !x O Y  s   ݷ !8 O` Yh  / 9 C Y  /@ YH `  I R Y  W @ YH ` / Y  c Y  c` Yh  / Y  Y @ YH ` k t  } (   ( @ }` (x   `!Yh!@ p!s!YD!]!d    % , S g! !(!0!8!@!H!P!X! `! h! p! x!!!!!!!!!!!!!!!!! !!!"!#!$ !&(!'0!(8!)@!*H!+P!,X!-`!.h!/p!0x!1!2!3!4!5!6!7!8!9!:!;!<!=!>!?!@!A!B!C!D!E !F(!G0!H8!I@!JH!KP!LX!M`!Nh!Op!Px!Q!R!T!U!V!W!X!Y!Z![!\!]!^!_!`!a!b!c!d!e!f !h(!iHH HtH52 %3 hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahb% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%ݿ D%տ D%Ϳ D%ſ D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% DPH5p11{1ZP]HrH5r1CHrH5r1)ZH5r1 H5~r1q H 1H5pH8K H 1H5fpH8. H11Htwm H11HSwL H 1H5pH8 Hk 1H5oH8#H11Hv)H- 1H5oH8tH11HvH 1H5noH86H11H|vuH 1H50oH8lH 1H5oH8H11H!vHV 1H5nH8H11HuH 1H5nH8_kH 1H5znH8B)H޸ 1H5]nH8% H 1H5@nH8H11HNuGH 1H5nH8H11Hu aH5=n11H- 1H5mH8tH11HtH5m1SH׷ 1H5VmH86H11Hdt]H5m1H 1H5mH8H11HtH5;m1/$H+ 1H5lH8rH.m11I$AD$H 1H5blH8*H11HpsiH11HOsHpH5|l1pHl 1H5kH8H11HrH5&l1H 1H5kH8]lH11Hr!H5k1!H 1H5?kH8 H11HMrF"H5zk1n"Hj 1H5jH8"I11Hq$H5$k1S$H 1H5jH8[6$H 1H5vjH8>$H11Hq}%H 1H58jH8q%H11HFq?w%H{ 1H5iH8%H11Hq%H5j1)w&H% 1H5iH8lZ&H 1H5iH8O|*H11Hp*Hʳ 1H5IiH8*PH 1H5+iH8ZX++H6q11(H1U1HpHp11101H9p1Hfq161H!q16Hvq11;H4q11~:1HHo1dRHkq11EE1Vf.H= Hz H9tHF Ht H=Q H5J H)HHH?HHtH HtfD=% u+UH= Ht H=. d ]wSHHHt^H[ATUSGH )HcHH@HHHhIH HHH [ID$ H]A\ff.UHH5hSH8,dH%(HD$(1HL$HT$HD$LL$ LD$HD$ ZtWHT$ Ht$H|$,1HHtLHH5 Hǃl!H@!zHEHXHD$(dH3%(uH8[]Ef.UHH5gSH8,dH%(HD$(1HL$HT$HD$LL$ LD$HD$ ZtWHT$ Ht$H|$L0HHtLHH5˴ Hǃl!H@!HEHXHD$(dH3%(uH8[]Ef.SHH5fH ,H [ dH%(HD$1HT$LD$t?HD$HHPHHD$HtoHtQHt4H5d1HD$dH3%(uUH [f.H8!CHDD!1C@!1C&fDUHH5eSH8,H j dH%(HD$(1HD$ HPHD$P1LL$(LD$ZYt;H$HHXH!LD$ HL$HHT$Ht$5t'EHD$(dH3%(u&H8[]fEUDAUIH5EiATUSH,H dH%(HD$1HVtxH$HHXHHU:IHtuHuHx HHHLHHHH{HCHkD+I]AEHD$dH3%(u(H[]A\A]fDAE\ff.UHH5dSH(,H dH%(HD$1HLL$LD$Pt1H$HHXHHT$Ht$H%;t!EHD$dH3%(u H([]EDUHH5icSH(,H dH%(HD$1HLL$LD$t1H$HHXHkHT$Ht$HU9t!EHD$dH3%(u H([]DEDSHH5bH ,H ; dH%(HD$1HLL$LD$t&H$HHxHHT$Ht$H9HD$dH3%(uH [kff.USHH5(bH(,H dH%(HD$1HLL$LD$`tDH$HHhHHT$Ht$He:Ht0H@@%CHD$dH3%(uH([]À2CDUHH5iaSH(,H dH%(HD$1HLL$LD$t1H$HHXHHT$Ht$H:t!EHD$dH3%(u H([]EDUHH5`SH8,H : dH%(HD$(1HT$HHD$ P1LL$ LD$0ZYt>HD$HHXHL$HT$Hߋt$ :t-HD$ EHEHD$(dH3%(u#H8[]fDKE%DATUHH5_SH0,H h dH%(HD$(1HT$LL$HD$HD$ LD$ HD$HHxHHT$HD$ Ht$HHE:Ht$ AHt7HD$HH{uUH{HD$ HC@@%C1EEHD$(dH3%(uH0[]A\fDHhATUHH5^SH ,H X dH%(HD$1HLL$LD$teH$HHxH HT$Ht$KIHtVEHEI4$HtLfHHH3HuLHD$dH3%(uH []A\E:f.ATUHH5^SH0,H x dH%(HD$(1HT$D$HHD$P1LL$0LD$(ZYtpHD$HHxH2L$HT$ Ht$JIHt[EHEI4$HtLHHH3HuLHD$(dH3%(uH0[]A\E:f.AUATIH5\USHH,H v dH%(HD$81HT$LL$LD$*HD$HHxH\HT$Ht$=JIHAD$I$I}tYLHl$ fDI<$HHxH;t3D$(HD$ H3H&tHHuH;uLHD$8dH3%(uHH[]A\A]@AD$AUIH5_ATUSH,H F dH%(HD$1HtxH$HHXH{H0IHtuH%Hx HHHLHHHH{HCHkD+I]AEHD$dH3%(u(H[]A\A]fDAE ff.AUATIH5ZUSHH,H F dH%(HD$81HT$HHD$0HD$8HD$8PHD$8PHD$8P1LL$8LD$0H HD$HHXHH5LZHD$H8HHtMLl$(IEH;@!LL$0uPItjHL$ HT$EHHGt^AD$HD$8dH3%(HH[]A\A]fDMtItEL1HxLL$0뗐HD$0E1f~AD$1H1H)IHD$0BWAUATUHH5)YSHH,H dH%(HD$81HT$HHD$0HD$8HD$8PHD$8PHD$8P1LL$8LD$0 H HD$HHXH8iADH5XHD$H88IHt]Ll$(IEH@!LL$0u^ItxHL$ HT$ELHǃd!HePHHtfHEEHD$8dH3%(HH[]A\A]@MtItUL1LLL$0뉐HD$0E1w HEEf.1LaLYIHD$0$AUIH5xWATUSHH,H Ƥ dH%(HD$81HD$0HHD$(HD$0PHD$0PHD$0PHD$(P1LL$8LD$(PH H$HHhHLd$(ID$H@!HD$0Hu HD$0IH|$HVH5VHEE11HH+LL$0HL$ HT$HHEDH߅AEHD$8dH3%()HH[]A\A]f.H^IH|$HVH5UHEE11HHtUHt$0H1HLL$0DfH|$;AENH|$(H|$H~UH5tUHEE11tHHsHL$H[U11NAE1HHIHD$0AUIH5UATUSHH,H F dH%(HD$81HD$0HHD$(HD$0PHD$0PHD$0PHD$(P1LL$8LD$(H H$HHXHHl$(HEHj@!HD$0Hu HD$0HH|$H*TH5 THEE11 IH|LL$0HL$ HT$ALHHHd!KHcImAEHD$8dH3%(fHH[]A\A]HMHH|$HpSH5eSHEE11mIHHt$0H1LLL$0/fDLKH|$HǃX!IEAE.@LHǃX!H|$(H|$HRH5RHEE11IH7HL$HR11~AE1LL IHD$0=7ATIH5%VUSH,H x dH%(HD$1H8t]H$HHXHMH!d!H߅uL/HHcHth!uDH.I,$AD$HD$dH3%(uLtYtAEHD$8dH3%(HH[]A\A]DMtItUL1LLL$0fAE@HD$0E1RHT$Ht$H1IHD$0Hx&ff.ATUHH5MSHP,H Ț dH%(HD$H1HT$HHD$8HD$@HD$@PHD$@PHD$8P1LL$HLD$`RH HD$HHXHACDH5LHD$ H8jHHtZLD$0I@H(@!LL$8uXIHT$(Ht$@HHǃd!9Ht}HEHEHD$HdH3%(HP[]A\MtItmLH1LD$H $LL$8LD$H $~@HD$8E1iCHEEoHT$(Ht$@HL$HL$/L$HL$HIHD$8xWff.@AUATIH5vKUSHH,H Ƙ dH%(HD$81HD$0HHD$(HD$0PHD$0PHD$0PHD$(P1LL$8LD$(PH H$HHXHHl$(HEHHH|$HJH5jJHEE11IH@!LL$0IHT$Ht$ALHHHd! FHcHt!LzHǃX!HI,$AD$HD$8dH3%(HH[]A\A]f.MnItIL1LLL$0Qf.HD$0E16AD$DHT$Ht$H-IHD$0Hx|ff.AUATIH5IUSHH,H dH%(HD$81HT$HHD$8HD$8PHD$8PHD$0P1LL$@LD$0IH HD$HLhM$H\$0HCHHH|$HHH5bHHEE11HHteHt$HT$ LAH;Ht.AD$HD$8dH3%(u.HH[]A\A]D{AAAD$-ff.fUHH5GSH8,H j dH%(HD$(1HD$ HPHD$P1LL$(LD$ZYt;H$HHXHLD$ HL$HHT$Ht$+.t'EHD$(dH3%(u&H8[]fEUDUHH5GSH(,H dH%(HD$1HLL$LD$Pt1H$HHXHHT$Ht$H-t!EHD$dH3%(u H([]hEDUHH5iFSH(,H dH%(HD$1HLL$LD$t1H$HHXHHT$Ht$H-t!EHD$dH3%(u H([]EDSHH5FH ,H ; dH%(HD$1HLL$LD$tOH$HHPHHD$Ht}HuGH|$GH<D!CHD$dH3%(ueH [HH|$uIHH4H8!CH|$GHw\<@!C~H5wCH1hf^H5DH1HF>H5CH1(&H5B1ff.S>HdH%(H$1HHHHV H=ZD1HHD$H,GH$H H$dH3%(u H[SdH}AعHp H=CH H ooHoP oX0o`@ohP) op`oxp) oo) ) ooH)=. )% Hp HH HH )-ݏ )5 ) )  ) ) ` Hm AعH=BAع H=BAع H=BAعHH=BfAع1ҾH=BKAع H=B-AعH=BAع1Ҿ H=zBAع H=gBAع H=VB1[@UHH5vESH,H ʎ dH%(HD$1Ht'H$HHXHzH t%EHD$dH3%(u$H[]YEDSHH5AH ,H + dH%(HD$1HT$LD$t-HD$HHxHt$p CHD$dH3%(uH [WSHH5%@H ,H dH%(HD$1HLL$LD$Qt-H$HHxHHT$Ht$#CHHD$dH3%(uH [@SHH5?H ,H dH%(HD$1HLL$LD$t-H$HHxH1HT$Ht$#CHHD$dH3%(uH [4@ATUHH5$CSH,H x dH%(HD$1H8t6H$HH{HtnH{A24HCEt%EHD$dH3%(uH[]A\@@HE @AWAAVIAUATIUSHH8i8!dH%(H$(1Ll$t$LD$ŅB unHc8Ht$ H C1H1)@l$~l!u=1LLDH$(dH3 %(H8[]A\A]A^A_D9;tkp!tHP!tH@D$ HtLHDHƉctC~tu7Hof.!EHx!D|$ @u;D$ ,LD$D$It@H?11ff.AT1UHSHHHtHcHHcAHt2 tQ HufD t@ t{HHuI)ċuHHLHH~Mu1BHHCHHBH~{ t@u HDž[]A\HHHtHHBH믐SH@HSHHHDHtHHDptHDxt uH0kdPD8H_HHt HH[ÐHdH%(H$1HHc81H?H1H$dH3 %(u Hd@HdH%(H$11HHc8!1H5?H1)H$dH3 %(u 1HAVAUATUHSHHDgdH%(H$1Al!u0H$dH3 %(HHĠ[]A\A]A^fDp!tHx!HHHHMsH^t!Hx!HHHLHl$HHXǃ @i8!D7H|$D$Dt$D$ AŅ@kEunHc8H$KHf=1H1S!Dl$E~Ht$HT$DSADc;{KH1FfDuxH?f.C,HD$fD$ 1fD$DHx!HHsH=11nHH1ff.@AUIATIU!SH8dH%(HD$(1kLd$fHD$HøjDLE1j1jjLD$0ݽH HsH{A1HHD$ HT$ H)L8!ǃH!HCHǃHD%u@ǃHt[uOHT$(dH3%(HuTH8[]A\A](蓿A1HH?91;tԼH1jHtGSHH HtBHǃ H Ht&Hǃ [fff.@AWAVAUATUSHHHH|$HdH%(HD$81辽 HHH,*HWIIHL)HxHhHIt$HL(IHxH@Hh:AD/H|$HL$ H567L|$ D$(HL$WL9Ll$fL;HH)}IHH¾=HH)^IHkLH)HoHH+IwHIHD$IEI}IEImsLHL$HAD-H|$H)I^Ll$ D$(蔽I9K1HL$8dH3 %(uHH[]A\A]A^A_襾DAWIHAVAUATAUSHDl!dH%(HD$1Eti97p!tWHP!tFLD`ILLLƉ=tM~vuALi1LDHL$dH3 %(uyH[]A\A]A^A_Ãu/,LD$$D$otH611藼f!rLx!+aAWIAVAUATUSHdH%(HD$1HIAHHILD,$Ai$8!D$ku ޼n.D$~HHDL&HHt HH)uDHL$dH3 %(uH[]A\A]A^A_菼ff.@AWIAVMAUIATIUHH54SH1HHtH[]A\A]A^A_@MtSA?tMKD4H=wH54L豸HuMMHHp4L8I1IwMH1H94L豼AuHcLLAƅIDž*90ff.fHtSE11ɺH53HHu 1H[DǃHt݁uH Ht‰D$ 蜻D$ Hǃ 1DAWAVAUATUSH(dH%(HD$1HtEI͋l!HIIMƅt!MLHH573u,1HL$dH3 %(H([]A\A]A^A_DǃHt=t=KuMLHH52tǃHim1큻@Z@AH E2H5=2*.ǃHtdAHH 1H51ǃHNHHp!H軹HD$HzH|$T螷H|$1ɺ,H|$NH|$Hx!譴Hx!H3ƵHD$HD$Hx!pHx!袹ǃ!t!AHH -H50ǃHAHH 0H50lpǃHRV-cp!uTHx!*fH|$D$1fT$,fD$ѵOH/11JHx!获Hx!ff.fHtgSH>E11ɺǃH!H5/H[u1[ǃH>tほt1D1ff.fHH HtfDATE11ɺUH5%/SHtǃHtiu] HuDH} t H聵IHt9HnH A$ H []A\fD1@1DH8H ff.@HH HtfDUE11ɺSH5;.HHtmǃHtWuKH"誴Ht5Hh"H4HtH)HHH H[]1@1DHtWSIH H5-Htt1D1ff.fAUATUSHHHIIHH5F+HǃHH"薱HHh"HIHtdII)I} HޮLHHHLkH{HHC#BD+HA$"H[]A\A]f.1HH[]A\A]H} HsHLHHHH{HCHk踲D+볐HtWSIHH5 *Hu1[@ǃH~t⁻t1D1ff.fSH dH%(HD$1Htz~vIH1H|$H)裭HL$HtQIH5s)HtNH|$HǃttD1H\$dH3%(uH [H|$D$ 貰D$ AUATUSHXdH%(HD$H1HtMH~HHHIH1H(?H膭x"LcHHH5(u,@1HL$HdH3 %(HX[]A\A]ǃHtMtdLLάHx HH.HHHPH@Hhs<@ujtH@ulD(I$-cBHHx HHHIt Ht H)LH)H몋HAt t 딉At ft off.@Ht9 ttH #t1f.H #UASH5'HHu1H[]f.ǃH^tׁuˉ ATH UHSHH H`dH%(HD$X1D$ HT$ HGHGpHH)H;谩x+f .E11ɺHH5K&u!1Ht$XdH34%(H`[]A\fǃH~tɁuHL@tŪHII,$@tDhtHl$ H5%LHE(HMHPHE LMPLE1輪D$ZYLHHD$Hu0H HHHH9u틃D!D$ t D$ D$f ǃ E11ɺHH5%ǃHmH<(ttHt<(upDbHjD$ Et1D11fwA8uHEutT$ Ht$ H般ff HD$H9D: ff.Ht7t tLJ +LJ 1ff.fAVAUATUSHH dH%(H$1 tLJ  ٧{1ҾHHŋ EAă Ll$ {1L٪L!LD‰D$ lHT$ LD踨D賧f{ DeD$"K L$HLRH6#PCPDK1DC JH LcLHH5#ǃHHP!jfǃ L LH1E1H8!D$LDHD$ HT$jLD$ QZYt>DeHP!H$dH3 %(HH []A\A]A^D1gAؾ1HHZ$1cDHH1ި@Hs.L$ LL$bDD$"1LH!9LfAE躥xLcLHH5q!Lxo躧襧t:ǃH(t$uH [1]A\Q[H]A\Hff.@ATUSHdH%(H$1H=IHHH5ǃHHHt"H@HH]tDXtH\$PH5nHHCSHKPHSLK1LC 踣ZY1l$dll$`D$pHt$H|$HD$ͣHHtM@ Ld$HHI)ċE Dd$PD$pʠH$dH3 %(uHĐ[]A\Hf.HtWSIHH5HD˝Hu2ѡ(tdA1HH1ɠtLHǺ4L1H1蜠G股fHUHSHH>tujU{tu+>Ht HDžP!HơH1[]DHHG{ǃHH;ǃtfD1DAWMAVIAUATIUHSH1H,HD$HDH!)HIHHP!MLLHHǃH=}„t ==LHIHH@ 1E1E1H$AuH$H;LcMIt\LHL9rQH4$H|$LMH$KL=  uA @@HHDH9ufE1LHE1H|$HP!YHL[]A\A]A^A_LHHH|$11HP!賚LHSLuIH|$譝Hǃt=-="LE1AIZLHH|$HP!9H[]A\A]A^A_\ff.HIH5DIIHH5HHH HDLff.HIH5DAWAVAUATUSHHHT$dH%(HD$81Ht1IDHIEMu91HHHP!1HL$8dH3 %(`HH[]A\A]A^A_HHHtHP!M~|LT$ 1LHLLT$qxLT$LcHH5L_ǃHE^5@HL$MHH5{ ǃH=t }HHHHH@ HD$@uHT$H;LcMIAtHt$LLI9tnDHL$LHIHD$H9wfDL9|$vHD$ LL)HHD$LIHt4LLLL)M|$~A|$ u LM|$贘fL9|$%HT$LLEHHUHǃHP!H9=t =芚f.AWAVAUATUSHHHL$dH%(HD$81Ht2IDHIDMuAE1LHHP!1HL$8dH3 %(MHH[]A\A]A^A_H0IHtHP!M~|LT$ 1LHLLT$艗{LT$LcHH5LTǃH:^*MLHH5ǃH=t }LHIHH@ E1AHD$I*ILLpA uuHP ILIDH|$ u`H|$AtNLL)HLt$At$LHDD$L HL9,LADD$vMt At$HT$LHHL9LHHǃHP!I|82HH輗ff.1HqAWIAVIDAUATIUDSHHu(E1LHHP!1H[]A\A]A^A_fHIHtHP!MLHߺH5}tǃHt=t }zLHIH`H@ E1HD$I1ILLxA uuHP ILIDLubLAtRL)HL|$AuLHDD$LHL9LADD$yfMtAuHT$LHHL9LHyHǃHP!I]`82KHHF-fHtSHP!HHtHX!Ht h!u,;t!u+VHH1[ff@Hx!H_;1DHdH%(HD$1H4$D$Ku 辔ncD$~HL$dH3 %(uH蘔AWAVAUATUSHHHP!u,tvLe uHLD D`!LcMt^It%AHX!LLtI9ǃH!HHv1HP!H[]A\A]A^A_@AuA tTHHAHǃHP!H%t=t=uǃH!@HX! DJl- f@ uRIDL9t-A4$A uHX!@ t4 ːA4$@D`!HX!蜐A4$DAWAVAUATUSH8dH%(HD$(1HIHP!HIIELHtoHǃt=tG=t@E1LHHP!1HT$(dH3%(\H8[]A\A]A^A_fDDHtHQIHtHLL$1HH LLL$譏pLL$LcHH5 L6IǃH/^@MLHH5 ǃH=t }HL3HHP!HLX!ǃ`!ǃH!`1ܐff.AVAUATUSHP!HpJHP!E1AHh @ELMHL)HHX!ˍu?HX!軑t.HUMe u uHME MeHH@HP!MuTHHǃHP!{tH=t=u4ǃH![]A\A]A^HV vLHVHL9t_HP!H ǃH!HP![1]A\A]A^@HP!LHߋpHP HL9u[]A\A]A^fHP!(@AWAVAUATUSH8dH%(HD$(1Ht1IDHIIMu>1HHqHP!1HT$(dH3%(9H8[]A\A]A^A_DHHHtM~{LL$1LHLLL$XxLL$LcHH5LaǃHG^7MLHH5oǃH|=t }HHHHP!HLX!ǃ`!ǃH!薍HHCannot directly construct FTP\Connection, use ftp_connect() or ftp_ssl_connect() insteadFTP\Connection is already closedmust be one of FTP_TIMEOUT_SEC, FTP_AUTOSEEK, or FTP_USEPASVADDRESSmust be either FTP_ASCII or FTP_BINARYNo nbronous transfer to continuemust be of type int for the FTP_TIMEOUT_SEC option, %s givenmust be greater than 0 for the FTP_TIMEOUT_SEC optionmust be of type bool for the FTP_AUTOSEEK option, %s givenmust be of type bool for the FTP_USEPASVADDRESS option, %s givenenabledFTP supportFTPS supportmust be greater than 0OlOssOsOlpOl|zOpOs|bOrs|llstreamrt+rb+wtwbOpp|llError opening %sOss|llOsr|llrbOpp|lOlzFTP\ConnectionFTP_ASCIIFTP_TEXTFTP_BINARYFTP_IMAGEFTP_AUTORESUMEFTP_TIMEOUT_SECFTP_AUTOSEEKFTP_USEPASVADDRESSFTP_FAILEDFTP_FINISHEDFTP_MOREDATAObftp8.1.34API20210902,NTSftp_connectftp_ssl_connectftp_loginftp_pwdftp_cdupftp_chdirftp_execftp_rawftp_mkdirftp_rmdirftp_chmodftp_allocftp_nlistftp_rawlistftp_mlsdftp_systypeftp_fgetftp_nb_fgetftp_pasvftp_getftp_nb_getftp_nb_continueftp_fputftp_nb_fputftp_putftp_appendftp_nb_putftp_sizeftp_mdtmftp_renameftp_deleteftp_siteftp_closeftp_quitftp_set_optionftp_get_optionvaluefromtoremote_filenamelocal_filenamemodeoffsetenabledirectoryrecursivefalseresponsenullpermissionscommandusernamepasswordhostname21timeout90SSL read failedgetsockname failed: %s (%d)SSL write failed%s %s QUITTLSAUTHSSLSSL/TLS handshake failedPBSZPROTUSERPASSREINSYSTPWDSITE EXECCWDCDUPMKDRMDCHMOD %o %sSITE%ldALLOTYPEEPSVPASV%lu,%lu,%lu,%lu,%lu,%lusocket() failed: %s (%d)bind() failed: %s (%d)getsockname() failed: %s (%d)listen() failed: %s (%d)|2|%s|%hu|EPRT%u,%u,%u,%u,%u,%uPORTSIZEMDTM%4u%2u%2u%2u%2u%2uDELERNFRRNTOSSL_shutdown failedSSL_read on shutdown: %sSSL_read on shutdown: %s (%d)NLSTLIST -RLISTMLSDRETRRESTSTORAPPEdata_accept: failed to retrieve the existing SSL contextdata_accept: failed to create the SSL handledata_accept: failed to retrieve the existing SSL sessiondata_accept: failed to set the existing SSL sessiondata_accept: SSL/TLS handshake failedMissing pathname in MLSD responseMalformed fact in MLSD responseFailed to create the SSL contextFailed to create the SSL handlephp_connect_nonb() failed: %s (%d)Unable to create temporary file. Check permissions in temporary files directory.@1@@@;8xT~|$=T΅4 J@Ɔx!_D ׇh ( O T Q  f \  h$p:x(#L-7Ǎ,$ thTDHĔtTĖt DXT4( 4| d d<   dh 4 $4   p D8ıt<`|(`4ԹԻ0`|t40|$p0T@`D$8Xd|T,@d4T$@t$8LHTl $zRx $Xt@FJ w?:*3$"Dpz0\hEUxlES(TdFAA PIBADEz(EKDP AAD zRx P %(0EKDP AAD ` pEN0 AK zRx 0 4@EKDPcXF`RXAPT AAJ >8ČFLA A(D@ (A ABBG zRx @$`>(TEKD@v AAD zRx @ B>(EKD@v AAD `@> EN0k AA F(TpEAN@ AAA #>(EKD@v AAD !>4`EKDPcXF`RXAPW AAG >0 FAK DP  AABG zRx P$~0FAK D@  AABD zRx @$~<FAK DPhXF`RXAP  AABD g~8D(FBK A(Dp (A ABBE zRx p$~8pFLA A(D@ (A ABBG }>L FBK A(DpcxXFFUp (A ABBG }VLhlFBA K(DpcxXFFUp (A ABBE <}VLؕyFLA A(DpuxFFFUp (A ABBK }VL0FLA A(DpuxFFFUp (A ABBH }V0`FKA D0  AABF zRx 0$}iDFAK DpcxXFFUp  AABD zRx p$l}VLxLFLA A(DpuxFFFUp (A ABBF L^}VDȝFAK DpcxXFFUp  AABD X}VL8 lFBK A(DpuxFFFUp (A ABBK  J}VL CFBK A(DpcxOFFUp (A ABBF p<}V4 EKDPcXF`RXAPT AAJ < F}>(L EKD@v AAD D}>( EKD@v AAD B}> hEN0 AH ` H}5  AVk AA ( ,LEF(D `EKD0b AAH zRx 0 |> EN0o AA 4 | |AY EN0r AA  | ( <EN0r AA  | 0` FAK D0q  AABE  H BEE B(D0A8J 8A0A(B BBBA , BCD  ABD ( |AD lG_ A ` diG\ A @| BBB A(D0JL 0A(A BBBG zRx ({VH mFJD H(D`xhKpDxBN` (A ABBA D QJ|JL`dFBB B(A0A8G 8A0A(B BBBA $zRx ,uz:H?FHB B(D0A8DP 8A0A(B BBBA H8BEB B(A0A8DP 8A0A(B BBBA H BEE E(D0K8I@N 8C0A(B BBBE $JX O AF PHLFBB B(A0A8D`v 8A0A(B BBBF zRx `(y4|sJr D p8bKH  ABG HH ,aKN p AAD HBBB D(G0J 0A(A BBBB zRx (t0JDG I CAF P`<(BEE B(D0D8IP| 8D0A(B BBBA 8K0A(B BBB zRx P(tlx4HFBB B(A0A8Dc 8A0A(B BBBA H`DFBB B(A0A8Dd 8A0A(B BBBH `QEH B(D0D8GPd 8A0A(B BBBC  HP tJS C h4xH j A HPDFBB B(A0A8G@ 8C0A(B BBBE HFBB B(A0A8Dp 8A0A(B BBBG `lFBB A(A0 (A BBBD z (C BBBE a (F BBBC HLFBB B(A0A8Dp^ 8A0A(B BBBF GNUNM tN O `Q 0R v 0S@ S T Ƹ U иU@ ڸV `W pX PY@ PZ  [ \ "0^ .v` 7` ?b JPe Z@f cj o h` wn l 0w w `o 0p p Px ȹPx ѹq@ pP Y Y Y@ Y@@Y@Y@ @ݷ!O Y@ @ݷ Y@ @ݷ!OY@sݷ!O Y@sݷ!OYY @@ݷ!O Y @@ݷ!O Y( Ys@ݷ!O Ys@ݷ!OY/@9 CY/@ YIRYW@DY/@Yc@ Yc@ Y/@ YDY Yk@t@}@(}@(Xgu 7   o`  5 !H h. oooo 7788 808@8P8`8p88888888899 909@9P9`9p999999999:: :0:@:P:`:p:::::::::;; ;0;@;P;`;p;;;;;;;;;<< <0<@<P<`<p<<<<<<<<<== =0=@=P=`=p=========>d4Y@ sYD]dGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a17 GA$3p1113@DxGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113yGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*GOW*@DYDGA*cf_protectionGA+stack_clashGA!stack_realignGA+omit_frame_pointer GA*FORTIFY@DzGA+GLIBCXX_ASSERTIONSGA*@DYDGA*GA!GA* N x+ SMB SM] @Dy SL SM SM SM SM N) ?NI N\ @D YD @D ?N N  @Nd !/ YDJ Dc N O! D O fP D  fPB ZQb D| ZQ +R D> +R $S (E> $S- SH fE>^ Sz T E> T U E U U) E>? U\ Vw =F> V [W {F> [W oX F) oXF FYa Fw FY FZ F FZ x[ G x[5 t\R -G>j t\ )^ kGV )^ _ GV  _$ yb= HVQ ybo Ie mHV Ie ;f Hi  ;f  h8  ,IVM  hh  i  IV  i  k  IV  k  n#  .JV:  nX  Sot  JV  So  +p  J>  +p  p  K>-  pI  qc  VK>x  q  s  K5  s  s-  sK  h  s  u  u  v  K>  v  )w#  L8  $L[  ?L|  $L  $L  )w  w  ?L  w  Lx% IL : LxW xr x x@     @ @@ `# `4 `D `V h z `@   ` `   @ " 6` F Y l `}  `@  ` y  SM SM SL5 SMQ SMh SM SM SM y z y z { z& {H |h |{ | } |l } }  }i" }i8 }S Al }x SLV A     ۃ( L:D ۃ_ x         0 cG L4Y cs   ь ь    * ? X So S   ? ?   y- yF ] u    d  d  ) ~B N ~f |      ˞ ˞& 3< 3Z v   > M    6 O [ 6Mo        ' > ĪS Īm ެ ެ k k   5 O g  < <  `M M M ! B NN m{ v   @x  q   v 0^   Оc ps \ `  c  h O N$ U2 `Q @!V [%  f Pez pX w j `o6  U V 0R T  O  b: @~   6 lE PmN pPa@!v Px!  0w `W Q ( @c 0S p v YDD S pCx    0p  4  cz  !  `y -  nC<  ?H  pxW  PYg  @ft  PZ(1  Ъ   sL  _' 78` h. 7 7 > @D X     !@!!a     !,!H![!u!!!!! !""7"@"b"w"""""'""#.#G# c#r##### ### $$1$J$"f$x$$$$$$%%.%G%j%%%%%%%&-&H&Y&l&&&&&&&' '('!4'P'e'w'''''!''()(0(K(X(m((( x (!(((()).)?) R)j)~)).annobin_php_ftp.c.annobin_php_ftp.c_end.annobin_php_ftp.c.hot.annobin_php_ftp.c_end.hot.annobin_php_ftp.c.unlikely.annobin_php_ftp.c_end.unlikely.annobin_php_ftp.c.startup.annobin_php_ftp.c_end.startup.annobin_php_ftp.c.exit.annobin_php_ftp.c_end.exit.annobin_ftp_object_destroy.start.annobin_ftp_object_destroy.endftp_object_destroy.annobin_ftp_object_get_constructor.start.annobin_ftp_object_get_constructor.endftp_object_get_constructor.annobin_ftp_object_create.start.annobin_ftp_object_create.endftp_object_createftp_object_handlers.annobin_zm_info_ftp.start.annobin_zm_info_ftp.end.annobin_zif_ftp_connect.start.annobin_zif_ftp_connect.endphp_ftp_cezif_ftp_connect.cold.5.annobin_zif_ftp_ssl_connect.start.annobin_zif_ftp_ssl_connect.endzif_ftp_ssl_connect.cold.6.annobin_zif_ftp_get_option.start.annobin_zif_ftp_get_option.endzif_ftp_get_option.cold.7.annobin_zif_ftp_login.start.annobin_zif_ftp_login.endzif_ftp_login.cold.8.annobin_zif_ftp_pwd.start.annobin_zif_ftp_pwd.endzif_ftp_pwd.cold.9.annobin_zif_ftp_chdir.start.annobin_zif_ftp_chdir.endzif_ftp_chdir.cold.10.annobin_zif_ftp_exec.start.annobin_zif_ftp_exec.endzif_ftp_exec.cold.11.annobin_zif_ftp_raw.start.annobin_zif_ftp_raw.endzif_ftp_raw.cold.12.annobin_zif_ftp_mkdir.start.annobin_zif_ftp_mkdir.endzif_ftp_mkdir.cold.13.annobin_zif_ftp_rmdir.start.annobin_zif_ftp_rmdir.endzif_ftp_rmdir.cold.14.annobin_zif_ftp_chmod.start.annobin_zif_ftp_chmod.endzif_ftp_chmod.cold.15.annobin_zif_ftp_alloc.start.annobin_zif_ftp_alloc.endzif_ftp_alloc.cold.16.annobin_zif_ftp_nlist.start.annobin_zif_ftp_nlist.endzif_ftp_nlist.cold.17.annobin_zif_ftp_rawlist.start.annobin_zif_ftp_rawlist.endzif_ftp_rawlist.cold.18.annobin_zif_ftp_mlsd.start.annobin_zif_ftp_mlsd.endzif_ftp_mlsd.cold.19.annobin_zif_ftp_systype.start.annobin_zif_ftp_systype.endzif_ftp_systype.cold.20.annobin_zif_ftp_fget.start.annobin_zif_ftp_fget.endzif_ftp_fget.cold.21.annobin_zif_ftp_nb_fget.start.annobin_zif_ftp_nb_fget.endzif_ftp_nb_fget.cold.22.annobin_zif_ftp_get.start.annobin_zif_ftp_get.endzif_ftp_get.cold.23.annobin_zif_ftp_nb_get.start.annobin_zif_ftp_nb_get.endzif_ftp_nb_get.cold.24.annobin_zif_ftp_nb_continue.start.annobin_zif_ftp_nb_continue.endzif_ftp_nb_continue.cold.25.annobin_zif_ftp_fput.start.annobin_zif_ftp_fput.endzif_ftp_fput.cold.26.annobin_zif_ftp_put.start.annobin_zif_ftp_put.endzif_ftp_put.cold.27.annobin_zif_ftp_nb_fput.start.annobin_zif_ftp_nb_fput.endzif_ftp_nb_fput.cold.28.annobin_zif_ftp_nb_put.start.annobin_zif_ftp_nb_put.endzif_ftp_nb_put.cold.29.annobin_zif_ftp_append.start.annobin_zif_ftp_append.endzif_ftp_append.cold.30.annobin_zif_ftp_rename.start.annobin_zif_ftp_rename.endzif_ftp_rename.cold.31.annobin_zif_ftp_delete.start.annobin_zif_ftp_delete.endzif_ftp_delete.cold.32.annobin_zif_ftp_site.start.annobin_zif_ftp_site.endzif_ftp_site.cold.33.annobin_zif_ftp_set_option.start.annobin_zif_ftp_set_option.endzif_ftp_set_option.cold.34.annobin_register_class_FTP_Connection.start.annobin_register_class_FTP_Connection.endregister_class_FTP_Connectionclass_FTP_Connection_methods.annobin_zm_startup_ftp.start.annobin_zm_startup_ftp.end.annobin_zif_ftp_cdup.start.annobin_zif_ftp_cdup.endzif_ftp_cdup.cold.35.annobin_zif_ftp_pasv.start.annobin_zif_ftp_pasv.endzif_ftp_pasv.cold.36.annobin_zif_ftp_size.part.2.start.annobin_zif_ftp_size.part.2.endzif_ftp_size.part.2zif_ftp_mdtm.part.3.annobin_zif_ftp_size.start.annobin_zif_ftp_size.endzif_ftp_size.cold.37.annobin_zif_ftp_mdtm.start.annobin_zif_ftp_mdtm.endzif_ftp_mdtm.cold.38.annobin_zif_ftp_close.start.annobin_zif_ftp_close.end.annobin_get_module.start.annobin_get_module.endext_functionsarginfo_ftp_connectarginfo_ftp_ssl_connectarginfo_ftp_loginarginfo_ftp_pwdarginfo_ftp_cduparginfo_ftp_chdirarginfo_ftp_execarginfo_ftp_rawarginfo_ftp_mkdirarginfo_ftp_chmodarginfo_ftp_allocarginfo_ftp_nlistarginfo_ftp_rawlistarginfo_ftp_fgetarginfo_ftp_nb_fgetarginfo_ftp_pasvarginfo_ftp_getarginfo_ftp_nb_getarginfo_ftp_nb_continuearginfo_ftp_fputarginfo_ftp_nb_fputarginfo_ftp_putarginfo_ftp_appendarginfo_ftp_nb_putarginfo_ftp_sizearginfo_ftp_renamearginfo_ftp_deletearginfo_ftp_set_optionarginfo_ftp_get_option.annobin_ftp.c.annobin_ftp.c_end.annobin_ftp.c.hot.annobin_ftp.c_end.hot.annobin_ftp.c.unlikely.annobin_ftp.c_end.unlikely.annobin_ftp.c.startup.annobin_ftp.c_end.startup.annobin_ftp.c.exit.annobin_ftp.c_end.exit.annobin_my_recv.start.annobin_my_recv.endmy_recv.annobin_ftp_readline.start.annobin_ftp_readline.endftp_readline.annobin_ftp_getresp.part.0.start.annobin_ftp_getresp.part.0.endftp_getresp.part.0.annobin_my_send.part.3.start.annobin_my_send.part.3.endmy_send.part.3.annobin_data_available.part.7.start.annobin_data_available.part.7.enddata_available.part.7data_writeable.part.8.annobin_data_accept.start.annobin_data_accept.enddata_acceptdata_accept.cold.10.annobin_ftp_open.start.annobin_ftp_open.end.annobin_ftp_gc.start.annobin_ftp_gc.end.annobin_ftp_mlsd_parse_line.start.annobin_ftp_mlsd_parse_line.endftp_mlsd_parse_line.cold.11.annobin_single_send.start.annobin_single_send.end.annobin_my_send.start.annobin_my_send.endmy_send.annobin_ftp_putcmd.start.annobin_ftp_putcmd.endftp_putcmd.annobin_ftp_quit.start.annobin_ftp_quit.end.annobin_ftp_login.start.annobin_ftp_login.endftp_login.cold.12.annobin_ftp_reinit.start.annobin_ftp_reinit.end.annobin_ftp_syst.start.annobin_ftp_syst.end.annobin_ftp_pwd.start.annobin_ftp_pwd.end.annobin_ftp_exec.start.annobin_ftp_exec.end.annobin_ftp_raw.start.annobin_ftp_raw.end.annobin_ftp_chdir.start.annobin_ftp_chdir.end.annobin_ftp_cdup.start.annobin_ftp_cdup.end.annobin_ftp_mkdir.start.annobin_ftp_mkdir.end.annobin_ftp_rmdir.start.annobin_ftp_rmdir.end.annobin_ftp_chmod.start.annobin_ftp_chmod.end.annobin_ftp_alloc.start.annobin_ftp_alloc.end.annobin_ftp_type.start.annobin_ftp_type.endftp_type.annobin_ftp_pasv.part.6.start.annobin_ftp_pasv.part.6.endftp_pasv.part.6.annobin_ftp_pasv.start.annobin_ftp_pasv.end.annobin_ftp_getdata.start.annobin_ftp_getdata.endftp_getdata.annobin_ftp_size.start.annobin_ftp_size.end.annobin_ftp_mdtm.start.annobin_ftp_mdtm.end.annobin_ftp_delete.start.annobin_ftp_delete.end.annobin_ftp_rename.start.annobin_ftp_rename.end.annobin_ftp_site.start.annobin_ftp_site.end.annobin_data_available.start.annobin_data_available.end.annobin_ftp_ssl_shutdown.start.annobin_ftp_ssl_shutdown.endftp_ssl_shutdownftp_ssl_shutdown.cold.13.annobin_data_close.start.annobin_data_close.enddata_close.annobin_ftp_genlist.start.annobin_ftp_genlist.endftp_genlistftp_genlist.cold.14.annobin_ftp_nlist.start.annobin_ftp_nlist.end.annobin_ftp_list.start.annobin_ftp_list.end.annobin_ftp_mlsd.start.annobin_ftp_mlsd.end.annobin_ftp_get.start.annobin_ftp_get.end.annobin_ftp_put.start.annobin_ftp_put.end.annobin_ftp_append.start.annobin_ftp_append.end.annobin_ftp_close.start.annobin_ftp_close.end.annobin_data_writeable.start.annobin_data_writeable.end.annobin_ftp_nb_continue_read.start.annobin_ftp_nb_continue_read.end.annobin_ftp_nb_get.start.annobin_ftp_nb_get.end.annobin_ftp_nb_continue_write.start.annobin_ftp_nb_continue_write.end.annobin_ftp_nb_put.start.annobin_ftp_nb_put.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zif_ftp_cdupdata_availablezif_ftp_set_optionftp_mlsd_parse_linezif_ftp_nb_fgetftp_systftp_reinitzif_ftp_fget__GNU_EH_FRAME_HDR_finizif_ftp_putzif_ftp_connectzif_ftp_rmdirzif_ftp_login_GLOBAL_OFFSET_TABLE_zif_ftp_systypezif_ftp_nb_continuezif_ftp_nlistzif_ftp_mdtmzif_ftp_nb_fputzif_ftp_renamezif_ftp_mkdirzif_ftp_chmodzif_ftp_pwdzif_ftp_rawzif_ftp_ssl_connectftp_nb_continue_readzif_ftp_nb_getftp_nb_continue_writezif_ftp_nb_putftp_openzif_ftp_get_optionphp_ftp_module_entryzif_ftp_close__TMC_END____dso_handlezif_ftp_sizezif_ftp_allocftp_gcftp_quitzif_ftp_chdirzif_ftp_sitezif_ftp_pasvzm_info_ftpzif_ftp_execzif_ftp_deleteftp_listzif_ftp_getzif_ftp_appendsingle_senddata_writeablezif_ftp_rawlistzif_ftp_fputzif_ftp_mlsdzm_startup_ftp_DYNAMICphp_network_connect_socketzend_fetch_resource2mktime@@GLIBC_2.2.5_php_stream_seekTLS_client_method@@OPENSSL_1_1_0ERR_get_error@@OPENSSL_1_1_0SSL_CTX_free@@OPENSSL_1_1_0close@@GLIBC_2.2.5zend_string_init_internedmemchr@@GLIBC_2.2.5php_network_connect_socket_to_hostzend_register_long_constant_zend_new_array_0__gmon_start__getpeername@@GLIBC_2.2.5add_next_index_stringERR_clear_error@@OPENSSL_1_1_0_estrdupERR_error_string_n@@OPENSSL_1_1_0strpbrk@@GLIBC_2.2.5SSL_get_session@@OPENSSL_1_1_0zend_object_std_dtorSSL_write@@OPENSSL_1_1_0recv@@GLIBC_2.2.5unlink@@GLIBC_2.2.5zend_spprintfSSL_set_fd@@OPENSSL_1_1_0SSL_CTX_ctrl@@OPENSSL_1_1_0php_info_print_table_row_ITM_deregisterTMCloneTableobject_init_ex_php_stream_eof_ecallocSSL_new@@OPENSSL_1_1_0strlen@@GLIBC_2.2.5_ITM_registerTMCloneTablezend_zval_type_name_php_stream_putcSSL_read@@OPENSSL_1_1_0ap_php_snprintflisten@@GLIBC_2.2.5__ctype_b_loc@@GLIBC_2.3__cxa_finalize@@GLIBC_2.2.5php_sockaddr_sizestrrchr@@GLIBC_2.2.5sscanf@@GLIBC_2.2.5SSL_set_session@@OPENSSL_1_1_0zend_try_assign_typed_ref_str_php_stream_writepoll@@GLIBC_2.2.5gmtime_r@@GLIBC_2.2.5strerror@@GLIBC_2.2.5zend_argument_type_errorSSL_CTX_set_options@@OPENSSL_1_1_0zend_hash_str_updategetsockname@@GLIBC_2.2.5SSL_connect@@OPENSSL_1_1_0php_info_print_table_endzend_hash_next_index_insertphp_error_docrefSSL_copy_session_id@@OPENSSL_1_1_0_php_stream_freephp_info_print_table_startzend_throw_errorphp_file_le_streammemmove@@GLIBC_2.2.5strchr@@GLIBC_2.2.5_php_stream_fopen_tmpfilesocket@@GLIBC_2.2.5php_file_le_pstream_php_stream_tellSSL_free@@OPENSSL_1_1_0_estrndup__errno_location@@GLIBC_2.2.5__bss_start__stack_chk_fail@@GLIBC_2.4zend_object_std_initsend@@GLIBC_2.2.5zval_ptr_dtorzend_parse_parameterszend_argument_value_errorSSL_shutdown@@OPENSSL_1_1_0zend_ce_value_error_safe_emallocSSL_get_SSL_CTX@@OPENSSL_1_1_0object_properties_init_efreeSSL_CTX_new@@OPENSSL_1_1_0php_any_addrstrtoll@@GLIBC_2.2.5bind@@GLIBC_2.2.5php_socket_strerrorget_module_edataap_php_slprintf_php_stream_open_wrapper_exSSL_get_error@@OPENSSL_1_1_0accept@@GLIBC_2.2.5strtoul@@GLIBC_2.2.5inet_ntop@@GLIBC_2.2.5_php_stream_getcmemcpy@@GLIBC_2.14zend_fetch_resource2_exstd_object_handlerszend_register_internal_class_exzend_throw_exception.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.got.plt.data.bss.comment.gnu.build.attributes88$.o``48 P @ 5HoUodnBh.h.H x77s77@~>>0@D@Dp  <XX       8!0@!@ ! 0-a$@ 81 x:)+d,PK!C&..modules/xml.sonuȯELF>@@'@8 @جج   X  888$$ Std Ptd44QtdRtd  GNU5O+ anpju"K@(.DH@ q!d KLMNSTUY]_cf]2OD+~a ?XD pqX|9BE +AkŖ7o~dgWݪ8T1]?BAdL텥^?J^9x=PR3 e]W=I"Hs\=K *yPuR wUDj3, efF"_  0 0 b  S P ( w h  # h [ p  M 0 p  H @  Ѓ  ~ `*  { 7 ` x @  Є  @__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_efree_erealloczend_throw_errorzend_std_get_propertieszend_object_std_initobject_properties_initphp_info_print_table_startphp_info_print_table_rowphp_info_print_table_endphp_next_utf8_charmemcpy__stack_chk_failzend_parse_parametersstrlenzend_argument_value_errorzval_ptr_dtorphp_XML_Parsephp_XML_ErrorString_try_convert_to_stringzval_get_long_funcphp_error_docrefphp_XML_ParserFreezend_object_std_dtor_zend_new_array_0_safe_emallocphp_XML_SetElementHandlerphp_XML_SetCharacterDataHandlerzend_try_assign_typed_ref_arrzend_string_init_internedzend_register_internal_class_exstd_object_handlerszend_objects_not_comparablezend_register_long_constantzend_register_string_constantexecutor_globalszend_call_functionzend_hash_index_findzend_hash_str_findadd_next_index_longzend_hash_str_updateXML_GetUserDataconvert_to_longadd_assoc_string_exadd_assoc_str_exadd_assoc_long_exzend_hash_next_index_insertstrncpyobject_init_exphp_XML_ParserCreate_MMphp_XML_SetUserDatazend_binary_strcasecmpphp_XML_SetProcessingInstructionHandlerphp_XML_SetDefaultHandlerphp_XML_SetUnparsedEntityDeclHandlerphp_XML_SetNotationDeclHandlerphp_XML_SetExternalEntityRefHandlerphp_XML_SetStartNamespaceDeclHandlerphp_XML_SetEndNamespaceDeclHandlerphp_XML_GetErrorCodephp_XML_GetCurrentByteIndexphp_XML_GetCurrentLineNumberphp_XML_GetCurrentColumnNumberphp_strtoupperzend_hash_update_estrdup_zend_handle_numeric_str_exzend_hash_index_updatezend_hash_str_addget_modulexmlStrdupxmlStrncatxmlStrlenxmlStrndupxmlFreexmlStrncatNewzend_spprintfxmlMallocxmlGetPredefinedEntityxmlGetDocEntityxmlStopParser_emalloc_128xmlCreatePushParserCtxtxmlCtxtUseOptionsphp_XML_ParserCreatephp_XML_ParserCreateNSphp_XML_SetCommentHandlerxmlParseChunkxmlCtxtGetLastErrorphp_XML_GetCurrentByteCountphp_XML_ExpatVersionxmlFreeDocxmlFreeParserCtxtlibargon2.so.0libxml2.so.2libc.so.6_edata__bss_startxml.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5LIBXML2_2.6.0LIBXML2_2.6.5LIBXML2_2.4.30/opt/cpanel/ea-libzip/lib64:/opt/cpanel/ea-libicu/lib:/opt/cpanel/libargon2/lib64@ii ui L* @C C  @ H pCP `CX ` Ch mp @  V f  h g  }( @c0 ` @ H  gP  ` hh gp   h    i  Ȳ iв   `j  ؍ k  ( k0  @ (H @lP  ` ډh Hp   `N `  l   ȳ PIг   m  : pn  X( `m0  @ sH cP  ` h  Jp   F    @ H `  ב ȵ  @ H      m  ( @ ` Šx ˊ      ъ@ ߊ   ȸ  G   ( @ GX ` ڎh p x  ؔ    ( D V m ȹ й ع я   H " 8 h N h ( 0 8 ɐ@ H P X *` ;h p Еx P l l    ő ݑ  Ⱥ к غ  $ H x x  A \ w ( 0 ̒8 Ж@ H P  X ` h "p 1x H L p   b m x  Ȼ л ػ   ɓ H x ړ    И( 0 %8 =@ IH ^P qX (` `h p x   ȼ ؼ w w ~ `( w8 @ }h w x  }    Q @ ?(  0 PC` F    " %ȿ )п 8ؿ ? A G  ( 0 8 @ H P X  `  h  p x     Y N    L    _  M  V    ( ]0  8 !@ #H $P cX O` &h 'p dx ( P * + e , - . / ` W 0 f 1 2 3 4 [ 5 6 7 9( :0 ^8 ;@ <H =P >X X` @h Bp Cx D E F G b H I JHH HtH5‰ %É hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhS%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%݃ D%Ճ D%̓ D%Ń D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% D%݂ D%Ղ D%͂ D%ł D% D% D% D% D% D% D% D% D%} D%u D%m D%e D%] D%U D%M D%E D%= D%5 D%- D%% D% D% D% D% D% D% D% D% DPH5$J11{1ZPMHLEH5LE1H2EH5>E1HAEH5@E1ZH52J11 HEJ11_AD$' HI11 HdH%(H$1HHHHo H=51HHD$H=H$H H$dH3%(u H[SdHAعHp1H=|5Hqs Hn ooHoP oX0o`@ohP)~r op`oxp) }r oo)vr )r ooH)%qr )r Hr HHr HHr H)-Ir )5Rr )=[r )dr ) mr )r q H=r Hm Hq Hdr AعH=i4iAعH=_4KAعH=R4-AعH=J4AعH=D4AعH=?4AعH=84AعH=14Aع H=8yAع H=4[Aع H=4=Aع H=8Aع H=3AعH=3AعH=3Aع'H=48AعH=3AعH=3kAعH=3MAع H=7/Aع"H=7AعH=~3AعH=x3AعH=u3AعH=p3HAعHsn HH]3 Han H=Q3HKHTn 1[ff.AUATUSHHXdH%(HD$H1A@HtIHtHj H`tCEHHlHHH9uHD$HdH3%(HX[]A\A]ËFH1LD$H$@D$HG(HHT$HD$(l$0HL$ HD$8sAD$<i<GI<$1IH0I<$H UHSHHH(dH%(HD$1HPHHHt5HchHFhHD$dH3%(u?H([][HD$H$HPHHH{ff.HtkUHcSHu&?tiAHA)DA4H8uHcHLHHE@@%H[]f.A1ff.AWIAVIAUIATMUSHxdH%(HD$h1MH1Ht u*Ht$hdH34%(Hx[]A\A]A^A_HCS HD$T$tHS1HL$ LD$(LHl$HS1HM LE(LHS1HM0LE8LHS1LHM@LEHIMHHH1|$5L$%f.ATUSHHPdH%(HD$H1Htpu&HD$HdH3%(HP[]A\fIHCS HHD$T$tHSHL$ LD$(1Hl$HSHM 1LE(LIHHshMHLefDATUSHH@dH%(HD$81Ht u#HD$8dH3%(ulH@[]A\f.HHC֋S HD$T$tHSHL$ LD$(IHl$HHsxMHL2fAWAVAUATUSHHdH%(HD$x1Ht u*HD$xdH3%(HĈ[]A\A]A^A_@IHCS HIMMHD$T$tHSHL$ LD$(1Hl$HSHM 1LE(L HSHM01LE8LHSHM@1LEHLHSHMP1LEXLIHMHHLAVAUATUSHHpdH%(HD$h1Ht u'HD$hdH3%(Hp[]A\A]A^fDIHCS HIMHD$T$tHSHL$ LD$(1Hl$HSHM 1LE(LHSHM01LE8LHSHM@1LEHLIHMHHL/fATUSHHPdH%(HD$H1Ht u#HD$HdH3%(HP[]A\fDIHCS HHD$T$tHSHL$ LD$(1Hl$HSHM 1LE(LIHMHHL e#ATUSHH@dH%(HD$81Ht u#HD$8dH3%(uoH@[]A\f.HCS HHD$T$tHSHL$ LD$(1IHl$(HMHH>LVoff.@AVAUATUSHPdH%(HD$H1Htn`HItWHGW HD$ T$(tHSHL$0LD$8LILl$ HHsXMLLHu%HD$HdH3%( HP[]A\A]A^@HSHcLDHEt4HHHP HAH~H@AHHHAt6xLhYI}H5@)HtHHx`PEu|Hc`D$HD$HxDdLdLA9tIcLျXt>HHZHc`HxDdLdLHIcI IA9INLd$LH5 3~HLH531'LH A(H50(LHc`LH5 (AH@LDHpH50H8mIHM&LmMl$I} HAD$@It$HHHHKHCHLkID$HPvHAD$@uA,$IHEHuH)HKHPH8E@A@=YE@&mHq@HUHt H9  wIHIIuAIA<$ HL2HLhHHH@`-xcdatZxaPI}H5P/IH*XI f.EuHpHH5.DHHHL9I A}E1C@ff.@UHH5%SH(,H Ja dH%(HD$1HT$LD$t7HD$HH HD$HHǃEHD$dH3%(uH([]ff.SHH5%H,H ` dH%(HD$1HtH$Hx CHD$dH3%(uH[sAVAUATUHH5$SH dH%(HD$1H$HL$HDH1H$HD$LD$HD$MH<$HHGHL-^ H5_ $HE1H]HT$LhH5^ LLxLHpHǃhCHUEHHD$dH3%(dH []A\A]A^H HHHHc#*L%O#L%] H5^ t H|$HMH]HT$Lhf.Ld$MH"HHD$nH]HT$LhfH H &tBH<$HGDHHt"H<$HGDL%@L%yH?"HD$pf,1Rf,?ff.@ATUHH5!SH ,H h] dH%(HD$1HLL$LD$tMH$Ht$L I$hH{8Ht$H{HI$pHOH5 EHD$dH3%(u H []A\ff.USHH5-!H(,H \ dH%(HD$1HT$LD$t3HD$Ht$H(HHpH5BCHD$dH3%(uH([]Off.@USHH5 H(,H \ dH%(HD$1HT$LD$Ct3HD$Ht$H(HEHpH5'rCHD$dH3%(uH([]ff.@USHH5H(,H j[ dH%(HD$1HT$LD$t3HD$Ht$H(HHpH5WRCHD$dH3%(uH([]ff.@USHH5MH(,H Z dH%(HD$1HT$LD$t3HD$Ht$H(HHpH5gCHD$dH3%(uH([]off.@USHH5H(,H *Z dH%(HD$1HT$LD$ct3HD$Ht$H(HeHpH5rCHD$dH3%(uH([]ff.@USHH5 H(,H Y dH%(HD$1HT$LD$t3HD$Ht$H(HHpH5wCHD$dH3%(uH([]/ff.@USHH5mH(,H X dH%(HD$1HT$LD$#t3HD$Ht$H(H0%HpH5CHD$dH3%(uH([]ff.@USHH5H(,H JX dH%(HD$1HT$LD$t3HD$Ht$H(H@HpH5rCHD$dH3%(uH([]ff.@SHH5H,H W dH%(HD$1HtH$HHpCHHHD$dH3%(uH[lff.SHH5H,H +W dH%(HD$1HktH$HHpCHHHD$dH3%(uH[ff.@SHH5H,H V dH%(HD$1HtH$HHpCHHHD$dH3%(uH[\ff.SHH5H,H V dH%(HD$1H[tH$HHpCHHHD$dH3%(uH[ff.AVAUATUSHPdH%(HD$H1HHHHHSHHzHŅ{PHSC HT$ D$(tLmDdL8IcA9HNIL#Hx IHcLLIHI$I|$ID$Mt$$CD4HHL$ Ld$0IHsHMD$8LH2MLeDdD$LHD$mIcA9HNIĀXt LHfHK1L1 Ht$0H|$(I8H|$0HD$(M9tTI $MD$HuLL1L1L|$LcLH=bHD$(IH$$Lt$0HL|(qfDH1L1EHt$0H|$(H(pLLL)HHD$(ZH5HHD$(AH|$0HD$(I9t5HKLLkLc HuH(L1L1y@H|$(H5#H]HHHD$(AH}Ht$(HB H|$(.H}IELHt$(U H-B 蹿H-B ff.fSHHHdH %(HL$1H(tBHHHH{H4$S(HAB H<$HD$dH3%(ubH[DHHtHHt1IH11H裿H{H4$SHH<$HH11uܾff.HHAVAUIHATIUSHcHA }DuHcHLDan Libbyfully describes the methods and types implemented by this XML-RPC server.1.1a valid method namemethod namemethod versionmethod authormethod purposeparameter listreturn value listlist of known bugslist of possible errors and error codeslist of exampleslist of modificationslist of notessee also. list of related methodslist of unimplemented featuresa type descriptionDan Libbyenumerates the methods implemented by this XML-RPC server.1.0name of a method implemented by the server.Dan Libbyprovides documentation string for a single method1.0name of the method for which documentation is desiredhelp text if defined for the method passed, otherwise an empty stringDan Libbyprovides 1 or more signatures for a single method1.0name of the method for which documentation is desireda string indicating the xmlrpc type of a value. one of: string, int, double, base64, datetime, array, structDan Libbyexecutes multiple methods in sequence and returns the results1.0Dan Libbyreturns a list of capabilities supported by this server1.0spec url: http://groups.yahoo.com/group/xml-rpc/message/2897www address of the specification defining this capabilityversion of the spec that this server's implementation conforms tohttp://xmlrpc-epi.sourceforge.net/specs/rfc.fault_codes.phphttp://xmlrpc-epi.sourceforge.net/specs/rfc.introspection.phpfaults_interopintrospectionspecURLspecVersionsystem.multiCallsystem.getCapabilitiesi4%.*Gparam ؍xX(Ќȋ؍UNoneutf-8 data beginning %ld before byte index: %s %Y%m%dT%H:%M:%SZunknownmixed vector (struct)transport error.parse error. not well formed.parse error. unknown encodingapplication error.system error. SOAP-ENV:Envelopexmlrpc-epi v. 0.510P̿ܿ ,;Zx0Nparse error. invalid character for encodingserver error. xml-rpc not conforming to specserver error. method not found.server error. invalid method parametersserver error. internal xmlrpc library errorerror occurred at line %ld, column %ld, byte index %ldSOAP-ENC:xsd:xsi:typeSOAP-ENC:arrayTypeSOAP-ENV:mustUnderstandSOAP-ENV:actorSOAP-ENV:FaultdetailsSOAP Must Understand ErrorfaultstringSOAP-ENV:MustUnderstandfaultcodexsd:stringxsd:intxsd:booleanxsd:doublexsd:floatxsi:nullxsd:timeInstantSOAP-ENC:base64xsd:structSOAP-ENC:Arrayxsd:ur-type%s[%i]SOAP-ENV:ClientSOAP-ENV:Server%Y-%m-%dT%H:%M:%SZxmlns:SOAP-ENVxmlns:xsixmlns:xsdxmlns:SOAP-ENChttp://soapinterop.org/xsdxmlns:sihttp://testuri.orgxmlns:ns6SOAP-ENV:encodingStyle%s%sSOAP-ENV:Bodyhttp://schemas.xmlsoap.org/soap/actor/nexthttp://schemas.xmlsoap.org/soap/envelope/http://www.w3.org/1999/XMLSchema-instancehttp://www.w3.org/1999/XMLSchemahttp://schemas.xmlsoap.org/soap/encoding/(X(hj(@4L{{;0% *// &0 C0 1P11DP2\44@5@6T@::;0< =4 =` =t > > > AP C `D @E F< F `G I( M O QD pR V W(XhPXXXXp[4]]]0^`__@dddii$jh0kmm( nPpoovv@ypy`{p{{0{X|~P~4HddЌ P(`ЎP p@p@ГT0P(p<PhPОD0Pd@`D@pХ @0pDXЦP` 4H\pЩP @ 0 Ь !H!0!!!!@"0d"Px"""0"P#L#`#@#`#p###ж#$$0($`<$P$d$x$$0$$$$$%`t%%% &0&@(&P<&`P&`&&`&'l'`'p''''(0$(@8(d(( (`(4)H)zRx $hFJ w?:*3$"D0#\*,Hc(t0*QJAD xAAGd*HL*FBB B(A0A8Gg 8A0A(B BBBJ $zRx  ,$'QOWA T,EN l AH x|,EN W AE ,(->AIN  AAG 1L42QDG kABN hP QDE @2EN0w AE (d 3EANP AAJ (3EDG t AAJ h4 d4@44_LAD | ABH CABH4nFBD A(D0C (A ABBF D(D ABB@h4FBB A(A0D` 0A(A BBBD @6BBB D(D0DP 0A(A BBBD @t8AFBB D(D0D@ 0A(A BBBJ 449EKGP_XX`RXAPJ AAC (l(:EKGP AAA (:EKGp AAD zRx p >$\ 0;EN0f AF zRx 0 F$8Hl;FDA  ABE \ ABI HBDD pABL!FBE B(A0D8J 8A0A(B BBBE "D$"P3JXL@"t(FBB B(A0C8G 8A0A(B BBBG "TL"PFBB E(A0A8GE 8A0A(B BBBI GNU@--4!L:!pA`:!@:!I9!0S:!C@9!09!P90008!3`8`8!QN7!0@B7!XPR@7!76!ktykddYfp} 8! 4!4!o`  L @=!P  oooo oN:!p!!!!!!!!!"" "0"@"P"`"p"""""""""## #0#@#P#`#p#########$$ $0$@$P$`$p$$$$$$$$$%% %0%@%P%`%p%%%%%%%%%&& &0&@&35!P-- BGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a18! GA$3p11130+lGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p11130TGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYP-GA+GLIBCXX_ASSERTIONS GA*FORTIFY0TlGA+GLIBCXX_ASSERTIONS P- .T9 ,W ,y 0+ , , ,  ,* ,M P-n |- -QB! |- - -# y.? y.p )0 . 0+ )0 0: 0] j1~ j1 *2 p1@!`B!h  *25 n6\ 02>v n6 6 p6 6 7 7  7a ^8 ^8 A9 0Ma A9< 9b 9| : : P: P: : :A ;h ; 7= 7= @? @=  @?. @Q @z oA oA :B :B  BG  +\t  B  C  V,  C  EE  EE>  I`  PEmu  s,  I  L  L  ,M"  ,ME  Nf  N  JR  JR  (S,  (SO  .Tp :!0 `:!H :!` 9!` @9!H 9!0 0% 8!0C `8!`i 7!x 7!0 @7!H 6!H 0T) Y? ,U ,o , , , , , , 0T4 xTS 0THe xT T T T T U U% WGB!N Wr Y Y [ , , ,% ,J ,j , , , Y Y  Y. ZN Zo QZ QZ [ [ [  [' fF ,e , , , , , ,> ,b [ ` ` `$ `S ` ` e e e2 ea f g u , , ,G ,t , , , , g7 YgV gYh Yg >i `g >i i, @iE in Bj ib Bj k PjK% kO kw k r r  r? rp $u $u u u& w? ,X ,u , , , , ,  ,+ uB wW u_ wz w w w w yz , ,? ,b , , , , , w: w_ w7w w x x x  -z<  xMT  -zp  yz  z   ,  ,  , ! ,F! ,g! ,! ,! ,! z" 2" ]" " " " # 4# _# ҅# ҅# # # ԑ$ ,$ ,4$ ,N$ ,l$ ,$ ,$ ,$ ,$ $ 5% % % 5,% J% @j[% q% ވ% ވ% % % % % 9& 9'& O;& OQ& se& s{& & & >& >& ݊& ݊ ' #' <' yS' yi' }' ' Ӌ' Ӌ' ' ' +( +(( i?( iT( g( |( ˍ( ˍ( g( g( (D!(D!) ) ې*) ېB) X) s) 3) 3) S) S) s) s* (* B* Z* t* ԑ* * * ,* ,* ,+ ,<+ ,[+ ,~+ ,+ ,+ + , #, 5, -P, ^, -, q, 0A, q, - 4- B- e- @{-B!-@!- - - - '. `U. v. `. q. q. ќ. ќ/ :4/ :X/ z/ @/ / k/ k0 ;0 ]0 }0B!0 0 l0 ,0 ,0 ,1 ,"1 ,<1 ,Z1 ,q1 ,1 1 1 U1 +2 eU2 Ur2 e2 2 2 ۡ3 ۡ13 Z3 3 3 3 /4 /+4 CN4 Ct4 c4 c4 4 5 L5 n5 5 5 z5 z5 6 F6 j6 6 6 6 ä6 ä7 >7 `7 7 7 7 B!7 7 v8 vF8 Nl8 N8 8 8 `9 `=9 `9 9 9 9 !9 0: !9: Ea: E: : : Y: Y; 9; _; ; ; 1; 1; î<0)< îW< \< Ю< \< q< q= 0= Z= = = V= V > u,> uT> z> > > > c? c5? X? ? ? ? ? @ ܲ2@ ܲW@ z@ @ @ @ =A ==A YjA YA A A A B .B OB nB B 1B 1B WB WC DC gC C C CD!C D 'D RD {D D D D D E A/E AVE [{E [E mE mE {'F {XF F F F F G &G LG pG G G G ?H ?%H FH lH H H ؽH ؽ I 2I \I 'I 'I >I >I QJ Q7J l\J psJ J ,J ,J ,J , K ,+K ,NK ,jK ,K pK K p>K K 0#L 0LL GsL GL L L M BM iM M M ,M ,M -M@B!M4!N @-*N4!IN%WN kN N N ZN 0N N ZN N N ZN O F#O p@O @LO hO p O 0O lO `SO e%O .O @P0%P +P BP _P ;{P5!P `!P yP P P#P@=!P ` P @Q @!Q e.Q #9Q *KQ `CcQ zQ 7Q `Q Q lR `8#R p. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc caes, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: PK!k$88build/ltmain.shnu[#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . PROGRAM=libtool PACKAGE=libtool VERSION=2.4.6 package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname (GNU libtool) 2.4.6 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to . GNU libtool home page: . General help using GNU software: ." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T </dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen . $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 /dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat < #include #ifdef _MSC_VER # include # include # include #else # include # include # ifdef __CYGWIN__ # include # endif #endif #include #include #include #include #include #include #include #include #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS% $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c </dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: PK!?=build/Makefile.globalnu[mkinstalldirs = $(top_srcdir)/build/shtool mkdir -p INSTALL = $(top_srcdir)/build/shtool install -c INSTALL_DATA = $(INSTALL) -m 644 DEFS = -I$(top_builddir)/include -I$(top_builddir)/main -I$(top_srcdir) COMMON_FLAGS = $(DEFS) $(INCLUDES) $(EXTRA_INCLUDES) $(CPPFLAGS) $(PHP_FRAMEWORKPATH) all: $(all_targets) @echo @echo "Build complete." @echo "Don't forget to run 'make test'." @echo build-modules: $(PHP_MODULES) $(PHP_ZEND_EX) build-binaries: $(PHP_BINARIES) libphp.la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(LIBTOOL) --mode=link $(CC) $(LIBPHP_CFLAGS) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ -@$(LIBTOOL) --silent --mode=install cp $@ $(phptempdir)/$@ >/dev/null 2>&1 libs/libphp.bundle: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(CC) $(MH_BUNDLE_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) $(LDFLAGS) $(EXTRA_LDFLAGS) $(PHP_GLOBAL_OBJS:.lo=.o) $(PHP_SAPI_OBJS:.lo=.o) $(PHP_FRAMEWORKS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@ && cp $@ libs/libphp.so install: $(all_targets) $(install_targets) install-sapi: $(OVERALL_TARGET) @echo "Installing PHP SAPI module: $(PHP_SAPI)" -@$(mkinstalldirs) $(INSTALL_ROOT)$(bindir) -@if test ! -r $(phptempdir)/libphp.$(SHLIB_DL_SUFFIX_NAME); then \ for i in 0.0.0 0.0 0; do \ if test -r $(phptempdir)/libphp.$(SHLIB_DL_SUFFIX_NAME).$$i; then \ $(LN_S) $(phptempdir)/libphp.$(SHLIB_DL_SUFFIX_NAME).$$i $(phptempdir)/libphp.$(SHLIB_DL_SUFFIX_NAME); \ break; \ fi; \ done; \ fi @$(INSTALL_IT) install-binaries: build-binaries $(install_binary_targets) install-modules: build-modules @test -d modules && \ $(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR) @echo "Installing shared extensions: $(INSTALL_ROOT)$(EXTENSION_DIR)/" @rm -f modules/*.la >/dev/null 2>&1 @$(INSTALL) modules/* $(INSTALL_ROOT)$(EXTENSION_DIR) install-headers: -@if test "$(INSTALL_HEADERS)"; then \ for i in `echo $(INSTALL_HEADERS)`; do \ i=`$(top_srcdir)/build/shtool path -d $$i`; \ paths="$$paths $(INSTALL_ROOT)$(phpincludedir)/$$i"; \ done; \ $(mkinstalldirs) $$paths && \ echo "Installing header files: $(INSTALL_ROOT)$(phpincludedir)/" && \ for i in `echo $(INSTALL_HEADERS)`; do \ if test "$(PHP_PECL_EXTENSION)"; then \ src=`echo $$i | $(SED) -e "s#ext/$(PHP_PECL_EXTENSION)/##g"`; \ else \ src=$$i; \ fi; \ if test -f "$(top_srcdir)/$$src"; then \ $(INSTALL_DATA) $(top_srcdir)/$$src $(INSTALL_ROOT)$(phpincludedir)/$$i; \ elif test -f "$(top_builddir)/$$src"; then \ $(INSTALL_DATA) $(top_builddir)/$$src $(INSTALL_ROOT)$(phpincludedir)/$$i; \ else \ (cd $(top_srcdir)/$$src && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i; \ cd $(top_builddir)/$$src && $(INSTALL_DATA) *.h $(INSTALL_ROOT)$(phpincludedir)/$$i) 2>/dev/null || true; \ fi \ done; \ fi PHP_TEST_SETTINGS = -d 'open_basedir=' -d 'output_buffering=0' -d 'memory_limit=-1' PHP_TEST_SHARED_EXTENSIONS = ` \ if test "x$(PHP_MODULES)" != "x"; then \ for i in $(PHP_MODULES)""; do \ . $$i; \ if test "x$$dlname" != "xdl_test.so"; then \ $(top_srcdir)/build/shtool echo -n -- " -d extension=$$dlname"; \ fi; \ done; \ fi; \ if test "x$(PHP_ZEND_EX)" != "x"; then \ for i in $(PHP_ZEND_EX)""; do \ . $$i; $(top_srcdir)/build/shtool echo -n -- " -d zend_extension=$(top_builddir)/modules/$$dlname"; \ done; \ fi` PHP_DEPRECATED_DIRECTIVES_REGEX = '^(magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[\t\ ]*=' test: all @if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \ INI_FILE=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r 'echo php_ini_loaded_file();' 2> /dev/null`; \ if test "$$INI_FILE"; then \ $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_FILE" > $(top_builddir)/tmp-php.ini; \ else \ echo > $(top_builddir)/tmp-php.ini; \ fi; \ INI_SCANNED_PATH=`$(PHP_EXECUTABLE) -d 'display_errors=stderr' -r '$$a = explode(",\n", trim(php_ini_scanned_files())); echo $$a[0];' 2> /dev/null`; \ if test "$$INI_SCANNED_PATH"; then \ INI_SCANNED_PATH=`$(top_srcdir)/build/shtool path -d $$INI_SCANNED_PATH`; \ $(EGREP) -h -v $(PHP_DEPRECATED_DIRECTIVES_REGEX) "$$INI_SCANNED_PATH"/*.ini >> $(top_builddir)/tmp-php.ini; \ fi; \ TEST_PHP_EXECUTABLE=$(PHP_EXECUTABLE) \ TEST_PHP_SRCDIR=$(top_srcdir) \ CC="$(CC)" \ $(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini -d extension_dir=$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS); \ TEST_RESULT_EXIT_CODE=$$?; \ rm $(top_builddir)/tmp-php.ini; \ exit $$TEST_RESULT_EXIT_CODE; \ else \ echo "ERROR: Cannot run tests without CLI sapi."; \ fi clean: find . -name \*.gcno -o -name \*.gcda | xargs rm -f find . -name \*.lo -o -name \*.o -o -name \*.dep | xargs rm -f find . -name \*.la -o -name \*.a | xargs rm -f find . -name \*.so | xargs rm -f find . -name .libs -a -type d|xargs rm -rf rm -f libphp.la $(SAPI_CLI_PATH) $(SAPI_CGI_PATH) $(SAPI_LITESPEED_PATH) $(SAPI_FPM_PATH) $(OVERALL_TARGET) modules/* libs/* rm -f ext/opcache/jit/zend_jit_x86.c rm -f ext/opcache/jit/zend_jit_arm64.c rm -f ext/opcache/minilua distclean: clean rm -f Makefile config.cache config.log config.status Makefile.objects Makefile.fragments libtool main/php_config.h main/internal_functions_cli.c main/internal_functions.c Zend/zend_dtrace_gen.h Zend/zend_dtrace_gen.h.bak Zend/zend_config.h rm -f main/build-defs.h scripts/phpize rm -f ext/date/lib/timelib_config.h ext/mbstring/libmbfl/config.h ext/oci8/oci8_dtrace_gen.h ext/oci8/oci8_dtrace_gen.h.bak rm -f scripts/man1/phpize.1 scripts/php-config scripts/man1/php-config.1 sapi/cli/php.1 sapi/cgi/php-cgi.1 sapi/phpdbg/phpdbg.1 ext/phar/phar.1 ext/phar/phar.phar.1 rm -f sapi/fpm/php-fpm.conf sapi/fpm/init.d.php-fpm sapi/fpm/php-fpm.service sapi/fpm/php-fpm.8 sapi/fpm/status.html rm -f ext/phar/phar.phar ext/phar/phar.php if test "$(srcdir)" != "$(builddir)"; then \ rm -f ext/phar/phar/phar.inc; \ fi $(EGREP) define'.*include/php' $(top_srcdir)/configure | $(SED) 's/.*>//'|xargs rm -f prof-gen: CCACHE_DISABLE=1 $(MAKE) PROF_FLAGS=-fprofile-generate all prof-clean: find . -name \*.lo -o -name \*.o | xargs rm -f find . -name \*.la -o -name \*.a | xargs rm -f find . -name \*.so | xargs rm -f rm -f libphp.la $(SAPI_CLI_PATH) $(SAPI_CGI_PATH) $(SAPI_LITESPEED_PATH) $(SAPI_FPM_PATH) $(OVERALL_TARGET) modules/* libs/* prof-use: CCACHE_DISABLE=1 $(MAKE) PROF_FLAGS=-fprofile-use all %_arginfo.h: %.stub.php @if test -e "$(top_srcdir)/build/gen_stub.php"; then \ if test ! -z "$(PHP)"; then \ echo Parse $< to generate $@;\ $(PHP) $(top_srcdir)/build/gen_stub.php $<; \ elif test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \ echo Parse $< to generate $@;\ $(PHP_EXECUTABLE) $(top_srcdir)/build/gen_stub.php $<; \ fi; \ fi; .PHONY: all clean install distclean test prof-gen prof-clean prof-use .NOEXPORT: PK!GIbuild/config.guessnuȯ#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-06-03' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: PK!9(( build/pkg.m4nu[# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # serial 12 (pkg-config-0.29.2) dnl Copyright © 2004 Scott James Remnant . dnl Copyright © 2012-2015 Dan Nicholson dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29.2]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurrence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $2]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR PK!% build/shtoolnuȯ#!/bin/sh ## ## GNU shtool -- The GNU Portable Shell Tool ## Copyright (c) 1994-2008 Ralf S. Engelschall ## ## See http://www.gnu.org/software/shtool/ for more information. ## See ftp://ftp.gnu.org/gnu/shtool/ for latest version. ## ## Version: 2.0.8 (18-Jul-2008) ## Contents: 5/19 available modules ## ## ## This program is free software; you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation; either version 2 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ## General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program; if not, write to the Free Software ## Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, ## USA, or contact Ralf S. Engelschall . ## ## NOTICE: Given that you include this file verbatim into your own ## source tree, you are justified in saying that it remains separate ## from your package, and that this way you are simply just using GNU ## shtool. So, in this situation, there is no requirement that your ## package itself is licensed under the GNU General Public License in ## order to take advantage of GNU shtool. ## ## ## Usage: shtool [] [ [] []] ## ## Available commands: ## echo Print string with optional construct expansion ## install Install a program, script or datafile ## mkdir Make one or more directories ## platform Platform Identification Utility ## path Deal with program paths ## ## Not available commands (because module was not built-in): ## mdate Pretty-print modification time of a file or dir ## table Pretty-print a field-separated list as a table ## prop Display progress with a running propeller ## move Move files with simultaneous substitution ## mkln Make link with calculation of relative paths ## mkshadow Make a shadow tree through symbolic links ## fixperm Fix file permissions inside a source tree ## rotate Logfile rotation ## tarball Roll distribution tarballs ## subst Apply sed(1) substitution operations ## arx Extended archive command ## slo Separate linker options by library class ## scpp Sharing C Pre-Processor ## version Maintain a version information file ## # maximum Bourne-Shell compatibility if [ ".$ZSH_VERSION" != . ] && (emulate sh) >/dev/null 2>&1; then # reconfigure zsh(1) emulate sh NULLCMD=: alias -g '${1+"$@"}'='"$@"' elif [ ".$BASH_VERSION" != . ] && (set -o posix) >/dev/null 2>&1; then # reconfigure bash(1) set -o posix fi # maximum independence of NLS nuisances for var in \ LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ LC_TELEPHONE LC_TIME do if (set +x; test -z "`(eval $var=C; export $var) 2>&1`"); then eval $var=C; export $var else unset $var fi done # initial command line handling if [ $# -eq 0 ]; then echo "$0:Error: invalid command line" 1>&2 echo "$0:Hint: run \`$0 -h' for usage" 1>&2 exit 1 fi if [ ".$1" = ".-h" ] || [ ".$1" = ".--help" ]; then echo "This is GNU shtool, version 2.0.8 (18-Jul-2008)" echo 'Copyright (c) 1994-2008 Ralf S. Engelschall ' echo 'Report bugs to ' echo '' echo 'Usage: shtool [] [ [] []]' echo '' echo 'Available global :' echo ' -v, --version display shtool version information' echo ' -h, --help display shtool usage help page (this one)' echo ' -d, --debug display shell trace information' echo ' -r, --recreate recreate this shtool script via shtoolize' echo '' echo 'Available [] []:' echo ' echo [-n|--newline] [-e|--expand] [ ...]' echo ' install [-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy]' echo ' [-C|--compare-copy] [-s|--strip] [-m|--mode ]' echo ' [-o|--owner ] [-g|--group ] [-e|--exec' echo ' ] [ ...] ' echo ' mkdir [-t|--trace] [-f|--force] [-p|--parents] [-m|--mode' echo ' ] [-o|--owner ] [-g|--group ] ' echo ' [ ...]' echo ' platform [-F|--format ] [-S|--sep ] [-C|--conc' echo ' ] [-L|--lower] [-U|--upper] [-v|--verbose]' echo ' [-c|--concise] [-n|--no-newline] [-t|--type ]' echo ' [-V|--version] [-h|--help]' echo ' path [-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename]' echo ' [-m|--magic] [-p|--path ] [ ...]' echo '' echo 'Not available (because module was not built-in):' echo ' mdate [-n|--newline] [-z|--zero] [-s|--shorten] [-d|--digits]' echo ' [-f|--field-sep ] [-o|--order ] ' echo ' table [-F|--field-sep ] [-w|--width ] [-c|--columns' echo ' ] [-s|--strip ] ...' echo ' prop [-p|--prefix ]' echo ' move [-v|--verbose] [-t|--trace] [-e|--expand] [-p|--preserve]' echo ' ' echo ' mkln [-t|--trace] [-f|--force] [-s|--symbolic] ' echo ' [ ...] ' echo ' mkshadow [-v|--verbose] [-t|--trace] [-a|--all] ' echo ' fixperm [-v|--verbose] [-t|--trace] [ ...]' echo ' rotate [-v|--verbose] [-t|--trace] [-f|--force] [-n|--num-files' echo ' ] [-s|--size ] [-c|--copy] [-r|--remove]' echo ' [-a|--archive-dir ] [-z|--compress [:]]' echo ' [-b|--background] [-d|--delay] [-p|--pad ] [-m|--mode' echo ' ] [-o|--owner ] [-g|--group ] [-M|--migrate' echo ' ] [-P|--prolog ] [-E|--epilog ] [...]' echo ' tarball [-t|--trace] [-v|--verbose] [-o|--output ]' echo ' [-c|--compress ] [-d|--directory ] [-u|--user' echo ' ] [-g|--group ] [-e|--exclude ]' echo ' [ ...]' echo ' subst [-v|--verbose] [-t|--trace] [-n|--nop] [-w|--warning]' echo ' [-q|--quiet] [-s|--stealth] [-i|--interactive] [-b|--backup' echo ' ] [-e|--exec ] [-f|--file ] []' echo ' [...]' echo ' arx [-t|--trace] [-C|--command ] [' echo ' ...]' echo ' slo [-p|--prefix ] -- -L -l [-L -l' echo ' ...]' echo ' scpp [-v|--verbose] [-p|--preserve] [-f|--filter ]' echo ' [-o|--output ] [-t|--template ] [-M|--mark' echo ' ] [-D|--define ] [-C|--class ]' echo ' [ ...]' echo ' version [-l|--language ] [-n|--name ] [-p|--prefix' echo ' ] [-s|--set ] [-e|--edit] [-i|--increase' echo ' ] [-d|--display ] ' echo '' exit 0 fi if [ ".$1" = ".-v" ] || [ ".$1" = ".--version" ]; then echo "GNU shtool 2.0.8 (18-Jul-2008)" exit 0 fi if [ ".$1" = ".-r" ] || [ ".$1" = ".--recreate" ]; then shtoolize -obuild/shtool echo install mkdir platform path exit 0 fi if [ ".$1" = ".-d" ] || [ ".$1" = ".--debug" ]; then shift set -x fi name=`echo "$0" | sed -e 's;.*/\([^/]*\)$;\1;' -e 's;-sh$;;' -e 's;\.sh$;;'` case "$name" in echo|install|mkdir|platform|path ) # implicit tool command selection tool="$name" ;; * ) # explicit tool command selection tool="$1" shift ;; esac arg_spec="" opt_spec="" gen_tmpfile=no ## ## DISPATCH INTO SCRIPT PROLOG ## case $tool in echo ) str_tool="echo" str_usage="[-n|--newline] [-e|--expand] [ ...]" arg_spec="0+" opt_spec="n.e." opt_alias="n:newline,e:expand" opt_n=no opt_e=no ;; install ) str_tool="install" str_usage="[-v|--verbose] [-t|--trace] [-d|--mkdir] [-c|--copy] [-C|--compare-copy] [-s|--strip] [-m|--mode ] [-o|--owner ] [-g|--group ] [-e|--exec ] [ ...] " arg_spec="1+" opt_spec="v.t.d.c.C.s.m:o:g:e+" opt_alias="v:verbose,t:trace,d:mkdir,c:copy,C:compare-copy,s:strip,m:mode,o:owner,g:group,e:exec" opt_v=no opt_t=no opt_d=no opt_c=no opt_C=no opt_s=no opt_m="0755" opt_o="" opt_g="" opt_e="" ;; mkdir ) str_tool="mkdir" str_usage="[-t|--trace] [-f|--force] [-p|--parents] [-m|--mode ] [-o|--owner ] [-g|--group ] [ ...]" arg_spec="1+" opt_spec="t.f.p.m:o:g:" opt_alias="t:trace,f:force,p:parents,m:mode,o:owner,g:group" opt_t=no opt_f=no opt_p=no opt_m="" opt_o="" opt_g="" ;; platform ) str_tool="platform" str_usage="[-F|--format ] [-S|--sep ] [-C|--conc ] [-L|--lower] [-U|--upper] [-v|--verbose] [-c|--concise] [-n|--no-newline] [-t|--type ] [-V|--version] [-h|--help]" arg_spec="0=" opt_spec="F:S:C:L.U.v.c.n.t:d.V.h." opt_alias="F:format,S:sep,C:conc,L:lower,U:upper,v:verbose,c:consise,t:type,n:no-newline,V:version,h:help" opt_F="%{sp} (%{ap})" opt_S=" " opt_C="/" opt_L=no opt_U=no opt_t="" opt_v=no opt_c=no opt_n=no opt_V=no opt_h=no ;; path ) str_tool="path" str_usage="[-s|--suppress] [-r|--reverse] [-d|--dirname] [-b|--basename] [-m|--magic] [-p|--path ] [ ...]" gen_tmpfile=yes arg_spec="1+" opt_spec="s.r.d.b.m.p:" opt_alias="s:suppress,r:reverse,d:dirname,b:basename,m:magic,p:path" opt_s=no opt_r=no opt_d=no opt_b=no opt_m=no opt_p="$PATH" ;; -* ) echo "$0:Error: unknown option \`$tool'" 2>&1 echo "$0:Hint: run \`$0 -h' for usage" 2>&1 exit 1 ;; * ) echo "$0:Error: unknown command \`$tool'" 2>&1 echo "$0:Hint: run \`$0 -h' for usage" 2>&1 exit 1 ;; esac ## ## COMMON UTILITY CODE ## # commonly used ASCII values ASC_TAB=" " ASC_NL=" " # determine name of tool if [ ".$tool" != . ]; then # used inside shtool script toolcmd="$0 $tool" toolcmdhelp="shtool $tool" msgprefix="shtool:$tool" else # used as standalone script toolcmd="$0" toolcmdhelp="sh $0" msgprefix="$str_tool" fi # parse argument specification string eval `echo $arg_spec |\ sed -e 's/^\([0-9]*\)\([+=]\)/arg_NUMS=\1; arg_MODE=\2/'` # parse option specification string eval `echo h.$opt_spec |\ sed -e 's/\([a-zA-Z0-9]\)\([.:+]\)/opt_MODE_\1=\2;/g'` # parse option alias string eval `echo h:help,$opt_alias |\ sed -e 's/-/_/g' -e 's/\([a-zA-Z0-9]\):\([^,]*\),*/opt_ALIAS_\2=\1;/g'` # interate over argument line opt_PREV='' while [ $# -gt 0 ]; do # special option stops processing if [ ".$1" = ".--" ]; then shift break fi # determine option and argument opt_ARG_OK=no if [ ".$opt_PREV" != . ]; then # merge previous seen option with argument opt_OPT="$opt_PREV" opt_ARG="$1" opt_ARG_OK=yes opt_PREV='' else # split argument into option and argument case "$1" in --[a-zA-Z0-9]*=*) eval `echo "x$1" |\ sed -e 's/^x--\([a-zA-Z0-9-]*\)=\(.*\)$/opt_OPT="\1";opt_ARG="\2"/'` opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'` eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}" ;; --[a-zA-Z0-9]*) opt_OPT=`echo "x$1" | cut -c4-` opt_STR=`echo $opt_OPT | sed -e 's/-/_/g'` eval "opt_OPT=\${opt_ALIAS_${opt_STR}-${opt_OPT}}" opt_ARG='' ;; -[a-zA-Z0-9]*) eval `echo "x$1" |\ sed -e 's/^x-\([a-zA-Z0-9]\)/opt_OPT="\1";/' \ -e 's/";\(.*\)$/"; opt_ARG="\1"/'` ;; -[a-zA-Z0-9]) opt_OPT=`echo "x$1" | cut -c3-` opt_ARG='' ;; *) break ;; esac fi # eat up option shift # determine whether option needs an argument eval "opt_MODE=\$opt_MODE_${opt_OPT}" if [ ".$opt_ARG" = . ] && [ ".$opt_ARG_OK" != .yes ]; then if [ ".$opt_MODE" = ".:" ] || [ ".$opt_MODE" = ".+" ]; then opt_PREV="$opt_OPT" continue fi fi # process option case $opt_MODE in '.' ) # boolean option eval "opt_${opt_OPT}=yes" ;; ':' ) # option with argument (multiple occurrences override) eval "opt_${opt_OPT}=\"\$opt_ARG\"" ;; '+' ) # option with argument (multiple occurrences append) eval "opt_${opt_OPT}=\"\$opt_${opt_OPT}\${ASC_NL}\$opt_ARG\"" ;; * ) echo "$msgprefix:Error: unknown option: \`$opt_OPT'" 1>&2 echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 exit 1 ;; esac done if [ ".$opt_PREV" != . ]; then echo "$msgprefix:Error: missing argument to option \`$opt_PREV'" 1>&2 echo "$msgprefix:Hint: run \`$toolcmdhelp -h' or \`man shtool' for details" 1>&2 exit 1 fi # process help option if [ ".$opt_h" = .yes ]; then echo "Usage: $toolcmdhelp $str_usage" exit 0 fi # complain about incorrect number of arguments case $arg_MODE in '=' ) if [ $# -ne $arg_NUMS ]; then echo "$msgprefix:Error: invalid number of arguments (exactly $arg_NUMS expected)" 1>&2 echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 exit 1 fi ;; '+' ) if [ $# -lt $arg_NUMS ]; then echo "$msgprefix:Error: invalid number of arguments (at least $arg_NUMS expected)" 1>&2 echo "$msgprefix:Hint: run \`$toolcmd -h' or \`man shtool' for details" 1>&2 exit 1 fi ;; esac # establish a temporary file on request if [ ".$gen_tmpfile" = .yes ]; then # create (explicitly) secure temporary directory if [ ".$TMPDIR" != . ]; then tmpdir="$TMPDIR" elif [ ".$TEMPDIR" != . ]; then tmpdir="$TEMPDIR" else tmpdir="/tmp" fi tmpdir="$tmpdir/.shtool.$$" ( umask 077 rm -rf "$tmpdir" >/dev/null 2>&1 || true mkdir "$tmpdir" >/dev/null 2>&1 if [ $? -ne 0 ]; then echo "$msgprefix:Error: failed to create temporary directory \`$tmpdir'" 1>&2 exit 1 fi ) # create (implicitly) secure temporary file tmpfile="$tmpdir/shtool.tmp" touch "$tmpfile" fi # utility function: map string to lower case util_lower () { echo "$1" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' } # utility function: map string to upper case util_upper () { echo "$1" | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' } # cleanup procedure shtool_exit () { rc="$1" if [ ".$gen_tmpfile" = .yes ]; then rm -rf "$tmpdir" >/dev/null 2>&1 || true fi exit $rc } ## ## DISPATCH INTO SCRIPT BODY ## case $tool in echo ) ## ## echo -- Print string with optional construct expansion ## Copyright (c) 1998-2008 Ralf S. Engelschall ## text="$*" # check for broken escape sequence expansion seo='' bytes=`echo '\1' | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" != .3 ]; then bytes=`echo -E '\1' | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" = .3 ]; then seo='-E' fi fi # check for existing -n option (to suppress newline) minusn='' bytes=`echo -n 123 2>/dev/null | wc -c | awk '{ printf("%s", $1); }'` if [ ".$bytes" = .3 ]; then minusn='-n' fi # determine terminal bold sequence term_bold='' term_norm='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[Bb]'`" != . ]; then case $TERM in # for the most important terminal types we directly know the sequences xterm|xterm*|vt220|vt220*) term_bold=`awk 'BEGIN { printf("%c%c%c%c", 27, 91, 49, 109); }' /dev/null` term_norm=`awk 'BEGIN { printf("%c%c%c", 27, 91, 109); }' /dev/null` ;; vt100|vt100*|cygwin) term_bold=`awk 'BEGIN { printf("%c%c%c%c%c%c", 27, 91, 49, 109, 0, 0); }' /dev/null` term_norm=`awk 'BEGIN { printf("%c%c%c%c%c", 27, 91, 109, 0, 0); }' /dev/null` ;; # for all others, we try to use a possibly existing `tput' or `tcout' utility * ) paths=`echo $PATH | sed -e 's/:/ /g'` for tool in tput tcout; do for dir in $paths; do if [ -r "$dir/$tool" ]; then for seq in bold md smso; do # 'smso' is last bold="`$dir/$tool $seq 2>/dev/null`" if [ ".$bold" != . ]; then term_bold="$bold" break fi done if [ ".$term_bold" != . ]; then for seq in sgr0 me rmso init reset; do # 'reset' is last norm="`$dir/$tool $seq 2>/dev/null`" if [ ".$norm" != . ]; then term_norm="$norm" break fi done fi break fi done if [ ".$term_bold" != . ] && [ ".$term_norm" != . ]; then break; fi done ;; esac if [ ".$term_bold" = . ] || [ ".$term_norm" = . ]; then echo "$msgprefix:Warning: unable to determine terminal sequence for bold mode" 1>&2 term_bold='' term_norm='' fi fi # determine user name username='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[uUgG]'`" != . ]; then username="`(id -un) 2>/dev/null`" if [ ".$username" = . ]; then str="`(id) 2>/dev/null`" if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then username=`echo $str | sed -e 's/^uid[ ]*=[ ]*[0-9]*(//' -e 's/).*$//'` fi if [ ".$username" = . ]; then username="$LOGNAME" if [ ".$username" = . ]; then username="$USER" if [ ".$username" = . ]; then username="`(whoami) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$username" = . ]; then username="`(who am i) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$username" = . ]; then username='unknown' fi fi fi fi fi fi fi # determine user id userid='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%U'`" != . ]; then userid="`(id -u) 2>/dev/null`" if [ ".$userid" = . ]; then userid="`(id -u ${username}) 2>/dev/null`" if [ ".$userid" = . ]; then str="`(id) 2>/dev/null`" if [ ".`echo $str | grep '^uid[ ]*=[ ]*[0-9]*('`" != . ]; then userid=`echo $str | sed -e 's/^uid[ ]*=[ ]*//' -e 's/(.*$//'` fi if [ ".$userid" = . ]; then userid=`(getent passwd ${username}) 2>/dev/null | \ sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$userid" = . ]; then userid=`grep "^${username}:" /etc/passwd 2>/dev/null | \ sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$userid" = . ]; then userid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \ sed -e 'q' | sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$userid" = . ]; then userid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \ sed -e 's/[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$userid" = . ]; then userid='?' fi fi fi fi fi fi fi fi # determine (primary) group id groupid='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[gG]'`" != . ]; then groupid="`(id -g ${username}) 2>/dev/null`" if [ ".$groupid" = . ]; then str="`(id) 2>/dev/null`" if [ ".`echo $str | grep 'gid[ ]*=[ ]*[0-9]*('`" != . ]; then groupid=`echo $str | sed -e 's/^.*gid[ ]*=[ ]*//' -e 's/(.*$//'` fi if [ ".$groupid" = . ]; then groupid=`(getent passwd ${username}) 2>/dev/null | \ sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$groupid" = . ]; then groupid=`grep "^${username}:" /etc/passwd 2>/dev/null | \ sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$groupid" = . ]; then groupid=`(ypmatch "${username}" passwd; nismatch "${username}" passwd) 2>/dev/null | \ sed -e 'q' | sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$groupid" = . ]; then groupid=`(nidump passwd . | grep "^${username}:") 2>/dev/null | \ sed -e 's/[^:]*:[^:]*:[^:]*://' -e 's/:.*$//'` if [ ".$groupid" = . ]; then groupid='?' fi fi fi fi fi fi fi # determine (primary) group name groupname='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%g'`" != . ]; then groupname="`(id -gn ${username}) 2>/dev/null`" if [ ".$groupname" = . ]; then str="`(id) 2>/dev/null`" if [ ".`echo $str | grep 'gid[ ]*=[ ]*[0-9]*('`" != . ]; then groupname=`echo $str | sed -e 's/^.*gid[ ]*=[ ]*[0-9]*(//' -e 's/).*$//'` fi if [ ".$groupname" = . ]; then groupname=`(getent group) 2>/dev/null | \ grep "^[^:]*:[^:]*:${groupid}:" | \ sed -e 's/:.*$//'` if [ ".$groupname" = . ]; then groupname=`grep "^[^:]*:[^:]*:${groupid}:" /etc/group 2>/dev/null | \ sed -e 's/:.*$//'` if [ ".$groupname" = . ]; then groupname=`(ypcat group; niscat group) 2>/dev/null | \ sed -e 'q' | grep "^[^:]*:[^:]*:${groupid}:" | \ sed -e 's/:.*$//'` if [ ".$groupname" = . ]; then groupname=`(nidump group .) 2>/dev/null | \ grep "^[^:]*:[^:]*:${groupid}:" | \ sed -e 's/:.*$//'` if [ ".$groupname" = . ]; then groupname='?' fi fi fi fi fi fi fi # determine host and domain name hostname='' domainname='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%h'`" != . ]; then hostname="`(uname -n) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$hostname" = . ]; then hostname="`(hostname) 2>/dev/null |\ awk '{ printf("%s", $1); }'`" if [ ".$hostname" = . ]; then hostname='unknown' fi fi case $hostname in *.* ) domainname=".`echo $hostname | cut -d. -f2-`" hostname="`echo $hostname | cut -d. -f1`" ;; esac fi if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%d'`" != . ]; then if [ ".$domainname" = . ]; then if [ -f /etc/resolv.conf ]; then domainname="`grep '^[ ]*domain' /etc/resolv.conf | sed -e 'q' |\ sed -e 's/.*domain//' \ -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ -e 's/^\.//' -e 's/^/./' |\ awk '{ printf("%s", $1); }'`" if [ ".$domainname" = . ]; then domainname="`grep '^[ ]*search' /etc/resolv.conf | sed -e 'q' |\ sed -e 's/.*search//' \ -e 's/^[ ]*//' -e 's/^ *//' -e 's/^ *//' \ -e 's/ .*//' -e 's/ .*//' \ -e 's/^\.//' -e 's/^/./' |\ awk '{ printf("%s", $1); }'`" fi fi fi fi # determine current time time_day='' time_month='' time_year='' time_monthname='' if [ ".$opt_e" = .yes ] && [ ".`echo $text | grep '%[DMYm]'`" != . ]; then time_day=`date '+%d'` time_month=`date '+%m'` time_year=`date '+%Y' 2>/dev/null` if [ ".$time_year" = . ]; then time_year=`date '+%y'` case $time_year in [5-9][0-9]) time_year="19$time_year" ;; [0-4][0-9]) time_year="20$time_year" ;; esac fi case $time_month in 1|01) time_monthname='Jan' ;; 2|02) time_monthname='Feb' ;; 3|03) time_monthname='Mar' ;; 4|04) time_monthname='Apr' ;; 5|05) time_monthname='May' ;; 6|06) time_monthname='Jun' ;; 7|07) time_monthname='Jul' ;; 8|08) time_monthname='Aug' ;; 9|09) time_monthname='Sep' ;; 10) time_monthname='Oct' ;; 11) time_monthname='Nov' ;; 12) time_monthname='Dec' ;; esac fi # expand special ``%x'' constructs if [ ".$opt_e" = .yes ]; then text=`echo $seo "$text" |\ sed -e "s/%B/${term_bold}/g" \ -e "s/%b/${term_norm}/g" \ -e "s/%u/${username}/g" \ -e "s/%U/${userid}/g" \ -e "s/%g/${groupname}/g" \ -e "s/%G/${groupid}/g" \ -e "s/%h/${hostname}/g" \ -e "s/%d/${domainname}/g" \ -e "s/%D/${time_day}/g" \ -e "s/%M/${time_month}/g" \ -e "s/%Y/${time_year}/g" \ -e "s/%m/${time_monthname}/g" 2>/dev/null` fi # create output if [ .$opt_n = .no ]; then echo $seo "$text" else # the harder part: echo -n is best, because # awk may complain about some \xx sequences. if [ ".$minusn" != . ]; then echo $seo $minusn "$text" else echo dummy | awk '{ printf("%s", TEXT); }' TEXT="$text" fi fi shtool_exit 0 ;; install ) ## ## install -- Install a program, script or datafile ## Copyright (c) 1997-2008 Ralf S. Engelschall ## # special case: "shtool install -d [...]" internally # maps to "shtool mkdir -f -p -m 755 [...]" if [ "$opt_d" = yes ]; then cmd="$0 mkdir -f -p -m 755" if [ ".$opt_o" != . ]; then cmd="$cmd -o '$opt_o'" fi if [ ".$opt_g" != . ]; then cmd="$cmd -g '$opt_g'" fi if [ ".$opt_v" = .yes ]; then cmd="$cmd -v" fi if [ ".$opt_t" = .yes ]; then cmd="$cmd -t" fi for dir in "$@"; do eval "$cmd $dir" || shtool_exit $? done shtool_exit 0 fi # determine source(s) and destination argc=$# srcs="" while [ $# -gt 1 ]; do srcs="$srcs $1" shift done dstpath="$1" # type check for destination dstisdir=0 if [ -d $dstpath ]; then dstpath=`echo "$dstpath" | sed -e 's:/$::'` dstisdir=1 fi # consistency check for destination if [ $argc -gt 2 ] && [ $dstisdir = 0 ]; then echo "$msgprefix:Error: multiple sources require destination to be directory" 1>&2 shtool_exit 1 fi # iterate over all source(s) for src in $srcs; do dst=$dstpath # if destination is a directory, append the input filename if [ $dstisdir = 1 ]; then dstfile=`echo "$src" | sed -e 's;.*/\([^/]*\)$;\1;'` dst="$dst/$dstfile" fi # check for correct arguments if [ ".$src" = ".$dst" ]; then echo "$msgprefix:Warning: source and destination are the same - skipped" 1>&2 continue fi if [ -d "$src" ]; then echo "$msgprefix:Warning: source \`$src' is a directory - skipped" 1>&2 continue fi # make a temp file name in the destination directory dsttmp=`echo $dst |\ sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' -e 's;^$;.;' \ -e "s;\$;/#INST@$$#;"` # verbosity if [ ".$opt_v" = .yes ]; then echo "$src -> $dst" 1>&2 fi # copy or move the file name to the temp name # (because we might be not allowed to change the source) if [ ".$opt_C" = .yes ]; then opt_c=yes fi if [ ".$opt_c" = .yes ]; then if [ ".$opt_t" = .yes ]; then echo "cp $src $dsttmp" 1>&2 fi cp "$src" "$dsttmp" || shtool_exit $? else if [ ".$opt_t" = .yes ]; then echo "mv $src $dsttmp" 1>&2 fi mv "$src" "$dsttmp" || shtool_exit $? fi # adjust the target file if [ ".$opt_e" != . ]; then sed='sed' OIFS="$IFS"; IFS="$ASC_NL"; set -- $opt_e; IFS="$OIFS" for e do sed="$sed -e '$e'" done cp "$dsttmp" "$dsttmp.old" chmod u+w $dsttmp eval "$sed <$dsttmp.old >$dsttmp" || shtool_exit $? rm -f $dsttmp.old fi if [ ".$opt_s" = .yes ]; then if [ ".$opt_t" = .yes ]; then echo "strip $dsttmp" 1>&2 fi strip $dsttmp || shtool_exit $? fi if [ ".$opt_o" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chown $opt_o $dsttmp" 1>&2 fi chown $opt_o $dsttmp || shtool_exit $? fi if [ ".$opt_g" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chgrp $opt_g $dsttmp" 1>&2 fi chgrp $opt_g $dsttmp || shtool_exit $? fi if [ ".$opt_m" != ".-" ]; then if [ ".$opt_t" = .yes ]; then echo "chmod $opt_m $dsttmp" 1>&2 fi chmod $opt_m $dsttmp || shtool_exit $? fi # determine whether to do a quick install # (has to be done _after_ the strip was already done) quick=no if [ ".$opt_C" = .yes ]; then if [ -r $dst ]; then if cmp -s "$src" "$dst"; then quick=yes fi fi fi # finally, install the file to the real destination if [ $quick = yes ]; then if [ ".$opt_t" = .yes ]; then echo "rm -f $dsttmp" 1>&2 fi rm -f $dsttmp else if [ ".$opt_t" = .yes ]; then echo "rm -f $dst && mv $dsttmp $dst" 1>&2 fi rm -f $dst && mv $dsttmp $dst fi done shtool_exit 0 ;; mkdir ) ## ## mkdir -- Make one or more directories ## Copyright (c) 1996-2008 Ralf S. Engelschall ## errstatus=0 for p in ${1+"$@"}; do # if the directory already exists... if [ -d "$p" ]; then if [ ".$opt_f" = .no ] && [ ".$opt_p" = .no ]; then echo "$msgprefix:Error: directory already exists: $p" 1>&2 errstatus=1 break else continue fi fi # if the directory has to be created... if [ ".$opt_p" = .no ]; then if [ ".$opt_t" = .yes ]; then echo "mkdir $p" 1>&2 fi mkdir $p || errstatus=$? if [ ".$opt_o" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chown $opt_o $p" 1>&2 fi chown $opt_o $p || errstatus=$? fi if [ ".$opt_g" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chgrp $opt_g $p" 1>&2 fi chgrp $opt_g $p || errstatus=$? fi if [ ".$opt_m" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chmod $opt_m $p" 1>&2 fi chmod $opt_m $p || errstatus=$? fi else # the smart situation set fnord `echo ":$p" |\ sed -e 's/^:\//%/' \ -e 's/^://' \ -e 's/\// /g' \ -e 's/^%/\//'` shift pathcomp='' for d in ${1+"$@"}; do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp="./$pathcomp" ;; esac if [ ! -d "$pathcomp" ]; then if [ ".$opt_t" = .yes ]; then echo "mkdir $pathcomp" 1>&2 fi # See https://bugs.php.net/51076 # The fix is from Debian who have sent it # upstream, too; but upstream seems dead. mkdir $pathcomp || { _errstatus=$? [ -d "$pathcomp" ] || errstatus=${_errstatus} unset _errstatus } if [ ".$opt_o" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chown $opt_o $pathcomp" 1>&2 fi chown $opt_o $pathcomp || errstatus=$? fi if [ ".$opt_g" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chgrp $opt_g $pathcomp" 1>&2 fi chgrp $opt_g $pathcomp || errstatus=$? fi if [ ".$opt_m" != . ]; then if [ ".$opt_t" = .yes ]; then echo "chmod $opt_m $pathcomp" 1>&2 fi chmod $opt_m $pathcomp || errstatus=$? fi fi pathcomp="$pathcomp/" done fi done shtool_exit $errstatus ;; platform ) ## ## platform -- Platform Identification Utility ## Copyright (c) 2003-2008 Ralf S. Engelschall ## # option post-processing if [ ".$opt_t" != . ]; then case "$opt_t" in binary ) # binary package id (OpenPKG RPM) opt_F="%-%" opt_L=yes opt_S="" opt_C="+" ;; build ) # build time checking (OpenPKG RPM) opt_F="%-%" opt_L=yes opt_S="" opt_C="+" ;; gnu ) # GNU config.guess style -- opt_F="%-unknown-%" opt_L=yes opt_S="" opt_C="+" ;; web ) # non-whitespace HTTP Server-header id opt_F="%-%" opt_S="/" opt_C="+" ;; summary) # human readable verbose summary information opt_F="Class: %[sc] (%[ac])\\nProduct: %[sp] (%[ap])\\nTechnology: %[st] (%[at])" opt_S=" " opt_C="/" ;; all-in-one ) # full-table all-in-one information opt_F="" opt_F="${opt_F}concise architecture class: %\\n" opt_F="${opt_F}regular architecture class: %{ac}\\n" opt_F="${opt_F}verbose architecture class: %[ac]\\n" opt_F="${opt_F}concise architecture product: %\\n" opt_F="${opt_F}regular architecture product: %{ap}\\n" opt_F="${opt_F}verbose architecture product: %[ap]\\n" opt_F="${opt_F}concise architecture technology: %\\n" opt_F="${opt_F}regular architecture technology: %{at}\\n" opt_F="${opt_F}verbose architecture technology: %[at]\\n" opt_F="${opt_F}concise system class: %\\n" opt_F="${opt_F}regular system class: %{sc}\\n" opt_F="${opt_F}verbose system class: %[sc]\\n" opt_F="${opt_F}concise system product: %\\n" opt_F="${opt_F}regular system product: %{sp}\\n" opt_F="${opt_F}verbose system product: %[sp]\\n" opt_F="${opt_F}concise system technology: %\\n" opt_F="${opt_F}regular system technology: %{st}\\n" opt_F="${opt_F}verbose system technology: %[st]" ;; * ) echo "$msgprefix:Error: invalid type \`$opt_t'" 1>&2 exit 1 ;; esac fi # assemble initial platform information UNAME_MACHINE=`(uname -m) 2>/dev/null` ||\ UNAME_MACHINE=`(uname -p) 2>/dev/null` ||\ UNAME_MACHINE='unknown' UNAME_SYSTEM=`(uname -s) 2>/dev/null` ||\ UNAME_SYSTEM='unknown' UNAME_RELEASE=`(uname -r) 2>/dev/null` ||\ UNAME_RELEASE=`(uname -v) 2>/dev/null` ||\ UNAME_RELEASE='unknown' UNAME="${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}" AC=""; AP=""; AT="" SC=""; SP=""; ST="" # dispatch into platform specific sections case "${UNAME}" in # FreeBSD *:FreeBSD:* ) # determine architecture AC="${UNAME_MACHINE}" case "${AC}" in i386 ) AC="iX86" ;; esac AP="${AC}" AT="${AP}" if [ ".${AT}" = ".iX86" ]; then case "`(/sbin/sysctl -n hw.model) 2>&1`" in *"Xeon"* | *"Pentium Pro"* | *"Cyrix 6x86MX"* | *"Pentium II"* | *"Pentium III"* | *"Pentium 4"* | *"Celeron"* ) AT="i686" ;; *"Pentium"* ) AT="i586" ;; *"i486[SD]X"* | *"Cyrix 486"* | *"Cyrix [56]x86"* | *"Blue Lightning" | *"Cyrix 486S/DX" ) AT="i486" ;; *"i386[SD]X"* | *"NexGen 586"* ) AT="i386" ;; esac fi # determine system r=`echo "${UNAME_RELEASE}" |\ sed -e 's;[()];;' -e 's/\(-.*\)$/[\1]/'` ST="FreeBSD ${r}" SP="${ST}" case "${r}" in 1.* ) SC="4.3BSD" ;; * ) SC="4.4BSD" ;; esac ;; # NetBSD *:NetBSD:* ) # determine architecture AT="${UNAME_MACHINE}" AP="${AT}" case "${AP}" in i[3-6]86 ) AP="iX86" ;; esac AC="${AP}" # determine system r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'` ST="NetBSD ${r}" SP="${ST}" case "${r}" in 0.* ) SC="4.3BSD" ;; * ) SC="4.4BSD" ;; esac ;; # OpenBSD *:OpenBSD:* ) # determine architecture AT="${UNAME_MACHINE}" AP="${AT}" case "${AP}" in i[3-6]86 ) AP="iX86" ;; esac AC="${AP}" # determine system r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'` ST="OpenBSD ${r}" SP="${ST}" SC="4.4BSD" ;; # DragonFly BSD *:DragonFly:* ) # determine architecture AT="${UNAME_MACHINE}" AP="${AT}" case "${AP}" in i[3-6]86 ) AP="iX86" ;; esac AC="${AP}" # determine system r=`echo "${UNAME_RELEASE}" | sed -e 's/\([-_].*\)$/[\1]/'` ST="DragonFly ${r}" SP="${ST}" SC="4.4BSD" ;; # GNU/Linux *:Linux:* ) # determine architecture AT="${UNAME_MACHINE}" case "${AT}" in ia64 ) AT="IA64" ;; x86_64 ) AT='AMD64' ;; parisc ) AT="HPPA32" ;; parisc64 ) AT="HPPA64" ;; esac AP="${AT}" case "${AP}" in i[3-6]86 ) AP='iX86' ;; esac AC="${AP}" # determine system v_kern=`echo "${UNAME_RELEASE}" |\ sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/'` v_libc=`(strings /lib/libc.so.* | grep '^GLIBC_' | sed -e 's/^GLIBC_//' |\ env -i sort -n | sed -n -e '$p' | sed -e 's/^\([0-9][0-9]*\.[0-9][0-9]*\).*/\1/') 2>/dev/null` ST="GNU/${v_libc}/<${v_kern}>" if [ -f /etc/lsb-release ]; then eval `( . /etc/lsb-release echo "SC=\"LSB${LSB_VERSION}\"" if [ ".${DISTRIB_ID}" != . -a ".${DISTRIB_RELEASE}" != . ]; then echo "SP=\"${DISTRIB_ID} ${DISTRIB_RELEASE}\"" fi ) 2>/dev/null` fi if [ ".$SP" = . ]; then for tagfile in x \ `cd /etc && \ /bin/ls *[_-]release *[_-]version 2>/dev/null | env -i sort | \ sed -e '/^redhat-release$/d' -e '/^lsb-release$/d'; \ echo redhat-release lsb-release` do [ ".${tagfile}" = .x ] && continue [ ! -f "/etc/${tagfile}" ] && continue n=`echo ${tagfile} | sed -e 's/[_-]release$//' -e 's/[_-]version$//'` v=`(grep VERSION /etc/${tagfile}; cat /etc/${tagfile}) | grep '[0-9]' | sed -e 'q' |\ sed -e 's/^/#/' \ -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \ -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \ -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \ -e 's/^#.*$//'` case "`util_lower ${n}`" in redhat ) if [ ".`egrep '(Red Hat Enterprise Linux|CentOS)' /etc/${tagfile}`" != . ]; then n="ed at nterprise inux" else n="ed at inux" fi ;; debian ) n="Debian[ GNU/Linux]" ;; ubuntu ) n="Ubuntu[ GNU/Linux]" ;; fedora ) n=" Core[ GNU/Linux]" ;; suse ) n="[Novell ]SUSE[ Linux]" ;; mandrake*|mandriva ) n="Mandriva[ Linux]" ;; gentoo ) n="Gentoo[ GNU/Linux]" ;; slackware ) n="Slackware[ Linux]" ;; turbolinux ) n="TurboLinux" ;; unitedlinux ) n="UnitedLinux" ;; * ) n="${n}[ GNU/Linux]" ;; esac case "$n" in *"<"*">"* ) SP="$n <$v>" ;; * ) SP="$n $v" ;; esac break done fi [ ".$SP" = . ] && SP="${ST}" [ ".$SC" = . ] && SC="LSB" ;; # Sun Solaris *:SunOS:* ) # determine architecture AT="${UNAME_MACHINE}" case "${AT}" in i86pc ) AT="iX86" case "`(/bin/isainfo -k) 2>&1`" in amd64 ) AT="AMD64" ;; esac ;; esac AP="${AT}" case "${AP}" in sun4[cdm] ) AP="SPARC32" ;; sun4[uv] ) AP="SPARC64" ;; sun4* ) AP="SPARC" ;; esac AC="${AP}" case "${AC}" in SPARC* ) AC="SPARC" ;; esac # determine system ST="[Sun ]SunOS ${UNAME_RELEASE}" v=`echo "${UNAME_RELEASE}" |\ sed -e 's;^4\.;1.;' \ -e 's;^5\.\([0-6]\)[^0-9]*$;2.\1;' \ -e 's;^5\.\([0-9][0-9]*\).*;\1;'` SP="[Sun ]Solaris $v" case "${UNAME_RELEASE}" in 4.* ) SC="4.3BSD" ;; 5.* ) SC="SVR4" ;; esac ;; # SCO UnixWare *:UnixWare:* ) # determine architecture AT="${UNAME_MACHINE}" case "${AT}" in i[3-6]86 | ix86at ) AT="iX86" ;; esac AP="${AT}" # determine system v=`/sbin/uname -v` ST="[SCO ]UnixWare ${v}" SP="${ST}" SC="SVR${UNAME_RELEASE}" ;; # QNX *:QNX:* ) # determine architecture AT="${UNAME_MACHINE}" case "${AT}" in x86pc ) AT="iX86" ;; esac AP="${AT}" # determine system v="${UNAME_RELEASE}" ST="QNX[ Neutrino RTOS] ${v}" v=`echo "${v}" | sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\).*$;\1;'` SP="QNX[ Neutrino RTOS] ${v}" SC="QNX" ;; # SGI IRIX *:IRIX*:* ) # determine architecture AT="${UNAME_MACHINE}" AP="${AT}" case "${AP}:${UNAME_SYSTEM}" in IP*:IRIX64 ) AP="MIPS64" ;; IP*:* ) AP="MIPS" ;; esac AC="${AP}" # determine system v=`(/bin/uname -R || /bin/uname -r) 2>/dev/null | sed -e 's;[0-9.]* ;;'` ST="[SGI ]IRIX ${v}" v="${UNAME_RELEASE}" SP="[SGI ]IRIX ${v}" SC="4.2BSD/SVR3" ;; # HP HP-UX *:HP-UX:* ) # determine architecture AT="${UNAME_MACHINE}" case "${AT}" in ia64 ) AT="IA64" ;; 9000/[34]?? ) AT=M68K ;; 9000/[678][0-9][0-9]) sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523 ) AT="HPPA1.0" ;; 528 ) AT="HPPA1.1" ;; 532 ) AT="HPPA2.0" case "${sc_kernel_bits}" in 32 ) AT="${AT}n" ;; 64 ) AT="${AT}w" ;; esac ;; esac ;; esac AP="${AT}" case "${AP}" in HPPA* ) AP="HPPA" ;; esac AC="${AP}" # determine system v=`echo "${UNAME_RELEASE}" | sed -e 's;^[^0-9]*;;'` ST="[HP ]-" SP="${ST}" case "${v}" in 10.* ) SC="SVR4.2" ;; [7-9]* ) SC="SVR4" ;; esac ;; # HP Tru64 (OSF1) *:OSF1:* ) # determine architecture AP="${UNAME_MACHINE}" case "${AP}" in alpha ) AP="Alpha" ;; esac alpha_type=`(/usr/sbin/psrinfo -v) 2>/dev/null |\ sed -n -e 's/^.*The alpha \([^ ][^ ]*\).*processor.*$/\1/p' | sed -e 'q'` AT="${AP}${alpha_type}" AC="${AP}" # determine system v=`echo "${UNAME_RELEASE}" | sed -e 's;^[VTX];;'` ST="[HP ]Tru64 ${v}" SP="${ST}" SC="OSF1" ;; # IBM AIX *:AIX:* ) # determine architecture cpu_arch=RS6000 if [ -x /usr/sbin/lsdev -a -x /usr/sbin/lsattr ]; then cpu_id=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if [ ".`/usr/sbin/lsattr -El ${cpu_id} | grep -i powerpc`" != . ]; then cpu_arch=PPC fi elif [ -d /QOpenSys ]; then # IBM i5/OS (aka OS/400) with PASE (Portable Application Solutions Environment) cpu_arch=PPC fi if [ -x /usr/bin/oslevel ]; then os_level=`/usr/bin/oslevel` else os_level="`uname -v`.`uname -r`" fi os_level=`echo "${os_level}" |\ sed -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(\.[0-9][0-9]*\)\(.*\)$;<\1>\2[\3];' \ -e 's;^\([0-9][0-9]*\.[0-9][0-9]*\)\(.*\)$;<\1>\2;'` AT="${cpu_arch}" AP="${AT}" AC="${AP}" # determine system ST="[IBM ]${os_level}" SP="${ST}" case "${os_level}" in [12]* ) SC="SVR2" ;; * ) SC="SVR4" ;; esac ;; # Apple Mac OS X (Darwin) *:Darwin:* ) # determine architecture AT="`uname -p`" case "${AT}" in powerpc ) AT="PPC" ;; esac AP="${AT}" case "${AP}" in i?86 ) AP="iX86" ;; esac AC="${AP}" # determine system unset v1; unset v2; unset v3 eval `echo "${UNAME_RELEASE}" |\ sed -e 's/^/#/' \ -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \ -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \ -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \ -e 's/^#.*$/v1="0"/'` ST="[Apple ]<${UNAME_SYSTEM} ${v1}>${v2+.$v2}${v3+[.$v3]}" SP="$ST" v="`(sw_vers) 2>/dev/null | grep 'ProductVersion:' | sed -e 's/^ProductVersion:[^0-9]*\([0-9][0-9.]*\).*$/\1/'`" if [ ".$v" = . ]; then for name in System Server; do if [ -f /System/Library/CoreServices/${name}Version.plist ]; then v=`(defaults read "/System/Library/CoreServices/${name}Version" "ProductVersion") 2>/dev/null` [ ".$v" != . ] && break fi done fi if [ ".$v" != . ]; then unset v1; unset v2; unset v3 eval `echo "${v}" |\ sed -e 's/^/#/' \ -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \ -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \ -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \ -e 's/^#.*$/v1="0"/'` SP="[Apple ]Mac OS X ${v1}${v2+.$v2}${v3+[.$v3]}" fi SC="4.4BSD/Mach3.0" ;; # Windows/Cygwin *:CYGWIN*:* ) # determine architecture AT="`uname -m`" AP="${AT}" case "${AP}" in i?86 ) AP="iX86" ;; esac AC="${AP}" # determine system unset v1; unset v2; unset v3 eval `echo "${UNAME_RELEASE}" |\ sed -e 's/^/#/' \ -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"; v3="\3"/' \ -e 's/^#\([0-9][0-9]*\)\.\([0-9][0-9]*\).*$/v1="\1"; v2="\2"/' \ -e 's/^#\([0-9][0-9]*\).*$/v1="\1"/' \ -e 's/^#.*$/v1="0"/'` ST="Cygwin ${v1}${v2+.$v2}${v3+[.$v3]}" SP="$ST" SC="Windows" v=`echo "${UNAME_SYSTEM}" | sed -e 's/^CYGWIN_NT-//' |\ sed -e 's/^/#/' -e 's/^#\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' -e 's/^#.*$//'` case "$v" in 4.0 ) SC="$SC[ NT]" ;; 5.0 ) SC="$SC[ 2000]" ;; 5.1 ) SC="$SC[ XP]" ;; 6.0 ) SC="$SC[ Vista]" ;; esac ;; # TODO ...ADD YOUR NEW PLATFORM CHECK HERE... TODO # *:XXX:* ) # ... # ;; # ...A STILL UNKNOWN PLATFORM... * ) AT=`echo "${UNAME_MACHINE}" | sed -e "s; ;${opt_C};g"` AP="${AT}" AC="${AP}" v=`echo "${UNAME_RELEASE}" |\ sed -e 's/^/#/' \ -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \ -e 's/^#[^0-9]*\([0-9][0-9]*\.[0-9][0-9]*\).*$/\1/' \ -e 's/^#[^0-9]*\([0-9][0-9]*\).*$/\1/' \ -e 's/^#.*$/?/'` ST="${UNAME_SYSTEM} ${v}" SP="${ST}" SC="${SP}" ;; esac # provide fallback values [ ".$AT" = . ] && AT="${AP:-${AC}}" [ ".$AP" = . ] && AP="${AT:-${AC}}" [ ".$AC" = . ] && AC="${AP:-${AT}}" [ ".$ST" = . ] && ST="${SP:-${SC}}" [ ".$SP" = . ] && SP="${ST:-${SC}}" [ ".$SC" = . ] && SC="${SP:-${ST}}" # support explicit enforced verbose/concise output if [ ".$opt_v" = .yes ]; then opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%[\1]/g'` elif [ ".$opt_c" = .yes ]; then opt_F=`echo ":$opt_F" | sed -e 's/^://' -e 's/%\([as][cpt]\)/%<\1>/g'` fi # provide verbose and concise variants AC_V=""; AC_N=""; AC_C="" AP_V=""; AP_N=""; AP_C="" AT_V=""; AT_N=""; AT_C="" SC_V=""; SC_N=""; SC_C="" SP_V=""; SP_N=""; SP_C="" ST_V=""; ST_N=""; ST_C="" for var_lc in at ap ac st sp sc; do case "$opt_F" in *"%[${val_lc}]"* | *"%{${val_lc}}"* | *"%${val_lc}"* | *"%<${val_lc}>"* ) var_uc=`util_upper "$var_lc"` eval "val=\"\$${var_uc}\"" val_V=""; val_N=""; val_C="" case "$opt_F" in *"%[${var_lc}]"* ) val_V=`echo ":$val" | \ sed -e 's/^://' \ -e 's;\[\([^]]*\)\];\1;g' \ -e 's;<\([^>]*\)>;\1;g' \ -e "s; ;;g" \ -e "s;/;%%;g" \ -e "s;;${opt_S};g" \ -e "s;%%;${opt_C};g"` eval "${var_uc}_V=\"\${val_V}\"" ;; esac case "$opt_F" in *"%{${var_lc}}"* | *"%${var_lc}"* ) val_N=`echo ":$val" | \ sed -e 's/^://' \ -e 's;\[\([^]]*\)\];;g' \ -e 's;<\([^>]*\)>;\1;g' \ -e "s; ;;g" \ -e "s;/;%%;g" \ -e "s;;${opt_S};g" \ -e "s;%%;${opt_C};g"` eval "${var_uc}_N=\"\${val_N}\"" ;; esac case "$opt_F" in *"%<${var_lc}>"* ) val_C=`echo ":$val" | \ sed -e 's/^://' \ -e 's;\[\([^]]*\)\];;g' \ -e 's;[^<]*<\([^>]*\)>[^<]*;\1;g' \ -e "s; ;;g" \ -e "s;/;%%;g" \ -e "s;;${opt_S};g" \ -e "s;%%;${opt_C};g"` eval "${var_uc}_C=\"\${val_C}\"" ;; esac ;; esac done # create output string output=`echo ":$opt_F" |\ sed -e "s/^://" \ -e "s;%\\[ac\\];${AC_V};g" \ -e "s;%{ac};${AC_N};g" \ -e "s;%ac;${AC_N};g" \ -e "s;%;${AC_C};g" \ -e "s;%\\[ap\\];${AP_V};g" \ -e "s;%{ap};${AP_N};g" \ -e "s;%ap;${AP_N};g" \ -e "s;%;${AP_C};g" \ -e "s;%\\[at\\];${AT_V};g" \ -e "s;%{at};${AT_N};g" \ -e "s;%at;${AT_N};g" \ -e "s;%;${AT_C};g" \ -e "s;%\\[sc\\];${SC_V};g" \ -e "s;%{sc};${SC_N};g" \ -e "s;%sc;${SC_N};g" \ -e "s;%;${SC_C};g" \ -e "s;%\\[sp\\];${SP_V};g" \ -e "s;%{sp};${SP_N};g" \ -e "s;%sp;${SP_N};g" \ -e "s;%;${SP_C};g" \ -e "s;%\\[st\\];${ST_V};g" \ -e "s;%{st};${ST_N};g" \ -e "s;%st;${ST_N};g" \ -e "s;%;${ST_C};g" \ -e 's/\\\\n/^/g' |\ tr '^' '\012'` # support lower/upper-case mapping if [ ".$opt_L" = .yes ]; then output=`util_lower "$output"` elif [ ".$opt_U" = .yes ]; then output=`util_upper "$output"` fi # display output string if [ ".$opt_n" = .yes ]; then echo . | awk '{ printf("%s", output); }' output="$output" else echo "$output" fi shtool_exit 0 ;; path ) ## ## path -- Deal with program paths ## Copyright (c) 1998-2008 Ralf S. Engelschall ## namelist="$*" # check whether the test command supports the -x option if [ -x /bin/sh ] 2>/dev/null; then minusx="-x" else minusx="-r" fi # split path string paths="`echo $opt_p |\ sed -e 's/^:/.:/' \ -e 's/::/:.:/g' \ -e 's/:$/:./' \ -e 's/:/ /g'`" # SPECIAL REQUEST # translate forward to reverse path if [ ".$opt_r" = .yes ]; then if [ "x$namelist" = "x." ]; then rp='.' else rp='' for pe in `IFS="$IFS/"; echo $namelist`; do rp="../$rp" done fi echo $rp | sed -e 's:/$::' shtool_exit 0 fi # SPECIAL REQUEST # strip out directory or base name if [ ".$opt_d" = .yes ]; then echo "$namelist" |\ sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;' shtool_exit 0 fi if [ ".$opt_b" = .yes ]; then echo "$namelist" |\ sed -e 's;.*/\([^/]*\)$;\1;' shtool_exit 0 fi # MAGIC SITUATION # Perl Interpreter (perl) if [ ".$opt_m" = .yes ] && [ ".$namelist" = .perl ]; then rm -f $tmpfile >/dev/null 2>&1 touch $tmpfile found=0 pc=99 for dir in $paths; do dir=`echo $dir | sed -e 's;/*$;;'` nc=99 for name in perl perl5 miniperl; do if [ $minusx "$dir/$name" ] && [ ! -d "$dir/$name" ]; then perl="$dir/$name" pv=`$perl -e 'printf("%.3f", $]);'` echo "$pv:$pc:$nc:$perl" >>$tmpfile found=1 fi nc=`expr $nc - 1` done pc=`expr $pc - 1` done if [ $found = 1 ]; then perl="`cat $tmpfile | sort -r -u | sed -e 'q' | cut -d: -f4`" rm -f $tmpfile >/dev/null 2>&1 echo "$perl" shtool_exit 0 fi rm -f $tmpfile >/dev/null 2>&1 shtool_exit 1 fi # MAGIC SITUATION # C pre-processor (cpp) if [ ".$opt_m" = .yes ] && [ ".$namelist" = .cpp ]; then echo >$tmpfile.c "#include " echo >>$tmpfile.c "Syntax Error" # 1. try the standard cc -E approach cpp="${CC-cc} -E" (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out my_error=`grep -v '^ *+' $tmpfile.out` if [ ".$my_error" != . ]; then # 2. try the cc -E approach and GCC's -traditional-ccp option cpp="${CC-cc} -E -traditional-cpp" (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out my_error=`grep -v '^ *+' $tmpfile.out` if [ ".$my_error" != . ]; then # 3. try a standalone cpp command in path and lib dirs for path in $paths /lib /usr/lib /usr/local/lib; do path=`echo $path | sed -e 's;/*$;;'` if [ $minusx "$path/cpp" ] && [ ! -d "$path/cpp" ]; then cpp="$path/cpp" break fi done if [ ".$cpp" != . ]; then (eval "$cpp $tmpfile.c >/dev/null") 2>$tmpfile.out my_error=`grep -v '^ *+' $tmpfile.out` if [ ".$my_error" != . ]; then # ok, we gave up... cpp='' fi fi fi fi rm -f $tmpfile >/dev/null 2>&1 rm -f $tmpfile.c $tmpfile.out >/dev/null 2>&1 if [ ".$cpp" != . ]; then echo "$cpp" shtool_exit 0 fi shtool_exit 1 fi # STANDARD SITUATION # iterate over names for name in $namelist; do # iterate over paths for path in $paths; do path=`echo $path | sed -e 's;/*$;;'` if [ $minusx "$path/$name" ] && [ ! -d "$path/$name" ]; then if [ ".$opt_s" != .yes ]; then echo "$path/$name" fi shtool_exit 0 fi done done shtool_exit 1 ;; esac shtool_exit 0 PK!--build/run-tests.phpnu[#!/usr/bin/env php | | Preston L. Bannister | | Marcus Boerger | | Derick Rethans | | Sander Roobol | | Andrea Faulds | | (based on version by: Stig Bakken ) | | (based on the PHP 3 test framework by Rasmus Lerdorf) | +----------------------------------------------------------------------+ */ /* $Id: 07496d31a567c73b7aeb09b817342e21553aeb42 $ */ /* Temporary variables while this file is being refactored. */ /** @var ?JUnit */ $junit = null; /* End temporary variables. */ /* Let there be no top-level code beyond this point: * Only functions and classes, thanks! * * Minimum required PHP version: 7.4.0 */ function show_usage(): void { echo << Run up to simultaneous testing processes in parallel for quicker testing on systems with multiple logical processors. Note that this is experimental feature. -l Read the testfiles to be executed from . After the test has finished all failed tests are written to the same . If the list is empty and no further test is specified then all tests are executed (same as: -r -w ). -r Read the testfiles to be executed from . -w Write a list of all failed tests to . -a Same as -w but append rather then truncating . -W Write a list of all tests and their result status to . -c Look for php.ini in directory or use as ini. -n Pass -n option to the php binary (Do not use a php.ini). -d foo=bar Pass -d option to the php binary (Define INI entry foo with value 'bar'). -g Comma separated list of groups to show during test run (possible values: PASS, FAIL, XFAIL, XLEAK, SKIP, BORK, WARN, LEAK, REDIRECT). -m Test for memory leaks with Valgrind (equivalent to -M memcheck). -M Test for errors with Valgrind tool. -p Specify PHP executable to run. -P Use PHP_BINARY as PHP executable to run (default). -q Quiet, no user interaction (same as environment NO_INTERACTION). -s Write output to . -x Sets 'SKIP_SLOW_TESTS' environmental variable. --offline Sets 'SKIP_ONLINE_TESTS' environmental variable. --verbose -v Verbose mode. --help -h This Help. --temp-source --temp-target [--temp-urlbase ] Write temporary files to by replacing from the filenames to generate with . In general you want to make the path to your source files and some patch in your web page hierarchy with pointing to . --keep-[all|php|skip|clean] Do not delete 'all' files, 'php' test file, 'skip' or 'clean' file. --set-timeout Set timeout for individual tests, where is the number of seconds. The default value is 60 seconds, or 300 seconds when testing for memory leaks. --context Sets the number of lines of surrounding context to print for diffs. The default value is 3. --show-[all|php|skip|clean|exp|diff|out|mem] Show 'all' files, 'php' test file, 'skip' or 'clean' file. You can also use this to show the output 'out', the expected result 'exp', the difference between them 'diff' or the valgrind log 'mem'. The result types get written independent of the log format, however 'diff' only exists when a test fails. --show-slow Show all tests that took longer than milliseconds to run. --no-clean Do not execute clean section if any. --color --no-color Do/Don't colorize the result type in the test result. --repeat [n] Run the tests multiple times in the same process and check the output of the last execution (CLI SAPI only). --bless Bless failed tests using scripts/dev/bless_tests.php. HELP; } /** * One function to rule them all, one function to find them, one function to * bring them all and in the darkness bind them. * This is the entry point and exit point überfunction. It contains all the * code that was previously found at the top level. It could and should be * refactored to be smaller and more manageable. */ function main(): void { /* This list was derived in a naïve mechanical fashion. If a member * looks like it doesn't belong, it probably doesn't; cull at will. */ global $DETAILED, $PHP_FAILED_TESTS, $SHOW_ONLY_GROUPS, $argc, $argv, $cfg, $cfgfiles, $cfgtypes, $conf_passed, $end_time, $environment, $exts_skipped, $exts_tested, $exts_to_test, $failed_tests_file, $ignored_by_ext, $ini_overwrites, $is_switch, $colorize, $just_save_results, $log_format, $matches, $no_clean, $no_file_cache, $optionals, $output_file, $pass_option_n, $pass_options, $pattern_match, $php, $php_cgi, $phpdbg, $preload, $redir_tests, $repeat, $result_tests_file, $slow_min_ms, $start_time, $switch, $temp_source, $temp_target, $test_cnt, $test_dirs, $test_files, $test_idx, $test_list, $test_results, $testfile, $user_tests, $valgrind, $sum_results, $shuffle, $file_cache, $num_repeats, $bless; // Parallel testing global $workers, $workerID; global $context_line_count; // Temporary for the duration of refactoring /** @var JUnit */ global $junit; define('IS_WINDOWS', substr(PHP_OS, 0, 3) == "WIN"); $workerID = 0; if (getenv("TEST_PHP_WORKER")) { $workerID = intval(getenv("TEST_PHP_WORKER")); run_worker(); return; } define('INIT_DIR', getcwd()); // Change into the PHP source directory. if (getenv('TEST_PHP_SRCDIR')) { @chdir(getenv('TEST_PHP_SRCDIR')); } define('TEST_PHP_SRCDIR', getcwd()); check_proc_open_function_exists(); // If timezone is not set, use UTC. if (ini_get('date.timezone') == '') { date_default_timezone_set('UTC'); } // Delete some security related environment variables putenv('SSH_CLIENT=deleted'); putenv('SSH_AUTH_SOCK=deleted'); putenv('SSH_TTY=deleted'); putenv('SSH_CONNECTION=deleted'); set_time_limit(0); ini_set('pcre.backtrack_limit', PHP_INT_MAX); init_output_buffers(); error_reporting(E_ALL); $environment = $_ENV ?? []; // Some configurations like php.ini-development set variables_order="GPCS" // not "EGPCS", in which case $_ENV is NOT populated. Detect if the $_ENV // was empty and handle it by explicitly populating through getenv(). if (empty($environment)) { $environment = getenv(); } if (empty($environment['TEMP'])) { $environment['TEMP'] = sys_get_temp_dir(); if (empty($environment['TEMP'])) { // For example, OpCache on Windows will fail in this case because // child processes (for tests) will not get a TEMP variable, so // GetTempPath() will fallback to c:\windows, while GetTempPath() // will return %TEMP% for parent (likely a different path). The // parent will initialize the OpCache in that path, and child will // fail to reattach to the OpCache because it will be using the // wrong path. die("TEMP environment is NOT set"); } else { if (count($environment) == 1) { // Not having other environment variables, only having TEMP, is // probably ok, but strange and may make a difference in the // test pass rate, so warn the user. echo "WARNING: Only 1 environment variable will be available to tests(TEMP environment variable)" . PHP_EOL; } } } if (IS_WINDOWS && empty($environment["SystemRoot"])) { $environment["SystemRoot"] = getenv("SystemRoot"); } $php = null; $php_cgi = null; $phpdbg = null; if (getenv('TEST_PHP_LOG_FORMAT')) { $log_format = strtoupper(getenv('TEST_PHP_LOG_FORMAT')); } else { $log_format = 'LEODS'; } // Check whether a detailed log is wanted. if (getenv('TEST_PHP_DETAILED')) { $DETAILED = getenv('TEST_PHP_DETAILED'); } else { $DETAILED = 0; } $junit = new JUnit($environment, $workerID); if (getenv('SHOW_ONLY_GROUPS')) { $SHOW_ONLY_GROUPS = explode(",", getenv('SHOW_ONLY_GROUPS')); } else { $SHOW_ONLY_GROUPS = []; } // Check whether user test dirs are requested. if (getenv('TEST_PHP_USER')) { $user_tests = explode(',', getenv('TEST_PHP_USER')); } else { $user_tests = []; } $exts_to_test = []; $ini_overwrites = [ 'output_handler=', 'open_basedir=', 'disable_functions=', 'output_buffering=Off', 'error_reporting=' . E_ALL, 'display_errors=1', 'display_startup_errors=1', 'log_errors=0', 'html_errors=0', 'track_errors=0', 'report_memleaks=1', 'report_zend_debug=0', 'docref_root=', 'docref_ext=.html', 'error_prepend_string=', 'error_append_string=', 'auto_prepend_file=', 'auto_append_file=', 'ignore_repeated_errors=0', 'precision=14', 'serialize_precision=-1', 'memory_limit=128M', 'opcache.fast_shutdown=0', 'opcache.file_update_protection=0', 'opcache.revalidate_freq=0', 'opcache.jit_hot_loop=1', 'opcache.jit_hot_func=1', 'opcache.jit_hot_return=1', 'opcache.jit_hot_side_exit=1', 'zend.assertions=1', 'zend.exception_ignore_args=0', 'zend.exception_string_param_max_len=15', 'short_open_tag=0', ]; $no_file_cache = '-d opcache.file_cache= -d opcache.file_cache_only=0'; define('PHP_QA_EMAIL', 'qa-reports@lists.php.net'); define('QA_SUBMISSION_PAGE', 'http://qa.php.net/buildtest-process.php'); define('QA_REPORTS_PAGE', 'http://qa.php.net/reports'); define('TRAVIS_CI', (bool) getenv('TRAVIS')); // Determine the tests to be run. $test_files = []; $redir_tests = []; $test_results = []; $PHP_FAILED_TESTS = [ 'BORKED' => [], 'FAILED' => [], 'WARNED' => [], 'LEAKED' => [], 'XFAILED' => [], 'XLEAKED' => [], 'SLOW' => [] ]; // If parameters given assume they represent selected tests to run. $result_tests_file = false; $failed_tests_file = false; $pass_option_n = false; $pass_options = ''; $output_file = INIT_DIR . '/php_test_results_' . date('Ymd_Hi') . '.txt'; $just_save_results = false; $valgrind = null; $temp_source = null; $temp_target = null; $conf_passed = null; $no_clean = false; $colorize = true; if (function_exists('sapi_windows_vt100_support') && !sapi_windows_vt100_support(STDOUT, true)) { $colorize = false; } if (array_key_exists('NO_COLOR', $environment)) { $colorize = false; } $selected_tests = false; $slow_min_ms = INF; $preload = false; $file_cache = null; $shuffle = false; $bless = false; $workers = null; $context_line_count = 3; $num_repeats = 1; $cfgtypes = ['show', 'keep']; $cfgfiles = ['skip', 'php', 'clean', 'out', 'diff', 'exp', 'mem']; $cfg = []; foreach ($cfgtypes as $type) { $cfg[$type] = []; foreach ($cfgfiles as $file) { $cfg[$type][$file] = false; } } if (!isset($argc, $argv) || !$argc) { $argv = [__FILE__]; $argc = 1; } if (getenv('TEST_PHP_ARGS')) { $argv = array_merge($argv, explode(' ', getenv('TEST_PHP_ARGS'))); $argc = count($argv); } for ($i = 1; $i < $argc; $i++) { $is_switch = false; $switch = substr($argv[$i], 1, 1); $repeat = substr($argv[$i], 0, 1) == '-'; while ($repeat) { if (!$is_switch) { $switch = substr($argv[$i], 1, 1); } $is_switch = true; if ($repeat) { foreach ($cfgtypes as $type) { if (strpos($switch, '--' . $type) === 0) { foreach ($cfgfiles as $file) { if ($switch == '--' . $type . '-' . $file) { $cfg[$type][$file] = true; $is_switch = false; break; } } } } } if (!$is_switch) { $is_switch = true; break; } $repeat = false; switch ($switch) { case 'j': $workers = substr($argv[$i], 2); if (!preg_match('/^\d+$/', $workers) || $workers == 0) { error("'$workers' is not a valid number of workers, try e.g. -j16 for 16 workers"); } $workers = intval($workers, 10); // Don't use parallel testing infrastructure if there is only one worker. if ($workers === 1) { $workers = null; } break; case 'r': case 'l': $test_list = file($argv[++$i]); if ($test_list) { foreach ($test_list as $test) { $matches = []; if (preg_match('/^#.*\[(.*)\]\:\s+(.*)$/', $test, $matches)) { $redir_tests[] = [$matches[1], $matches[2]]; } else { if (strlen($test)) { $test_files[] = trim($test); } } } } if ($switch != 'l') { break; } $i--; // no break case 'w': $failed_tests_file = fopen($argv[++$i], 'w+t'); break; case 'a': $failed_tests_file = fopen($argv[++$i], 'a+t'); break; case 'W': $result_tests_file = fopen($argv[++$i], 'w+t'); break; case 'c': $conf_passed = $argv[++$i]; break; case 'd': $ini_overwrites[] = $argv[++$i]; break; case 'g': $SHOW_ONLY_GROUPS = explode(",", $argv[++$i]); break; //case 'h' case '--keep-all': foreach ($cfgfiles as $file) { $cfg['keep'][$file] = true; } break; //case 'l' case 'm': $valgrind = new RuntestsValgrind($environment); break; case 'M': $valgrind = new RuntestsValgrind($environment, $argv[++$i]); break; case 'n': if (!$pass_option_n) { $pass_options .= ' -n'; } $pass_option_n = true; break; case 'e': $pass_options .= ' -e'; break; case '--preload': $preload = true; $environment['SKIP_PRELOAD'] = 1; break; case '--file-cache-prime': $file_cache = 'prime'; break; case '--file-cache-use': $file_cache = 'use'; break; case '--no-clean': $no_clean = true; break; case '--color': $colorize = true; break; case '--no-color': $colorize = false; break; case 'p': $php = $argv[++$i]; putenv("TEST_PHP_EXECUTABLE=$php"); $environment['TEST_PHP_EXECUTABLE'] = $php; break; case 'P': $php = PHP_BINARY; putenv("TEST_PHP_EXECUTABLE=$php"); $environment['TEST_PHP_EXECUTABLE'] = $php; break; case 'q': putenv('NO_INTERACTION=1'); $environment['NO_INTERACTION'] = 1; break; //case 'r' case 's': $output_file = $argv[++$i]; $just_save_results = true; break; case '--set-timeout': $timeout = $argv[++$i] ?? ''; if (!preg_match('/^\d+$/', $timeout)) { error("'$timeout' is not a valid number of seconds, try e.g. --set-timeout 60 for 1 minute"); } $environment['TEST_TIMEOUT'] = intval($timeout, 10); break; case '--context': $context_line_count = $argv[++$i] ?? ''; if (!preg_match('/^\d+$/', $context_line_count)) { error("'$context_line_count' is not a valid number of lines of context, try e.g. --context 3 for 3 lines"); } $context_line_count = intval($context_line_count, 10); break; case '--show-all': foreach ($cfgfiles as $file) { $cfg['show'][$file] = true; } break; case '--show-slow': $slow_min_ms = $argv[++$i] ?? ''; if (!preg_match('/^\d+$/', $slow_min_ms)) { error("'$slow_min_ms' is not a valid number of milliseconds, try e.g. --show-slow 1000 for 1 second"); } $slow_min_ms = intval($slow_min_ms, 10); break; case '--temp-source': $temp_source = $argv[++$i]; break; case '--temp-target': $temp_target = $argv[++$i]; break; case 'v': case '--verbose': $DETAILED = true; break; case 'x': $environment['SKIP_SLOW_TESTS'] = 1; break; case '--offline': $environment['SKIP_ONLINE_TESTS'] = 1; break; case '--shuffle': $shuffle = true; break; case '--asan': case '--msan': $environment['USE_ZEND_ALLOC'] = 0; $environment['USE_TRACKED_ALLOC'] = 1; $environment['SKIP_ASAN'] = 1; $environment['SKIP_PERF_SENSITIVE'] = 1; if ($switch === '--msan') { $environment['SKIP_MSAN'] = 1; $environment['MSAN_OPTIONS'] = 'intercept_tls_get_addr=0'; } $lsanSuppressions = __DIR__ . '/.github/lsan-suppressions.txt'; if (file_exists($lsanSuppressions)) { $environment['LSAN_OPTIONS'] = 'suppressions=' . $lsanSuppressions . ':print_suppressions=0'; } break; case '--repeat': $num_repeats = (int) $argv[++$i]; $environment['SKIP_REPEAT'] = 1; break; case '--bless': $bless = true; break; //case 'w' case '-': // repeat check with full switch $switch = $argv[$i]; if ($switch != '-') { $repeat = true; } break; case '--version': echo '$Id: 07496d31a567c73b7aeb09b817342e21553aeb42 $' . "\n"; exit(1); default: echo "Illegal switch '$switch' specified!\n"; // no break case 'h': case '-help': case '--help': show_usage(); exit(1); } } if (!$is_switch) { $selected_tests = true; $testfile = realpath($argv[$i]); if (!$testfile && strpos($argv[$i], '*') !== false && function_exists('glob')) { if (substr($argv[$i], -5) == '.phpt') { $pattern_match = glob($argv[$i]); } else { if (preg_match("/\*$/", $argv[$i])) { $pattern_match = glob($argv[$i] . '.phpt'); } else { die('Cannot find test file "' . $argv[$i] . '".' . PHP_EOL); } } if (is_array($pattern_match)) { $test_files = array_merge($test_files, $pattern_match); } } else { if (is_dir($testfile)) { find_files($testfile); } else { if (substr($testfile, -5) == '.phpt') { $test_files[] = $testfile; } else { die('Cannot find test file "' . $argv[$i] . '".' . PHP_EOL); } } } } } if ($selected_tests && count($test_files) === 0) { echo "No tests found.\n"; return; } if (!$php) { $php = getenv('TEST_PHP_EXECUTABLE'); } if (!$php) { $php = PHP_BINARY; } if (!$php_cgi) { $php_cgi = getenv('TEST_PHP_CGI_EXECUTABLE'); } if (!$php_cgi) { $php_cgi = get_binary($php, 'php-cgi', 'sapi/cgi/php-cgi'); } if (!$phpdbg) { $phpdbg = getenv('TEST_PHPDBG_EXECUTABLE'); } if (!$phpdbg) { $phpdbg = get_binary($php, 'phpdbg', 'sapi/phpdbg/phpdbg'); } putenv("TEST_PHP_EXECUTABLE=$php"); $environment['TEST_PHP_EXECUTABLE'] = $php; putenv("TEST_PHP_CGI_EXECUTABLE=$php_cgi"); $environment['TEST_PHP_CGI_EXECUTABLE'] = $php_cgi; putenv("TEST_PHPDBG_EXECUTABLE=$phpdbg"); $environment['TEST_PHPDBG_EXECUTABLE'] = $phpdbg; if ($conf_passed !== null) { if (IS_WINDOWS) { $pass_options .= " -c " . escapeshellarg($conf_passed); } else { $pass_options .= " -c '" . realpath($conf_passed) . "'"; } } $test_files = array_unique($test_files); $test_files = array_merge($test_files, $redir_tests); // Run selected tests. $test_cnt = count($test_files); verify_config(); write_information(); if ($test_cnt) { putenv('NO_INTERACTION=1'); usort($test_files, "test_sort"); $start_time = time(); echo "Running selected tests.\n"; $test_idx = 0; run_all_tests($test_files, $environment); $end_time = time(); if ($failed_tests_file) { fclose($failed_tests_file); } if ($result_tests_file) { fclose($result_tests_file); } if (0 == count($test_results)) { echo "No tests were run.\n"; return; } compute_summary(); echo "====================================================================="; echo get_summary(false); if ($output_file != '' && $just_save_results) { save_or_mail_results(); } } else { // Compile a list of all test files (*.phpt). $test_files = []; $exts_tested = count($exts_to_test); $exts_skipped = 0; $ignored_by_ext = 0; sort($exts_to_test); $test_dirs = []; $optionals = ['Zend', 'tests', 'ext', 'sapi']; foreach ($optionals as $dir) { if (is_dir($dir)) { $test_dirs[] = $dir; } } // Convert extension names to lowercase foreach ($exts_to_test as $key => $val) { $exts_to_test[$key] = strtolower($val); } foreach ($test_dirs as $dir) { find_files(TEST_PHP_SRCDIR . "/{$dir}", $dir == 'ext'); } foreach ($user_tests as $dir) { find_files($dir, $dir == 'ext'); } $test_files = array_unique($test_files); usort($test_files, "test_sort"); $start_time = time(); show_start($start_time); $test_cnt = count($test_files); $test_idx = 0; run_all_tests($test_files, $environment); $end_time = time(); if ($failed_tests_file) { fclose($failed_tests_file); } if ($result_tests_file) { fclose($result_tests_file); } // Summarize results if (0 == count($test_results)) { echo "No tests were run.\n"; return; } compute_summary(); show_end($end_time); show_summary(); save_or_mail_results(); } $junit->saveXML(); if ($bless) { bless_failed_tests($PHP_FAILED_TESTS['FAILED']); } if (getenv('REPORT_EXIT_STATUS') !== '0' && getenv('REPORT_EXIT_STATUS') !== 'no' && ($sum_results['FAILED'] || $sum_results['BORKED'] || $sum_results['LEAKED'])) { exit(1); } } if (!function_exists("hrtime")) { /** * @return array|float|int */ function hrtime(bool $as_num = false) { $t = microtime(true); if ($as_num) { return $t * 1000000000; } $s = floor($t); return [0 => $s, 1 => ($t - $s) * 1000000000]; } } function verify_config(): void { global $php; if (empty($php) || !file_exists($php)) { error('environment variable TEST_PHP_EXECUTABLE must be set to specify PHP executable!'); } if (!is_executable($php)) { error("invalid PHP executable specified by TEST_PHP_EXECUTABLE = $php"); } } function write_information(): void { global $php, $php_cgi, $phpdbg, $php_info, $user_tests, $ini_overwrites, $pass_options, $exts_to_test, $valgrind, $no_file_cache; // Get info from php $info_file = __DIR__ . '/run-test-info.php'; @unlink($info_file); $php_info = ''; save_text($info_file, $php_info); $info_params = []; settings2array($ini_overwrites, $info_params); $info_params = settings2params($info_params); $php_info = `$php $pass_options $info_params $no_file_cache "$info_file"`; define('TESTED_PHP_VERSION', `$php -n -r "echo PHP_VERSION;"`); if ($php_cgi && $php != $php_cgi) { $php_info_cgi = `$php_cgi $pass_options $info_params $no_file_cache -q "$info_file"`; $php_info_sep = "\n---------------------------------------------------------------------"; $php_cgi_info = "$php_info_sep\nPHP : $php_cgi $php_info_cgi$php_info_sep"; } else { $php_cgi_info = ''; } if ($phpdbg) { $phpdbg_info = `$phpdbg $pass_options $info_params $no_file_cache -qrr "$info_file"`; $php_info_sep = "\n---------------------------------------------------------------------"; $phpdbg_info = "$php_info_sep\nPHP : $phpdbg $phpdbg_info$php_info_sep"; } else { $phpdbg_info = ''; } if (function_exists('opcache_invalidate')) { opcache_invalidate($info_file, true); } @unlink($info_file); // load list of enabled and loadable extensions save_text($info_file, <<<'PHP' PHP); $exts_to_test = explode(',', `$php $pass_options $info_params $no_file_cache "$info_file"`); // check for extensions that need special handling and regenerate $info_params_ex = [ 'session' => ['session.auto_start=0'], 'tidy' => ['tidy.clean_output=0'], 'zlib' => ['zlib.output_compression=Off'], 'xdebug' => ['xdebug.mode=off'], ]; foreach ($info_params_ex as $ext => $ini_overwrites_ex) { if (in_array($ext, $exts_to_test)) { $ini_overwrites = array_merge($ini_overwrites, $ini_overwrites_ex); } } if (function_exists('opcache_invalidate')) { opcache_invalidate($info_file, true); } @unlink($info_file); // Write test context information. echo " ===================================================================== PHP : $php $php_info $php_cgi_info $phpdbg_info CWD : " . TEST_PHP_SRCDIR . " Extra dirs : "; foreach ($user_tests as $test_dir) { echo "{$test_dir}\n "; } echo " VALGRIND : " . ($valgrind ? $valgrind->getHeader() : 'Not used') . " ===================================================================== "; } function save_or_mail_results(): void { global $sum_results, $just_save_results, $failed_test_summary, $PHP_FAILED_TESTS, $php, $output_file; /* We got failed Tests, offer the user to send an e-mail to QA team, unless NO_INTERACTION is set */ if (!getenv('NO_INTERACTION') && !TRAVIS_CI) { $fp = fopen("php://stdin", "r+"); if ($sum_results['FAILED'] || $sum_results['BORKED'] || $sum_results['WARNED'] || $sum_results['LEAKED']) { echo "\nYou may have found a problem in PHP."; } echo "\nThis report can be automatically sent to the PHP QA team at\n"; echo QA_REPORTS_PAGE . " and http://news.php.net/php.qa.reports\n"; echo "This gives us a better understanding of PHP's behavior.\n"; echo "If you don't want to send the report immediately you can choose\n"; echo "option \"s\" to save it. You can then email it to " . PHP_QA_EMAIL . " later.\n"; echo "Do you want to send this report now? [Yns]: "; flush(); $user_input = fgets($fp, 10); $just_save_results = (!empty($user_input) && strtolower($user_input[0]) === 's'); } if ($just_save_results || !getenv('NO_INTERACTION') || TRAVIS_CI) { if ($just_save_results || TRAVIS_CI || strlen(trim($user_input)) == 0 || strtolower($user_input[0]) == 'y') { /* * Collect information about the host system for our report * Fetch phpinfo() output so that we can see the PHP environment * Make an archive of all the failed tests * Send an email */ if ($just_save_results) { $user_input = 's'; } /* Ask the user to provide an email address, so that QA team can contact the user */ if (TRAVIS_CI) { $user_email = 'travis at php dot net'; } elseif (!strncasecmp($user_input, 'y', 1) || strlen(trim($user_input)) == 0) { echo "\nPlease enter your email address.\n(Your address will be mangled so that it will not go out on any\nmailinglist in plain text): "; flush(); $user_email = trim(fgets($fp, 1024)); $user_email = str_replace("@", " at ", str_replace(".", " dot ", $user_email)); } $failed_tests_data = ''; $sep = "\n" . str_repeat('=', 80) . "\n"; $failed_tests_data .= $failed_test_summary . "\n"; $failed_tests_data .= get_summary(true) . "\n"; if ($sum_results['FAILED']) { foreach ($PHP_FAILED_TESTS['FAILED'] as $test_info) { $failed_tests_data .= $sep . $test_info['name'] . $test_info['info']; $failed_tests_data .= $sep . file_get_contents(realpath($test_info['output'])); $failed_tests_data .= $sep . file_get_contents(realpath($test_info['diff'])); $failed_tests_data .= $sep . "\n\n"; } $status = "failed"; } else { $status = "success"; } $failed_tests_data .= "\n" . $sep . 'BUILD ENVIRONMENT' . $sep; $failed_tests_data .= "OS:\n" . PHP_OS . " - " . php_uname() . "\n\n"; $ldd = $autoconf = $sys_libtool = $libtool = $compiler = 'N/A'; if (!IS_WINDOWS) { /* If PHP_AUTOCONF is set, use it; otherwise, use 'autoconf'. */ if (getenv('PHP_AUTOCONF')) { $autoconf = shell_exec(getenv('PHP_AUTOCONF') . ' --version'); } else { $autoconf = shell_exec('autoconf --version'); } /* Always use the generated libtool - Mac OSX uses 'glibtool' */ $libtool = shell_exec(INIT_DIR . '/libtool --version'); /* Use shtool to find out if there is glibtool present (MacOSX) */ $sys_libtool_path = shell_exec(__DIR__ . '/build/shtool path glibtool libtool'); if ($sys_libtool_path) { $sys_libtool = shell_exec(str_replace("\n", "", $sys_libtool_path) . ' --version'); } /* Try the most common flags for 'version' */ $flags = ['-v', '-V', '--version']; $cc_status = 0; foreach ($flags as $flag) { system(getenv('CC') . " $flag >/dev/null 2>&1", $cc_status); if ($cc_status == 0) { $compiler = shell_exec(getenv('CC') . " $flag 2>&1"); break; } } $ldd = shell_exec("ldd $php 2>/dev/null"); } $failed_tests_data .= "Autoconf:\n$autoconf\n"; $failed_tests_data .= "Bundled Libtool:\n$libtool\n"; $failed_tests_data .= "System Libtool:\n$sys_libtool\n"; $failed_tests_data .= "Compiler:\n$compiler\n"; $failed_tests_data .= "Bison:\n" . shell_exec('bison --version 2>/dev/null') . "\n"; $failed_tests_data .= "Libraries:\n$ldd\n"; $failed_tests_data .= "\n"; if (isset($user_email)) { $failed_tests_data .= "User's E-mail: " . $user_email . "\n\n"; } $failed_tests_data .= $sep . "PHPINFO" . $sep; $failed_tests_data .= shell_exec($php . ' -ddisplay_errors=stderr -dhtml_errors=0 -i 2> /dev/null'); if (($just_save_results || !mail_qa_team($failed_tests_data, $status)) && !TRAVIS_CI) { file_put_contents($output_file, $failed_tests_data); if (!$just_save_results) { echo "\nThe test script was unable to automatically send the report to PHP's QA Team\n"; } echo "Please send " . $output_file . " to " . PHP_QA_EMAIL . " manually, thank you.\n"; } elseif (!getenv('NO_INTERACTION') && !TRAVIS_CI) { fwrite($fp, "\nThank you for helping to make PHP better.\n"); fclose($fp); } } } } function get_binary(string $php, string $sapi, string $sapi_path): ?string { $dir = dirname($php); if (IS_WINDOWS && file_exists("$dir/$sapi.exe")) { return realpath("$dir/$sapi.exe"); } // Sources tree if (file_exists("$dir/../../$sapi_path")) { return realpath("$dir/../../$sapi_path"); } // Installation tree, preserve command prefix/suffix $inst = str_replace('php', $sapi, basename($php)); if (file_exists("$dir/$inst")) { return realpath("$dir/$inst"); } return null; } function find_files(string $dir, bool $is_ext_dir = false, bool $ignore = false): void { global $test_files, $exts_to_test, $ignored_by_ext, $exts_skipped; $o = opendir($dir) or error("cannot open directory: $dir"); while (($name = readdir($o)) !== false) { if (is_dir("{$dir}/{$name}") && !in_array($name, ['.', '..', '.svn'])) { $skip_ext = ($is_ext_dir && !in_array(strtolower($name), $exts_to_test)); if ($skip_ext) { $exts_skipped++; } find_files("{$dir}/{$name}", false, $ignore || $skip_ext); } // Cleanup any left-over tmp files from last run. if (substr($name, -4) == '.tmp') { @unlink("$dir/$name"); continue; } // Otherwise we're only interested in *.phpt files. if (substr($name, -5) == '.phpt') { if ($ignore) { $ignored_by_ext++; } else { $testfile = realpath("{$dir}/{$name}"); $test_files[] = $testfile; } } } closedir($o); } /** * @param array|string $name */ function test_name($name): string { if (is_array($name)) { return $name[0] . ':' . $name[1]; } else { return $name; } } /** * @param array|string $a * @param array|string $b */ function test_sort($a, $b): int { $a = test_name($a); $b = test_name($b); $ta = strpos($a, TEST_PHP_SRCDIR . "/tests") === 0 ? 1 + (strpos($a, TEST_PHP_SRCDIR . "/tests/run-test") === 0 ? 1 : 0) : 0; $tb = strpos($b, TEST_PHP_SRCDIR . "/tests") === 0 ? 1 + (strpos($b, TEST_PHP_SRCDIR . "/tests/run-test") === 0 ? 1 : 0) : 0; if ($ta == $tb) { return strcmp($a, $b); } else { return $tb - $ta; } } // // Send Email to QA Team // function mail_qa_team(string $data, bool $status = false): bool { $url_bits = parse_url(QA_SUBMISSION_PAGE); if ($proxy = getenv('http_proxy')) { $proxy = parse_url($proxy); $path = $url_bits['host'] . $url_bits['path']; $host = $proxy['host']; if (empty($proxy['port'])) { $proxy['port'] = 80; } $port = $proxy['port']; } else { $path = $url_bits['path']; $host = $url_bits['host']; $port = empty($url_bits['port']) ? 80 : $port = $url_bits['port']; } $data = "php_test_data=" . urlencode(base64_encode(str_replace("\00", '[0x0]', $data))); $data_length = strlen($data); $fs = fsockopen($host, $port, $errno, $errstr, 10); if (!$fs) { return false; } $php_version = urlencode(TESTED_PHP_VERSION); echo "\nPosting to " . QA_SUBMISSION_PAGE . "\n"; fwrite($fs, "POST " . $path . "?status=$status&version=$php_version HTTP/1.1\r\n"); fwrite($fs, "Host: " . $host . "\r\n"); fwrite($fs, "User-Agent: QA Browser 0.1\r\n"); fwrite($fs, "Content-Type: application/x-www-form-urlencoded\r\n"); fwrite($fs, "Content-Length: " . $data_length . "\r\n\r\n"); fwrite($fs, $data); fwrite($fs, "\r\n\r\n"); fclose($fs); return true; } // // Write the given text to a temporary file, and return the filename. // function save_text(string $filename, string $text, ?string $filename_copy = null): void { global $DETAILED; if ($filename_copy && $filename_copy != $filename) { if (file_put_contents($filename_copy, $text) === false) { error("Cannot open file '" . $filename_copy . "' (save_text)"); } } if (file_put_contents($filename, $text) === false) { error("Cannot open file '" . $filename . "' (save_text)"); } if (1 < $DETAILED) { echo " FILE $filename {{{ $text }}} "; } } // // Write an error in a format recognizable to Emacs or MSVC. // function error_report(string $testname, string $logname, string $tested): void { $testname = realpath($testname); $logname = realpath($logname); switch (strtoupper(getenv('TEST_PHP_ERROR_STYLE'))) { case 'MSVC': echo $testname . "(1) : $tested\n"; echo $logname . "(1) : $tested\n"; break; case 'EMACS': echo $testname . ":1: $tested\n"; echo $logname . ":1: $tested\n"; break; } } /** * @return false|string */ function system_with_timeout( string $commandline, ?array $env = null, ?string $stdin = null, bool $captureStdIn = true, bool $captureStdOut = true, bool $captureStdErr = true ) { global $valgrind; $data = ''; $bin_env = []; foreach ((array) $env as $key => $value) { $bin_env[$key] = $value; } $descriptorspec = []; if ($captureStdIn) { $descriptorspec[0] = ['pipe', 'r']; } if ($captureStdOut) { $descriptorspec[1] = ['pipe', 'w']; } if ($captureStdErr) { $descriptorspec[2] = ['pipe', 'w']; } $proc = proc_open($commandline, $descriptorspec, $pipes, TEST_PHP_SRCDIR, $bin_env, ['suppress_errors' => true]); if (!$proc) { return false; } if ($captureStdIn) { if (!is_null($stdin)) { fwrite($pipes[0], $stdin); } fclose($pipes[0]); unset($pipes[0]); } $timeout = $valgrind ? 300 : ($env['TEST_TIMEOUT'] ?? 60); /* ASAN can cause a ~2-3x slowdown. */ if (isset($env['SKIP_ASAN'])) { $timeout *= 3; } while (true) { /* hide errors from interrupted syscalls */ $r = $pipes; $w = null; $e = null; $n = @stream_select($r, $w, $e, $timeout); if ($n === false) { break; } elseif ($n === 0) { /* timed out */ $data .= "\n ** ERROR: process timed out **\n"; proc_terminate($proc, 9); return $data; } elseif ($n > 0) { if ($captureStdOut) { $line = fread($pipes[1], 8192); } elseif ($captureStdErr) { $line = fread($pipes[2], 8192); } else { $line = ''; } if (strlen($line) == 0) { /* EOF */ break; } $data .= $line; } } $stat = proc_get_status($proc); if ($stat['signaled']) { $data .= "\nTermsig=" . $stat['stopsig'] . "\n"; } if ($stat["exitcode"] > 128 && $stat["exitcode"] < 160) { $data .= "\nTermsig=" . ($stat["exitcode"] - 128) . "\n"; } else if (defined('PHP_WINDOWS_VERSION_MAJOR') && (($stat["exitcode"] >> 28) & 0b1111) === 0b1100) { // https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-erref/87fba13e-bf06-450e-83b1-9241dc81e781 $data .= "\nTermsig=" . $stat["exitcode"] . "\n"; } proc_close($proc); return $data; } /** * @param string|array|null $redir_tested */ function run_all_tests(array $test_files, array $env, $redir_tested = null): void { global $test_results, $failed_tests_file, $result_tests_file, $php, $test_idx, $file_cache; global $preload; // Parallel testing global $PHP_FAILED_TESTS, $workers, $workerID, $workerSock; if ($file_cache !== null || $preload) { /* Automatically skip opcache tests in --file-cache and --preload mode, * because opcache generally expects these to run under a default configuration. */ $test_files = array_filter($test_files, function($test) use($preload) { if (!is_string($test)) { return true; } if (false !== strpos($test, 'ext/opcache')) { return false; } if ($preload && false !== strpos($test, 'ext/zend_test/tests/observer')) { return false; } return true; }); } /* Ignore -jN if there is only one file to analyze. */ if ($workers !== null && count($test_files) > 1 && !$workerID) { run_all_tests_parallel($test_files, $env, $redir_tested); return; } foreach ($test_files as $name) { if (is_array($name)) { $index = "# $name[1]: $name[0]"; if ($redir_tested) { $name = $name[0]; } } elseif ($redir_tested) { $index = "# $redir_tested: $name"; } else { $index = $name; } $test_idx++; if ($workerID) { $PHP_FAILED_TESTS = ['BORKED' => [], 'FAILED' => [], 'WARNED' => [], 'LEAKED' => [], 'XFAILED' => [], 'XLEAKED' => [], 'SLOW' => []]; ob_start(); } $result = run_test($php, $name, $env); if ($workerID) { $resultText = ob_get_clean(); } if (!is_array($name) && $result != 'REDIR') { if ($workerID) { send_message($workerSock, [ "type" => "test_result", "name" => $name, "index" => $index, "result" => $result, "text" => $resultText, "PHP_FAILED_TESTS" => $PHP_FAILED_TESTS ]); continue; } $test_results[$index] = $result; if ($failed_tests_file && ($result == 'XFAILED' || $result == 'XLEAKED' || $result == 'FAILED' || $result == 'WARNED' || $result == 'LEAKED')) { fwrite($failed_tests_file, "$index\n"); } if ($result_tests_file) { fwrite($result_tests_file, "$result\t$index\n"); } } } } /** The heart of parallel testing. * @param string|array|null $redir_tested */ function run_all_tests_parallel(array $test_files, array $env, $redir_tested): void { global $workers, $test_idx, $test_cnt, $test_results, $failed_tests_file, $result_tests_file, $PHP_FAILED_TESTS, $shuffle, $SHOW_ONLY_GROUPS, $valgrind; global $junit; // The PHP binary running run-tests.php, and run-tests.php itself // This PHP executable is *not* necessarily the same as the tested version $thisPHP = PHP_BINARY; $thisScript = __FILE__; $workerProcs = []; $workerSocks = []; // Each test may specify a list of conflict keys. While a test that conflicts with // key K is running, no other test that conflicts with K may run. Conflict keys are // specified either in the --CONFLICTS-- section, or CONFLICTS file inside a directory. $dirConflictsWith = []; $fileConflictsWith = []; $sequentialTests = []; foreach ($test_files as $i => $file) { $contents = file_get_contents($file); if (preg_match('/^--CONFLICTS--(.+?)^--/ms', $contents, $matches)) { $conflicts = parse_conflicts($matches[1]); } else { // Cache per-directory conflicts in a separate map, so we compute these only once. $dir = dirname($file); if (!isset($dirConflictsWith[$dir])) { $dirConflicts = []; if (file_exists($dir . '/CONFLICTS')) { $contents = file_get_contents($dir . '/CONFLICTS'); $dirConflicts = parse_conflicts($contents); } $dirConflictsWith[$dir] = $dirConflicts; } $conflicts = $dirConflictsWith[$dir]; } // For tests conflicting with "all", no other tests may run in parallel. We'll run these // tests separately at the end, when only one worker is left. if (in_array('all', $conflicts, true)) { $sequentialTests[] = $file; unset($test_files[$i]); } $fileConflictsWith[$file] = $conflicts; } // Some tests assume that they are executed in a certain order. We will be popping from // $test_files, so reverse its order here. This makes sure that order is preserved at least // for tests with a common conflict key. $test_files = array_reverse($test_files); // To discover parallelization issues it is useful to randomize the test order. if ($shuffle) { shuffle($test_files); } // Don't start more workers than test files. $workers = max(1, min($workers, count($test_files))); echo "Spawning $workers workers... "; // We use sockets rather than STDIN/STDOUT for comms because on Windows, // those can't be non-blocking for some reason. $listenSock = stream_socket_server("tcp://127.0.0.1:0") or error("Couldn't create socket on localhost."); $sockName = stream_socket_get_name($listenSock, false); // PHP is terrible and returns IPv6 addresses not enclosed by [] $portPos = strrpos($sockName, ":"); $sockHost = substr($sockName, 0, $portPos); if (false !== strpos($sockHost, ":")) { $sockHost = "[$sockHost]"; } $sockPort = substr($sockName, $portPos + 1); $sockUri = "tcp://$sockHost:$sockPort"; $totalFileCount = count($test_files); $startTime = microtime(true); for ($i = 1; $i <= $workers; $i++) { $proc = proc_open( [$thisPHP, $thisScript], [], // Inherit our stdin, stdout and stderr $pipes, null, $GLOBALS['environment'] + [ "TEST_PHP_WORKER" => $i, "TEST_PHP_URI" => $sockUri, ], [ "suppress_errors" => true, 'create_new_console' => true, ] ); if ($proc === false) { kill_children($workerProcs); error("Failed to spawn worker $i"); } $workerProcs[$i] = $proc; } for ($i = 1; $i <= $workers; $i++) { $workerSock = stream_socket_accept($listenSock, 5); if ($workerSock === false) { kill_children($workerProcs); error("Failed to accept connection from worker."); } $greeting = base64_encode(serialize([ "type" => "hello", "GLOBALS" => $GLOBALS, "constants" => [ "INIT_DIR" => INIT_DIR, "TEST_PHP_SRCDIR" => TEST_PHP_SRCDIR, "PHP_QA_EMAIL" => PHP_QA_EMAIL, "QA_SUBMISSION_PAGE" => QA_SUBMISSION_PAGE, "QA_REPORTS_PAGE" => QA_REPORTS_PAGE, "TRAVIS_CI" => TRAVIS_CI ] ])) . "\n"; stream_set_timeout($workerSock, 5); if (fwrite($workerSock, $greeting) === false) { kill_children($workerProcs); error("Failed to send greeting to worker."); } $rawReply = fgets($workerSock); if ($rawReply === false) { kill_children($workerProcs); error("Failed to read greeting reply from worker."); } $reply = unserialize(base64_decode($rawReply)); if (!$reply || $reply["type"] !== "hello_reply") { kill_children($workerProcs); error("Greeting reply from worker unexpected or could not be decoded: '$rawReply'"); } stream_set_timeout($workerSock, 0); stream_set_blocking($workerSock, false); $workerID = $reply["workerID"]; $workerSocks[$workerID] = $workerSock; } printf("Done in %.2fs\n", microtime(true) - $startTime); echo "=====================================================================\n"; echo "\n"; $rawMessageBuffers = []; $testsInProgress = 0; // Map from conflict key to worker ID. $activeConflicts = []; // Tests waiting due to conflicts. Map from conflict key to array. $waitingTests = []; escape: while ($test_files || $sequentialTests || $testsInProgress > 0) { $toRead = array_values($workerSocks); $toWrite = null; $toExcept = null; if (stream_select($toRead, $toWrite, $toExcept, 10)) { foreach ($toRead as $workerSock) { $i = array_search($workerSock, $workerSocks); if ($i === false) { kill_children($workerProcs); error("Could not find worker stdout in array of worker stdouts, THIS SHOULD NOT HAPPEN."); } if (feof($workerSock)) { kill_children($workerProcs); error("Worker $i died unexpectedly"); } while (false !== ($rawMessage = fgets($workerSock))) { // work around fgets truncating things if (($rawMessageBuffers[$i] ?? '') !== '') { $rawMessage = $rawMessageBuffers[$i] . $rawMessage; $rawMessageBuffers[$i] = ''; } if (substr($rawMessage, -1) !== "\n") { $rawMessageBuffers[$i] = $rawMessage; continue; } $message = unserialize(base64_decode($rawMessage)); if (!$message) { kill_children($workerProcs); $stuff = fread($workerSock, 65536); error("Could not decode message from worker $i: '$rawMessage$stuff'"); } switch ($message["type"]) { case "tests_finished": $testsInProgress--; foreach ($activeConflicts as $key => $workerId) { if ($workerId === $i) { unset($activeConflicts[$key]); if (isset($waitingTests[$key])) { while ($test = array_pop($waitingTests[$key])) { $test_files[] = $test; } unset($waitingTests[$key]); } } } $junit->mergeResults($message["junit"]); // no break case "ready": // Schedule sequential tests only once we are down to one worker. if (count($workerProcs) === 1 && $sequentialTests) { $test_files = array_merge($test_files, $sequentialTests); $sequentialTests = []; } // Batch multiple tests to reduce communication overhead. // - When valgrind is used, communication overhead is relatively small, // so just use a batch size of 1. // - If this is running a small enough number of tests, // reduce the batch size to give batches to more workers. $files = []; $maxBatchSize = $valgrind ? 1 : ($shuffle ? 4 : 32); $averageFilesPerWorker = max(1, (int) ceil($totalFileCount / count($workerProcs))); $batchSize = min($maxBatchSize, $averageFilesPerWorker); while (count($files) <= $batchSize && $file = array_pop($test_files)) { foreach ($fileConflictsWith[$file] as $conflictKey) { if (isset($activeConflicts[$conflictKey])) { $waitingTests[$conflictKey][] = $file; continue 2; } } $files[] = $file; } if ($files) { foreach ($files as $file) { foreach ($fileConflictsWith[$file] as $conflictKey) { $activeConflicts[$conflictKey] = $i; } } $testsInProgress++; send_message($workerSocks[$i], [ "type" => "run_tests", "test_files" => $files, "env" => $env, "redir_tested" => $redir_tested ]); } else { proc_terminate($workerProcs[$i]); unset($workerProcs[$i]); unset($workerSocks[$i]); goto escape; } break; case "test_result": list($name, $index, $result, $resultText) = [$message["name"], $message["index"], $message["result"], $message["text"]]; foreach ($message["PHP_FAILED_TESTS"] as $category => $tests) { $PHP_FAILED_TESTS[$category] = array_merge($PHP_FAILED_TESTS[$category], $tests); } $test_idx++; if (!$SHOW_ONLY_GROUPS) { clear_show_test(); } echo $resultText; if (!$SHOW_ONLY_GROUPS) { show_test($test_idx, count($workerProcs) . "/$workers concurrent test workers running"); } if (!is_array($name) && $result != 'REDIR') { $test_results[$index] = $result; if ($failed_tests_file && ($result == 'XFAILED' || $result == 'XLEAKED' || $result == 'FAILED' || $result == 'WARNED' || $result == 'LEAKED')) { fwrite($failed_tests_file, "$index\n"); } if ($result_tests_file) { fwrite($result_tests_file, "$result\t$index\n"); } } break; case "error": kill_children($workerProcs); error("Worker $i reported error: $message[msg]"); break; case "php_error": kill_children($workerProcs); $error_consts = [ 'E_ERROR', 'E_WARNING', 'E_PARSE', 'E_NOTICE', 'E_CORE_ERROR', 'E_CORE_WARNING', 'E_COMPILE_ERROR', 'E_COMPILE_WARNING', 'E_USER_ERROR', 'E_USER_WARNING', 'E_USER_NOTICE', 'E_STRICT', // TODO Cleanup when removed from Zend Engine. 'E_RECOVERABLE_ERROR', 'E_DEPRECATED', 'E_USER_DEPRECATED' ]; $error_consts = array_combine(array_map('constant', $error_consts), $error_consts); error("Worker $i reported unexpected {$error_consts[$message['errno']]}: $message[errstr] in $message[errfile] on line $message[errline]"); // no break default: kill_children($workerProcs); error("Unrecognised message type '$message[type]' from worker $i"); } } } } } if (!$SHOW_ONLY_GROUPS) { clear_show_test(); } kill_children($workerProcs); if ($testsInProgress < 0) { error("$testsInProgress test batches “in progress”, which is less than zero. THIS SHOULD NOT HAPPEN."); } } function send_message($stream, array $message): void { $blocking = stream_get_meta_data($stream)["blocked"]; stream_set_blocking($stream, true); fwrite($stream, base64_encode(serialize($message)) . "\n"); stream_set_blocking($stream, $blocking); } function kill_children(array $children): void { foreach ($children as $child) { if ($child) { proc_terminate($child); } } } function run_worker(): void { global $workerID, $workerSock; global $junit; $sockUri = getenv("TEST_PHP_URI"); $workerSock = stream_socket_client($sockUri, $_, $_, 5) or error("Couldn't connect to $sockUri"); $greeting = fgets($workerSock); $greeting = unserialize(base64_decode($greeting)) or die("Could not decode greeting\n"); if ($greeting["type"] !== "hello") { error("Unexpected greeting of type $greeting[type]"); } set_error_handler(function (int $errno, string $errstr, string $errfile, int $errline) use ($workerSock): bool { if (error_reporting() & $errno) { send_message($workerSock, compact('errno', 'errstr', 'errfile', 'errline') + [ 'type' => 'php_error' ]); } return true; }); foreach ($greeting["GLOBALS"] as $var => $value) { if ($var !== "workerID" && $var !== "workerSock" && $var !== "GLOBALS") { $GLOBALS[$var] = $value; } } foreach ($greeting["constants"] as $const => $value) { define($const, $value); } send_message($workerSock, [ "type" => "hello_reply", "workerID" => $workerID ]); send_message($workerSock, [ "type" => "ready" ]); while (($command = fgets($workerSock))) { $command = unserialize(base64_decode($command)); switch ($command["type"]) { case "run_tests": run_all_tests($command["test_files"], $command["env"], $command["redir_tested"]); send_message($workerSock, [ "type" => "tests_finished", "junit" => $junit->isEnabled() ? $junit : null, ]); $junit->clear(); break; default: send_message($workerSock, [ "type" => "error", "msg" => "Unrecognised message type: $command[type]" ]); break 2; } } } // // Show file or result block // function show_file_block(string $file, string $block, ?string $section = null): void { global $cfg; global $colorize; if ($cfg['show'][$file]) { if (is_null($section)) { $section = strtoupper($file); } if ($section === 'DIFF' && $colorize) { // '-' is Light Red for removal, '+' is Light Green for addition $block = preg_replace('/^[0-9]+\-\s.*$/m', "\e[1;31m\\0\e[0m", $block); $block = preg_replace('/^[0-9]+\+\s.*$/m', "\e[1;32m\\0\e[0m", $block); } echo "\n========" . $section . "========\n"; echo rtrim($block); echo "\n========DONE========\n"; } } function skip_test(string $tested, string $tested_file, string $shortname, string $reason) { global $junit; show_result('SKIP', $tested, $tested_file, "reason: $reason"); $junit->initSuite($junit->getSuiteName($shortname)); $junit->markTestAs('SKIP', $shortname, $tested, 0, $reason); return 'SKIPPED'; } // // Run an individual test case. // /** * @param string|array $file */ function run_test(string $php, $file, array $env): string { global $log_format, $ini_overwrites, $PHP_FAILED_TESTS; global $pass_options, $DETAILED, $IN_REDIRECT, $test_cnt, $test_idx; global $valgrind, $temp_source, $temp_target, $cfg, $environment; global $no_clean; global $SHOW_ONLY_GROUPS; global $no_file_cache; global $slow_min_ms; global $preload, $file_cache; global $num_repeats; // Parallel testing global $workerID; // Temporary /** @var JUnit */ global $junit; static $skipCache; if (!$skipCache) { $enableSkipCache = !($env['DISABLE_SKIP_CACHE'] ?? '0'); $skipCache = new SkipCache($enableSkipCache, $cfg['keep']['skip']); } $retried = false; retry: $temp_filenames = null; $org_file = $file; $orig_php = $php; if (isset($env['TEST_PHP_CGI_EXECUTABLE'])) { $php_cgi = $env['TEST_PHP_CGI_EXECUTABLE']; } if (isset($env['TEST_PHPDBG_EXECUTABLE'])) { $phpdbg = $env['TEST_PHPDBG_EXECUTABLE']; } if (is_array($file)) { $file = $file[0]; } if ($DETAILED) { echo " ================= TEST $file "; } $shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file); $tested_file = $shortname; try { $test = new TestFile($file, (bool)$IN_REDIRECT); } catch (BorkageException $ex) { show_result("BORK", $ex->getMessage(), $tested_file); $PHP_FAILED_TESTS['BORKED'][] = [ 'name' => $file, 'test_name' => '', 'output' => '', 'diff' => '', 'info' => "{$ex->getMessage()} [$file]", ]; $junit->markTestAs('BORK', $shortname, $tested_file, 0, $ex->getMessage()); return 'BORKED'; } $tested = $test->getName(); if ($test->hasSection('FILE_EXTERNAL')) { if ($num_repeats > 1) { return skip_test($tested, $tested_file, $shortname, 'Test with FILE_EXTERNAL might not be repeatable'); } } if ($test->hasSection('CAPTURE_STDIO')) { $capture = $test->getSection('CAPTURE_STDIO'); $captureStdIn = stripos($capture, 'STDIN') !== false; $captureStdOut = stripos($capture, 'STDOUT') !== false; $captureStdErr = stripos($capture, 'STDERR') !== false; } else { $captureStdIn = true; $captureStdOut = true; $captureStdErr = true; } if ($captureStdOut && $captureStdErr) { $cmdRedirect = ' 2>&1'; } else { $cmdRedirect = ''; } /* For GET/POST/PUT tests, check if cgi sapi is available and if it is, use it. */ if ($test->isCGI()) { if (!$php_cgi) { return skip_test($tested, $tested_file, $shortname, 'CGI not available'); } $php = $php_cgi . ' -C '; $uses_cgi = true; if ($num_repeats > 1) { return skip_test($tested, $tested_file, $shortname, 'CGI does not support --repeat'); } } /* For phpdbg tests, check if phpdbg sapi is available and if it is, use it. */ $extra_options = ''; if ($test->hasSection('PHPDBG')) { if (isset($phpdbg)) { $php = $phpdbg . ' -qIb'; // Additional phpdbg command line options for sections that need to // be run straight away. For example, EXTENSIONS, SKIPIF, CLEAN. $extra_options = '-rr'; } else { return skip_test($tested, $tested_file, $shortname, 'phpdbg not available'); } if ($num_repeats > 1) { return skip_test($tested, $tested_file, $shortname, 'phpdbg does not support --repeat'); } } foreach (['CLEAN', 'STDIN', 'CAPTURE_STDIO'] as $section) { if ($test->hasSection($section)) { if ($num_repeats > 1) { return skip_test($tested, $tested_file, $shortname, "Test with $section might not be repeatable"); } } } if (!$SHOW_ONLY_GROUPS && !$workerID) { show_test($test_idx, $shortname); } if (is_array($IN_REDIRECT)) { $temp_dir = $test_dir = $IN_REDIRECT['dir']; } else { $temp_dir = $test_dir = realpath(dirname($file)); } if ($temp_source && $temp_target) { $temp_dir = str_replace($temp_source, $temp_target, $temp_dir); } $main_file_name = basename($file, 'phpt'); $diff_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'diff'; $log_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'log'; $exp_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'exp'; $output_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'out'; $memcheck_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'mem'; $sh_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'sh'; $temp_file = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'php'; $test_file = $test_dir . DIRECTORY_SEPARATOR . $main_file_name . 'php'; $temp_skipif = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'skip.php'; $test_skipif = $test_dir . DIRECTORY_SEPARATOR . $main_file_name . 'skip.php'; $temp_clean = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'clean.php'; $test_clean = $test_dir . DIRECTORY_SEPARATOR . $main_file_name . 'clean.php'; $preload_filename = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'preload.php'; $tmp_post = $temp_dir . DIRECTORY_SEPARATOR . $main_file_name . 'post'; $tmp_relative_file = str_replace(__DIR__ . DIRECTORY_SEPARATOR, '', $test_file) . 't'; if ($temp_source && $temp_target) { $temp_skipif .= 's'; $temp_file .= 's'; $temp_clean .= 's'; $copy_file = $temp_dir . DIRECTORY_SEPARATOR . basename(is_array($file) ? $file[1] : $file) . '.phps'; if (!is_dir(dirname($copy_file))) { mkdir(dirname($copy_file), 0777, true) or error("Cannot create output directory - " . dirname($copy_file)); } if ($test->hasSection('FILE')) { save_text($copy_file, $test->getSection('FILE')); } $temp_filenames = [ 'file' => $copy_file, 'diff' => $diff_filename, 'log' => $log_filename, 'exp' => $exp_filename, 'out' => $output_filename, 'mem' => $memcheck_filename, 'sh' => $sh_filename, 'php' => $temp_file, 'skip' => $temp_skipif, 'clean' => $temp_clean ]; } if (is_array($IN_REDIRECT)) { $tested = $IN_REDIRECT['prefix'] . ' ' . $tested; $tested_file = $tmp_relative_file; $shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $tested_file); } // unlink old test results @unlink($diff_filename); @unlink($log_filename); @unlink($exp_filename); @unlink($output_filename); @unlink($memcheck_filename); @unlink($sh_filename); @unlink($temp_file); @unlink($test_file); @unlink($temp_skipif); @unlink($test_skipif); @unlink($tmp_post); @unlink($temp_clean); @unlink($test_clean); @unlink($preload_filename); // Reset environment from any previous test. $env['REDIRECT_STATUS'] = ''; $env['QUERY_STRING'] = ''; $env['PATH_TRANSLATED'] = ''; $env['SCRIPT_FILENAME'] = ''; $env['REQUEST_METHOD'] = ''; $env['CONTENT_TYPE'] = ''; $env['CONTENT_LENGTH'] = ''; $env['TZ'] = ''; if ($test->sectionNotEmpty('ENV')) { $env_str = str_replace('{PWD}', dirname($file), $test->getSection('ENV')); foreach (explode("\n", $env_str) as $e) { $e = explode('=', trim($e), 2); if (!empty($e[0]) && isset($e[1])) { $env[$e[0]] = $e[1]; } } } // Default ini settings $ini_settings = $workerID ? ['opcache.cache_id' => "worker$workerID"] : []; // Additional required extensions $extensions = []; if ($test->hasSection('EXTENSIONS')) { $extensions = preg_split("/[\n\r]+/", trim($test->getSection('EXTENSIONS'))); } if (is_array($IN_REDIRECT) && $IN_REDIRECT['EXTENSIONS'] != []) { $extensions = array_merge($extensions, $IN_REDIRECT['EXTENSIONS']); } /* Load required extensions */ if ($extensions != []) { $ext_params = []; settings2array($ini_overwrites, $ext_params); $ext_params = settings2params($ext_params); [$ext_dir, $loaded] = $skipCache->getExtensions("$orig_php $pass_options $extra_options $ext_params $no_file_cache"); $ext_prefix = IS_WINDOWS ? "php_" : ""; $missing = []; foreach ($extensions as $req_ext) { if (!in_array(strtolower($req_ext), $loaded)) { if ($req_ext == 'opcache' || $req_ext == 'xdebug') { $ext_file = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX; $ini_settings['zend_extension'][] = $ext_file; } else { $ext_file = $ext_dir . DIRECTORY_SEPARATOR . $ext_prefix . $req_ext . '.' . PHP_SHLIB_SUFFIX; $ini_settings['extension'][] = $ext_file; } if (!is_readable($ext_file)) { $missing[] = $req_ext; } } } if ($missing) { $message = 'Required extension' . (count($missing) > 1 ? 's' : '') . ' missing: ' . implode(', ', $missing); return skip_test($tested, $tested_file, $shortname, $message); } } // additional ini overwrites //$ini_overwrites[] = 'setting=value'; settings2array($ini_overwrites, $ini_settings); $orig_ini_settings = settings2params($ini_settings); if ($file_cache !== null) { $ini_settings['opcache.file_cache'] = '/tmp'; // Make sure warnings still show up on the second run. $ini_settings['opcache.record_warnings'] = '1'; // File cache is currently incompatible with JIT. $ini_settings['opcache.jit'] = '0'; if ($file_cache === 'use') { // Disable timestamp validation in order to fetch from file cache, // even though all the files are re-created. $ini_settings['opcache.validate_timestamps'] = '0'; } } else if ($num_repeats > 1) { // Make sure warnings still show up on the second run. $ini_settings['opcache.record_warnings'] = '1'; } // Any special ini settings // these may overwrite the test defaults... if ($test->hasSection('INI')) { $ini = str_replace('{PWD}', dirname($file), $test->getSection('INI')); $ini = str_replace('{TMP}', sys_get_temp_dir(), $ini); $replacement = IS_WINDOWS ? '"' . PHP_BINARY . ' -r \"while ($in = fgets(STDIN)) echo $in;\" > $1"' : 'tee $1 >/dev/null'; $ini = preg_replace('/{MAIL:(\S+)}/', $replacement, $ini); settings2array(preg_split("/[\n\r]+/", $ini), $ini_settings); if (isset($ini_settings['opcache.opt_debug_level'])) { if ($num_repeats > 1) { return skip_test($tested, $tested_file, $shortname, 'opt_debug_level tests are not repeatable'); } } } $ini_settings = settings2params($ini_settings); $env['TEST_PHP_EXTRA_ARGS'] = $pass_options . ' ' . $ini_settings; // Check if test should be skipped. $info = ''; $warn = false; if ($test->sectionNotEmpty('SKIPIF')) { show_file_block('skip', $test->getSection('SKIPIF')); $extra = !IS_WINDOWS ? "unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;" : ""; if ($valgrind) { $env['USE_ZEND_ALLOC'] = '0'; $env['ZEND_DONT_UNLOAD_MODULES'] = 1; } $junit->startTimer($shortname); $startTime = microtime(true); $commandLine = "$extra $php $pass_options $extra_options -q $orig_ini_settings $no_file_cache -d display_errors=1 -d display_startup_errors=0"; $output = $skipCache->checkSkip($commandLine, $test->getSection('SKIPIF'), $test_skipif, $temp_skipif, $env); $time = microtime(true) - $startTime; $junit->stopTimer($shortname); if ($time > $slow_min_ms / 1000) { $PHP_FAILED_TESTS['SLOW'][] = [ 'name' => $file, 'test_name' => 'SKIPIF of ' . $tested . " [$tested_file]", 'output' => '', 'diff' => '', 'info' => $time, ]; } if (!$cfg['keep']['skip']) { @unlink($test_skipif); } if (!strncasecmp('skip', $output, 4)) { if (preg_match('/^skip\s*(.+)/i', $output, $m)) { show_result('SKIP', $tested, $tested_file, "reason: $m[1]", $temp_filenames); } else { show_result('SKIP', $tested, $tested_file, '', $temp_filenames); } $message = !empty($m[1]) ? $m[1] : ''; $junit->markTestAs('SKIP', $shortname, $tested, null, $message); return 'SKIPPED'; } if (!strncasecmp('info', $output, 4) && preg_match('/^info\s*(.+)/i', $output, $m)) { $info = " (info: $m[1])"; } elseif (!strncasecmp('warn', $output, 4) && preg_match('/^warn\s+(.+)/i', $output, $m)) { $warn = true; /* only if there is a reason */ $info = " (warn: $m[1])"; } elseif (!strncasecmp('xfail', $output, 5)) { // Pretend we have an XFAIL section $test->setSection('XFAIL', ltrim(substr($output, 5))); } elseif (!strncasecmp('flaky', $output, 5)) { // Pretend we have a FLAKY section $test->setSection('FLAKY', ltrim(substr($output, 5))); } elseif ($output !== '') { show_result("BORK", $output, $tested_file, 'reason: invalid output from SKIPIF', $temp_filenames); $PHP_FAILED_TESTS['BORKED'][] = [ 'name' => $file, 'test_name' => '', 'output' => '', 'diff' => '', 'info' => "$output [$file]", ]; $junit->markTestAs('BORK', $shortname, $tested, null, $output); return 'BORKED'; } } if (!extension_loaded("zlib") && $test->hasAnySections("GZIP_POST", "DEFLATE_POST")) { $message = "ext/zlib required"; show_result('SKIP', $tested, $tested_file, "reason: $message", $temp_filenames); $junit->markTestAs('SKIP', $shortname, $tested, null, $message); return 'SKIPPED'; } if ($test->hasSection('REDIRECTTEST')) { $test_files = []; $IN_REDIRECT = eval($test->getSection('REDIRECTTEST')); $IN_REDIRECT['via'] = "via [$shortname]\n\t"; $IN_REDIRECT['dir'] = realpath(dirname($file)); $IN_REDIRECT['prefix'] = $tested; $IN_REDIRECT['EXTENSIONS'] = $extensions; if (!empty($IN_REDIRECT['TESTS'])) { if (is_array($org_file)) { $test_files[] = $org_file[1]; } else { $GLOBALS['test_files'] = $test_files; find_files($IN_REDIRECT['TESTS']); foreach ($GLOBALS['test_files'] as $f) { $test_files[] = [$f, $file]; } } $test_cnt += count($test_files) - 1; $test_idx--; show_redirect_start($IN_REDIRECT['TESTS'], $tested, $tested_file); // set up environment $redirenv = array_merge($environment, $IN_REDIRECT['ENV']); $redirenv['REDIR_TEST_DIR'] = realpath($IN_REDIRECT['TESTS']) . DIRECTORY_SEPARATOR; usort($test_files, "test_sort"); run_all_tests($test_files, $redirenv, $tested); show_redirect_ends($IN_REDIRECT['TESTS'], $tested, $tested_file); // a redirected test never fails $IN_REDIRECT = false; $junit->markTestAs('PASS', $shortname, $tested); return 'REDIR'; } else { $bork_info = "Redirect info must contain exactly one TEST string to be used as redirect directory."; show_result("BORK", $bork_info, '', '', $temp_filenames); $PHP_FAILED_TESTS['BORKED'][] = [ 'name' => $file, 'test_name' => '', 'output' => '', 'diff' => '', 'info' => "$bork_info [$file]", ]; } } if (is_array($org_file) || $test->hasSection('REDIRECTTEST')) { if (is_array($org_file)) { $file = $org_file[0]; } $bork_info = "Redirected test did not contain redirection info"; show_result("BORK", $bork_info, '', '', $temp_filenames); $PHP_FAILED_TESTS['BORKED'][] = [ 'name' => $file, 'test_name' => '', 'output' => '', 'diff' => '', 'info' => "$bork_info [$file]", ]; $junit->markTestAs('BORK', $shortname, $tested, null, $bork_info); return 'BORKED'; } // We've satisfied the preconditions - run the test! if ($test->hasSection('FILE')) { show_file_block('php', $test->getSection('FILE'), 'TEST'); save_text($test_file, $test->getSection('FILE'), $temp_file); } else { $test_file = $temp_file = ""; } if ($test->hasSection('GET')) { $query_string = trim($test->getSection('GET')); } else { $query_string = ''; } $env['REDIRECT_STATUS'] = '1'; if (empty($env['QUERY_STRING'])) { $env['QUERY_STRING'] = $query_string; } if (empty($env['PATH_TRANSLATED'])) { $env['PATH_TRANSLATED'] = $test_file; } if (empty($env['SCRIPT_FILENAME'])) { $env['SCRIPT_FILENAME'] = $test_file; } if ($test->hasSection('COOKIE')) { $env['HTTP_COOKIE'] = trim($test->getSection('COOKIE')); } else { $env['HTTP_COOKIE'] = ''; } $args = $test->hasSection('ARGS') ? ' -- ' . $test->getSection('ARGS') : ''; if ($preload && !empty($test_file)) { save_text($preload_filename, "sectionNotEmpty('POST_RAW')) { $post = trim($test->getSection('POST_RAW')); $raw_lines = explode("\n", $post); $request = ''; $started = false; foreach ($raw_lines as $line) { if (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) { $env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[1])); continue; } if ($started) { $request .= "\n"; } $started = true; $request .= $line; } $env['CONTENT_LENGTH'] = strlen($request); $env['REQUEST_METHOD'] = 'POST'; if (empty($request)) { $junit->markTestAs('BORK', $shortname, $tested, null, 'empty $request'); return 'BORKED'; } save_text($tmp_post, $request); $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\""; } elseif ($test->sectionNotEmpty('PUT')) { $post = trim($test->getSection('PUT')); $raw_lines = explode("\n", $post); $request = ''; $started = false; foreach ($raw_lines as $line) { if (empty($env['CONTENT_TYPE']) && preg_match('/^Content-Type:(.*)/i', $line, $res)) { $env['CONTENT_TYPE'] = trim(str_replace("\r", '', $res[1])); continue; } if ($started) { $request .= "\n"; } $started = true; $request .= $line; } $env['CONTENT_LENGTH'] = strlen($request); $env['REQUEST_METHOD'] = 'PUT'; if (empty($request)) { $junit->markTestAs('BORK', $shortname, $tested, null, 'empty $request'); return 'BORKED'; } save_text($tmp_post, $request); $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\""; } elseif ($test->sectionNotEmpty('POST')) { $post = trim($test->getSection('POST')); $content_length = strlen($post); save_text($tmp_post, $post); $env['REQUEST_METHOD'] = 'POST'; if (empty($env['CONTENT_TYPE'])) { $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'; } if (empty($env['CONTENT_LENGTH'])) { $env['CONTENT_LENGTH'] = $content_length; } $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\""; } elseif ($test->sectionNotEmpty('GZIP_POST')) { $post = trim($test->getSection('GZIP_POST')); $post = gzencode($post, 9, FORCE_GZIP); $env['HTTP_CONTENT_ENCODING'] = 'gzip'; save_text($tmp_post, $post); $content_length = strlen($post); $env['REQUEST_METHOD'] = 'POST'; $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'; $env['CONTENT_LENGTH'] = $content_length; $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\""; } elseif ($test->sectionNotEmpty('DEFLATE_POST')) { $post = trim($test->getSection('DEFLATE_POST')); $post = gzcompress($post, 9); $env['HTTP_CONTENT_ENCODING'] = 'deflate'; save_text($tmp_post, $post); $content_length = strlen($post); $env['REQUEST_METHOD'] = 'POST'; $env['CONTENT_TYPE'] = 'application/x-www-form-urlencoded'; $env['CONTENT_LENGTH'] = $content_length; $cmd = "$php $pass_options $ini_settings -f \"$test_file\"$cmdRedirect < \"$tmp_post\""; } else { $env['REQUEST_METHOD'] = 'GET'; $env['CONTENT_TYPE'] = ''; $env['CONTENT_LENGTH'] = ''; $repeat_option = $num_repeats > 1 ? "--repeat $num_repeats" : ""; $cmd = "$php $pass_options $repeat_option $ini_settings -f \"$test_file\" $args$cmdRedirect"; } $orig_cmd = $cmd; if ($valgrind) { $env['USE_ZEND_ALLOC'] = '0'; $env['ZEND_DONT_UNLOAD_MODULES'] = 1; $cmd = $valgrind->wrapCommand($cmd, $memcheck_filename, strpos($test_file, "pcre") !== false); } if ($DETAILED) { echo " CONTENT_LENGTH = " . $env['CONTENT_LENGTH'] . " CONTENT_TYPE = " . $env['CONTENT_TYPE'] . " PATH_TRANSLATED = " . $env['PATH_TRANSLATED'] . " QUERY_STRING = " . $env['QUERY_STRING'] . " REDIRECT_STATUS = " . $env['REDIRECT_STATUS'] . " REQUEST_METHOD = " . $env['REQUEST_METHOD'] . " SCRIPT_FILENAME = " . $env['SCRIPT_FILENAME'] . " HTTP_COOKIE = " . $env['HTTP_COOKIE'] . " COMMAND $cmd "; } $junit->startTimer($shortname); $hrtime = hrtime(); $startTime = $hrtime[0] * 1000000000 + $hrtime[1]; $stdin = $test->hasSection('STDIN') ? $test->getSection('STDIN') : null; $out = system_with_timeout($cmd, $env, $stdin, $captureStdIn, $captureStdOut, $captureStdErr); $junit->stopTimer($shortname); $hrtime = hrtime(); $time = $hrtime[0] * 1000000000 + $hrtime[1] - $startTime; if ($time >= $slow_min_ms * 1000000) { $PHP_FAILED_TESTS['SLOW'][] = [ 'name' => $file, 'test_name' => $tested . " [$tested_file]", 'output' => '', 'diff' => '', 'info' => $time / 1000000000, ]; } if ($test->sectionNotEmpty('CLEAN') && (!$no_clean || $cfg['keep']['clean'])) { show_file_block('clean', $test->getSection('CLEAN')); save_text($test_clean, trim($test->getSection('CLEAN')), $temp_clean); if (!$no_clean) { $extra = !IS_WINDOWS ? "unset REQUEST_METHOD; unset QUERY_STRING; unset PATH_TRANSLATED; unset SCRIPT_FILENAME; unset REQUEST_METHOD;" : ""; system_with_timeout("$extra $php $pass_options $extra_options -q $orig_ini_settings $no_file_cache \"$test_clean\"", $env); } if (!$cfg['keep']['clean']) { @unlink($test_clean); } } $leaked = false; $passed = false; if ($valgrind) { // leak check $leaked = filesize($memcheck_filename) > 0; if (!$leaked) { @unlink($memcheck_filename); } } if ($num_repeats > 1) { // In repeat mode, retain the output before the first execution, // and of the last execution. Do this early, because the trimming below // makes the newline handling complicated. $separator1 = "Executing for the first time...\n"; $separator1_pos = strpos($out, $separator1); if ($separator1_pos !== false) { $separator2 = "Finished execution, repeating...\n"; $separator2_pos = strrpos($out, $separator2); if ($separator2_pos !== false) { $out = substr($out, 0, $separator1_pos) . substr($out, $separator2_pos + strlen($separator2)); } else { $out = substr($out, 0, $separator1_pos) . substr($out, $separator1_pos + strlen($separator1)); } } } // Does the output match what is expected? $output = preg_replace("/\r\n/", "\n", trim($out)); /* when using CGI, strip the headers from the output */ $headers = []; if (!empty($uses_cgi) && preg_match("/^(.*?)\r?\n\r?\n(.*)/s", $out, $match)) { $output = trim($match[2]); $rh = preg_split("/[\n\r]+/", $match[1]); foreach ($rh as $line) { if (strpos($line, ':') !== false) { $line = explode(':', $line, 2); $headers[trim($line[0])] = trim($line[1]); } } } $failed_headers = false; if ($test->hasSection('EXPECTHEADERS')) { $want = []; $wanted_headers = []; $lines = preg_split("/[\n\r]+/", $test->getSection('EXPECTHEADERS')); foreach ($lines as $line) { if (strpos($line, ':') !== false) { $line = explode(':', $line, 2); $want[trim($line[0])] = trim($line[1]); $wanted_headers[] = trim($line[0]) . ': ' . trim($line[1]); } } $output_headers = []; foreach ($want as $k => $v) { if (isset($headers[$k])) { $output_headers[] = $k . ': ' . $headers[$k]; } if (!isset($headers[$k]) || $headers[$k] != $v) { $failed_headers = true; } } ksort($wanted_headers); $wanted_headers = implode("\n", $wanted_headers); ksort($output_headers); $output_headers = implode("\n", $output_headers); } show_file_block('out', $output); if ($preload) { $output = trim(preg_replace("/\n?Warning: Can't preload [^\n]*\n?/", "", $output)); } if ($test->hasAnySections('EXPECTF', 'EXPECTREGEX')) { if ($test->hasSection('EXPECTF')) { $wanted = trim($test->getSection('EXPECTF')); } else { $wanted = trim($test->getSection('EXPECTREGEX')); } show_file_block('exp', $wanted); $wanted_re = preg_replace('/\r\n/', "\n", $wanted); if ($test->hasSection('EXPECTF')) { // do preg_quote, but miss out any %r delimited sections $temp = ""; $r = "%r"; $startOffset = 0; $length = strlen($wanted_re); while ($startOffset < $length) { $start = strpos($wanted_re, $r, $startOffset); if ($start !== false) { // we have found a start tag $end = strpos($wanted_re, $r, $start + 2); if ($end === false) { // unbalanced tag, ignore it. $end = $start = $length; } } else { // no more %r sections $start = $end = $length; } // quote a non re portion of the string $temp .= preg_quote(substr($wanted_re, $startOffset, $start - $startOffset), '/'); // add the re unquoted. if ($end > $start) { $temp .= '(' . substr($wanted_re, $start + 2, $end - $start - 2) . ')'; } $startOffset = $end + 2; } $wanted_re = $temp; // Stick to basics $wanted_re = str_replace('%e', '\\' . DIRECTORY_SEPARATOR, $wanted_re); $wanted_re = str_replace('%s', '[^\r\n]+', $wanted_re); $wanted_re = str_replace('%S', '[^\r\n]*', $wanted_re); $wanted_re = str_replace('%a', '.+', $wanted_re); $wanted_re = str_replace('%A', '.*', $wanted_re); $wanted_re = str_replace('%w', '\s*', $wanted_re); $wanted_re = str_replace('%i', '[+-]?\d+', $wanted_re); $wanted_re = str_replace('%d', '\d+', $wanted_re); $wanted_re = str_replace('%x', '[0-9a-fA-F]+', $wanted_re); $wanted_re = str_replace('%f', '[+-]?\.?\d+\.?\d*(?:[Ee][+-]?\d+)?', $wanted_re); $wanted_re = str_replace('%c', '.', $wanted_re); $wanted_re = str_replace('%0', '\x00', $wanted_re); // %f allows two points "-.0.0" but that is the best *simple* expression } if (preg_match("/^$wanted_re\$/s", $output)) { $passed = true; if (!$cfg['keep']['php'] && !$leaked) { @unlink($test_file); @unlink($preload_filename); } @unlink($tmp_post); if (!$leaked && !$failed_headers) { if ($test->hasSection('XFAIL')) { $warn = true; $info = " (warn: XFAIL section but test passes)"; } elseif ($test->hasSection('XLEAK')) { $warn = true; $info = " (warn: XLEAK section but test passes)"; } elseif ($retried) { $warn = true; $info = " (warn: Test passed on retry attempt)"; } else { show_result("PASS", $tested, $tested_file, '', $temp_filenames); $junit->markTestAs('PASS', $shortname, $tested); return 'PASSED'; } } } } else { $wanted = trim($test->getSection('EXPECT')); $wanted = preg_replace('/\r\n/', "\n", $wanted); show_file_block('exp', $wanted); // compare and leave on success if (!strcmp($output, $wanted)) { $passed = true; if (!$cfg['keep']['php'] && !$leaked) { @unlink($test_file); @unlink($preload_filename); } @unlink($tmp_post); if (!$leaked && !$failed_headers) { if ($test->hasSection('XFAIL')) { $warn = true; $info = " (warn: XFAIL section but test passes)"; } elseif ($test->hasSection('XLEAK')) { $warn = true; $info = " (warn: XLEAK section but test passes)"; } elseif ($retried) { $warn = true; $info = " (warn: Test passed on retry attempt)"; } else { show_result("PASS", $tested, $tested_file, '', $temp_filenames); $junit->markTestAs('PASS', $shortname, $tested); return 'PASSED'; } } } $wanted_re = null; } if (!$passed && !$retried && error_may_be_retried($test, $output)) { $retried = true; goto retry; } // Test failed so we need to report details. if ($failed_headers) { $passed = false; $wanted = $wanted_headers . "\n--HEADERS--\n" . $wanted; $output = $output_headers . "\n--HEADERS--\n" . $output; if (isset($wanted_re)) { $wanted_re = preg_quote($wanted_headers . "\n--HEADERS--\n", '/') . $wanted_re; } } if ($leaked) { $restype[] = $test->hasSection('XLEAK') ? 'XLEAK' : 'LEAK'; } if ($warn) { $restype[] = 'WARN'; } if (!$passed) { if ($test->hasSection('XFAIL')) { $restype[] = 'XFAIL'; $info = ' XFAIL REASON: ' . rtrim($test->getSection('XFAIL')); } elseif ($test->hasSection('XLEAK')) { $restype[] = 'XLEAK'; $info = ' XLEAK REASON: ' . rtrim($test->getSection('XLEAK')); } else { $restype[] = 'FAIL'; } } if (!$passed) { // write .exp if (strpos($log_format, 'E') !== false && file_put_contents($exp_filename, $wanted) === false) { error("Cannot create expected test output - $exp_filename"); } // write .out if (strpos($log_format, 'O') !== false && file_put_contents($output_filename, $output) === false) { error("Cannot create test output - $output_filename"); } // write .diff $diff = generate_diff($wanted, $wanted_re, $output); if (is_array($IN_REDIRECT)) { $orig_shortname = str_replace(TEST_PHP_SRCDIR . '/', '', $file); $diff = "# original source file: $orig_shortname\n" . $diff; } show_file_block('diff', $diff); if (strpos($log_format, 'D') !== false && file_put_contents($diff_filename, $diff) === false) { error("Cannot create test diff - $diff_filename"); } // write .log if (strpos($log_format, 'L') !== false && file_put_contents($log_filename, " ---- EXPECTED OUTPUT $wanted ---- ACTUAL OUTPUT $output ---- FAILED ") === false) { error("Cannot create test log - $log_filename"); error_report($file, $log_filename, $tested); } } if (!$passed || $leaked) { // write .sh if (strpos($log_format, 'S') !== false) { $env_lines = []; foreach ($env as $env_var => $env_val) { $env_lines[] = "export $env_var=" . escapeshellarg($env_val ?? ""); } $exported_environment = $env_lines ? "\n" . implode("\n", $env_lines) . "\n" : ""; $sh_script = << $file, 'test_name' => (is_array($IN_REDIRECT) ? $IN_REDIRECT['via'] : '') . $tested . " [$tested_file]", 'output' => $output_filename, 'diff' => $diff_filename, 'info' => $info, ]; } $diff = empty($diff) ? '' : preg_replace('/\e/', '', $diff); $junit->markTestAs($restype, $shortname, $tested, null, $info, $diff); return $restype[0] . 'ED'; } function is_flaky(TestFile $test): bool { if ($test->hasSection('FLAKY')) { return true; } if ($test->hasSection('SKIPIF')) { if (strpos($test->getSection('SKIPIF'), 'SKIP_PERF_SENSITIVE') !== false) { return true; } } if (!$test->hasSection('FILE')) { return false; } $file = $test->getSection('FILE'); $flaky_functions = [ 'disk_free_space', 'hrtime', 'microtime', 'sleep', 'usleep', ]; $regex = '(\b(' . implode('|', $flaky_functions) . ')\()i'; return preg_match($regex, $file) === 1; } function is_flaky_output(string $output): bool { $messages = [ '404: page not found', 'address already in use', 'connection refused', 'deadlock', 'mailbox already exists', 'timed out', ]; $regex = '(\b(' . implode('|', $messages) . ')\b)i'; return preg_match($regex, $output) === 1; } function error_may_be_retried(TestFile $test, string $output): bool { return is_flaky_output($output) || is_flaky($test); } /** * @return bool|int */ function comp_line(string $l1, string $l2, bool $is_reg) { if ($is_reg) { return preg_match('/^' . $l1 . '$/s', $l2); } else { return !strcmp($l1, $l2); } } function count_array_diff( array $ar1, array $ar2, bool $is_reg, array $w, int $idx1, int $idx2, int $cnt1, int $cnt2, int $steps ): int { $equal = 0; while ($idx1 < $cnt1 && $idx2 < $cnt2 && comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) { $idx1++; $idx2++; $equal++; $steps--; } if (--$steps > 0) { $eq1 = 0; $st = $steps / 2; for ($ofs1 = $idx1 + 1; $ofs1 < $cnt1 && $st-- > 0; $ofs1++) { $eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $ofs1, $idx2, $cnt1, $cnt2, $st); if ($eq > $eq1) { $eq1 = $eq; } } $eq2 = 0; $st = $steps; for ($ofs2 = $idx2 + 1; $ofs2 < $cnt2 && $st-- > 0; $ofs2++) { $eq = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $ofs2, $cnt1, $cnt2, $st); if ($eq > $eq2) { $eq2 = $eq; } } if ($eq1 > $eq2) { $equal += $eq1; } elseif ($eq2 > 0) { $equal += $eq2; } } return $equal; } function generate_array_diff(array $ar1, array $ar2, bool $is_reg, array $w): array { global $context_line_count; $idx1 = 0; $cnt1 = @count($ar1); $idx2 = 0; $cnt2 = @count($ar2); $diff = []; $old1 = []; $old2 = []; $number_len = max(3, strlen((string)max($cnt1 + 1, $cnt2 + 1))); $line_number_spec = '%0' . $number_len . 'd'; /** Mapping from $idx2 to $idx1, including indexes of idx2 that are identical to idx1 as well as entries that don't have matches */ $mapping = []; while ($idx1 < $cnt1 && $idx2 < $cnt2) { $mapping[$idx2] = $idx1; if (comp_line($ar1[$idx1], $ar2[$idx2], $is_reg)) { $idx1++; $idx2++; continue; } else { $c1 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1 + 1, $idx2, $cnt1, $cnt2, 10); $c2 = @count_array_diff($ar1, $ar2, $is_reg, $w, $idx1, $idx2 + 1, $cnt1, $cnt2, 10); if ($c1 > $c2) { $old1[$idx1] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++]; } elseif ($c2 > 0) { $old2[$idx2] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++]; } else { $old1[$idx1] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++]; $old2[$idx2] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++]; } $last_printed_context_line = $idx1; } } $mapping[$idx2] = $idx1; reset($old1); $k1 = key($old1); $l1 = -2; reset($old2); $k2 = key($old2); $l2 = -2; $old_k1 = -1; $add_context_lines = function (int $new_k1) use (&$old_k1, &$diff, $w, $context_line_count, $number_len) { if ($old_k1 >= $new_k1 || !$context_line_count) { return; } $end = $new_k1 - 1; $range_end = min($end, $old_k1 + $context_line_count); if ($old_k1 >= 0) { while ($old_k1 < $range_end) { $diff[] = str_repeat(' ', $number_len + 2) . $w[$old_k1++]; } } if ($end - $context_line_count > $old_k1) { $old_k1 = $end - $context_line_count; if ($old_k1 > 0) { // Add a '--' to mark sections where the common areas were truncated $diff[] = '--'; } } $old_k1 = max($old_k1, 0); while ($old_k1 < $end) { $diff[] = str_repeat(' ', $number_len + 2) . $w[$old_k1++]; } $old_k1 = $new_k1; }; while ($k1 !== null || $k2 !== null) { if ($k1 == $l1 + 1 || $k2 === null) { $add_context_lines($k1); $l1 = $k1; $diff[] = current($old1); $old_k1 = $k1; $k1 = next($old1) ? key($old1) : null; } elseif ($k2 == $l2 + 1 || $k1 === null) { $add_context_lines($mapping[$k2]); $l2 = $k2; $diff[] = current($old2); $k2 = next($old2) ? key($old2) : null; } elseif ($k1 < $mapping[$k2]) { $add_context_lines($k1); $l1 = $k1; $diff[] = current($old1); $k1 = next($old1) ? key($old1) : null; } else { $add_context_lines($mapping[$k2]); $l2 = $k2; $diff[] = current($old2); $k2 = next($old2) ? key($old2) : null; } } while ($idx1 < $cnt1) { $add_context_lines($idx1 + 1); $diff[] = sprintf("{$line_number_spec}- ", $idx1 + 1) . $w[$idx1++]; } while ($idx2 < $cnt2) { if (isset($mapping[$idx2])) { $add_context_lines($mapping[$idx2] + 1); } $diff[] = sprintf("{$line_number_spec}+ ", $idx2 + 1) . $ar2[$idx2++]; } $add_context_lines(min($old_k1 + $context_line_count + 1, $cnt1 + 1)); if ($context_line_count && $old_k1 < $cnt1 + 1) { // Add a '--' to mark sections where the common areas were truncated $diff[] = '--'; } return $diff; } function generate_diff(string $wanted, ?string $wanted_re, string $output): string { $w = explode("\n", $wanted); $o = explode("\n", $output); $r = is_null($wanted_re) ? $w : explode("\n", $wanted_re); $diff = generate_array_diff($r, $o, !is_null($wanted_re), $w); return implode(PHP_EOL, $diff); } function error(string $message): void { echo "ERROR: {$message}\n"; exit(1); } function settings2array(array $settings, &$ini_settings): void { foreach ($settings as $setting) { if (strpos($setting, '=') !== false) { $setting = explode("=", $setting, 2); $name = trim($setting[0]); $value = trim($setting[1]); if ($name == 'extension' || $name == 'zend_extension') { if (!isset($ini_settings[$name])) { $ini_settings[$name] = []; } $ini_settings[$name][] = $value; } else { $ini_settings[$name] = $value; } } } } function settings2params(array $ini_settings): string { $settings = ''; foreach ($ini_settings as $name => $value) { if (is_array($value)) { foreach ($value as $val) { $val = addslashes($val); $settings .= " -d \"$name=$val\""; } } else { if (IS_WINDOWS && !empty($value) && $value[0] == '"') { $len = strlen($value); if ($value[$len - 1] == '"') { $value[0] = "'"; $value[$len - 1] = "'"; } } else { $value = addslashes($value); } $settings .= " -d \"$name=$value\""; } } return $settings; } function compute_summary(): void { global $n_total, $test_results, $ignored_by_ext, $sum_results, $percent_results; $n_total = count($test_results); $n_total += $ignored_by_ext; $sum_results = [ 'PASSED' => 0, 'WARNED' => 0, 'SKIPPED' => 0, 'FAILED' => 0, 'BORKED' => 0, 'LEAKED' => 0, 'XFAILED' => 0, 'XLEAKED' => 0 ]; foreach ($test_results as $v) { $sum_results[$v]++; } $sum_results['SKIPPED'] += $ignored_by_ext; $percent_results = []; foreach ($sum_results as $v => $n) { $percent_results[$v] = (100.0 * $n) / $n_total; } } function get_summary(bool $show_ext_summary): string { global $exts_skipped, $exts_tested, $n_total, $sum_results, $percent_results, $end_time, $start_time, $failed_test_summary, $PHP_FAILED_TESTS, $valgrind; $x_total = $n_total - $sum_results['SKIPPED'] - $sum_results['BORKED']; if ($x_total) { $x_warned = (100.0 * $sum_results['WARNED']) / $x_total; $x_failed = (100.0 * $sum_results['FAILED']) / $x_total; $x_xfailed = (100.0 * $sum_results['XFAILED']) / $x_total; $x_xleaked = (100.0 * $sum_results['XLEAKED']) / $x_total; $x_leaked = (100.0 * $sum_results['LEAKED']) / $x_total; $x_passed = (100.0 * $sum_results['PASSED']) / $x_total; } else { $x_warned = $x_failed = $x_passed = $x_leaked = $x_xfailed = $x_xleaked = 0; } $summary = ''; if ($show_ext_summary) { $summary .= ' ===================================================================== TEST RESULT SUMMARY --------------------------------------------------------------------- Exts skipped : ' . sprintf('%4d', $exts_skipped) . ' Exts tested : ' . sprintf('%4d', $exts_tested) . ' --------------------------------------------------------------------- '; } $summary .= ' Number of tests : ' . sprintf('%4d', $n_total) . ' ' . sprintf('%8d', $x_total); if ($sum_results['BORKED']) { $summary .= ' Tests borked : ' . sprintf('%4d (%5.1f%%)', $sum_results['BORKED'], $percent_results['BORKED']) . ' --------'; } $summary .= ' Tests skipped : ' . sprintf('%4d (%5.1f%%)', $sum_results['SKIPPED'], $percent_results['SKIPPED']) . ' -------- Tests warned : ' . sprintf('%4d (%5.1f%%)', $sum_results['WARNED'], $percent_results['WARNED']) . ' ' . sprintf('(%5.1f%%)', $x_warned) . ' Tests failed : ' . sprintf('%4d (%5.1f%%)', $sum_results['FAILED'], $percent_results['FAILED']) . ' ' . sprintf('(%5.1f%%)', $x_failed); if ($sum_results['XFAILED']) { $summary .= ' Expected fail : ' . sprintf('%4d (%5.1f%%)', $sum_results['XFAILED'], $percent_results['XFAILED']) . ' ' . sprintf('(%5.1f%%)', $x_xfailed); } if ($valgrind) { $summary .= ' Tests leaked : ' . sprintf('%4d (%5.1f%%)', $sum_results['LEAKED'], $percent_results['LEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_leaked); if ($sum_results['XLEAKED']) { $summary .= ' Expected leak : ' . sprintf('%4d (%5.1f%%)', $sum_results['XLEAKED'], $percent_results['XLEAKED']) . ' ' . sprintf('(%5.1f%%)', $x_xleaked); } } $summary .= ' Tests passed : ' . sprintf('%4d (%5.1f%%)', $sum_results['PASSED'], $percent_results['PASSED']) . ' ' . sprintf('(%5.1f%%)', $x_passed) . ' --------------------------------------------------------------------- Time taken : ' . sprintf('%4d seconds', $end_time - $start_time) . ' ===================================================================== '; $failed_test_summary = ''; if (count($PHP_FAILED_TESTS['SLOW'])) { usort($PHP_FAILED_TESTS['SLOW'], function (array $a, array $b): int { return $a['info'] < $b['info'] ? 1 : -1; }); $failed_test_summary .= ' ===================================================================== SLOW TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['SLOW'] as $failed_test_data) { $failed_test_summary .= sprintf('(%.3f s) ', $failed_test_data['info']) . $failed_test_data['test_name'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if (count($PHP_FAILED_TESTS['XFAILED'])) { $failed_test_summary .= ' ===================================================================== EXPECTED FAILED TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['XFAILED'] as $failed_test_data) { $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if (count($PHP_FAILED_TESTS['BORKED'])) { $failed_test_summary .= ' ===================================================================== BORKED TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['BORKED'] as $failed_test_data) { $failed_test_summary .= $failed_test_data['info'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if (count($PHP_FAILED_TESTS['FAILED'])) { $failed_test_summary .= ' ===================================================================== FAILED TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['FAILED'] as $failed_test_data) { $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if (count($PHP_FAILED_TESTS['WARNED'])) { $failed_test_summary .= ' ===================================================================== WARNED TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['WARNED'] as $failed_test_data) { $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if (count($PHP_FAILED_TESTS['LEAKED'])) { $failed_test_summary .= ' ===================================================================== LEAKED TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['LEAKED'] as $failed_test_data) { $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if (count($PHP_FAILED_TESTS['XLEAKED'])) { $failed_test_summary .= ' ===================================================================== EXPECTED LEAK TEST SUMMARY --------------------------------------------------------------------- '; foreach ($PHP_FAILED_TESTS['XLEAKED'] as $failed_test_data) { $failed_test_summary .= $failed_test_data['test_name'] . $failed_test_data['info'] . "\n"; } $failed_test_summary .= "=====================================================================\n"; } if ($failed_test_summary && !getenv('NO_PHPTEST_SUMMARY')) { $summary .= $failed_test_summary; } return $summary; } function show_start($start_time): void { echo "TIME START " . date('Y-m-d H:i:s', $start_time) . "\n=====================================================================\n"; } function show_end($end_time): void { echo "=====================================================================\nTIME END " . date('Y-m-d H:i:s', $end_time) . "\n"; } function show_summary(): void { echo get_summary(true); } function show_redirect_start(string $tests, string $tested, string $tested_file): void { global $SHOW_ONLY_GROUPS; if (!$SHOW_ONLY_GROUPS || in_array('REDIRECT', $SHOW_ONLY_GROUPS)) { echo "REDIRECT $tests ($tested [$tested_file]) begin\n"; } else { clear_show_test(); } } function show_redirect_ends(string $tests, string $tested, string $tested_file): void { global $SHOW_ONLY_GROUPS; if (!$SHOW_ONLY_GROUPS || in_array('REDIRECT', $SHOW_ONLY_GROUPS)) { echo "REDIRECT $tests ($tested [$tested_file]) done\n"; } else { clear_show_test(); } } function show_test(int $test_idx, string $shortname): void { global $test_cnt; global $line_length; $str = "TEST $test_idx/$test_cnt [$shortname]\r"; $line_length = strlen($str); echo $str; flush(); } function clear_show_test(): void { global $line_length; // Parallel testing global $workerID; if (!$workerID && isset($line_length)) { // Write over the last line to avoid random trailing chars on next echo echo str_repeat(" ", $line_length), "\r"; } } function parse_conflicts(string $text): array { // Strip comments $text = preg_replace('/#.*/', '', $text); return array_map('trim', explode("\n", trim($text))); } function show_result( string $result, string $tested, string $tested_file, string $extra = '', ?array $temp_filenames = null ): void { global $SHOW_ONLY_GROUPS, $colorize; if (!$SHOW_ONLY_GROUPS || in_array($result, $SHOW_ONLY_GROUPS)) { if ($colorize) { /* Use ANSI escape codes for coloring test result */ switch ( $result ) { case 'PASS': // Light Green $color = "\e[1;32m{$result}\e[0m"; break; case 'FAIL': case 'BORK': case 'LEAK': case 'LEAK&FAIL': // Light Red $color = "\e[1;31m{$result}\e[0m"; break; default: // Yellow $color = "\e[1;33m{$result}\e[0m"; break; } echo "$color $tested [$tested_file] $extra\n"; } else { echo "$result $tested [$tested_file] $extra\n"; } } elseif (!$SHOW_ONLY_GROUPS) { clear_show_test(); } } class BorkageException extends Exception { } class JUnit { private bool $enabled = true; private $fp = null; private array $suites = []; private array $rootSuite = self::EMPTY_SUITE + ['name' => 'php']; private const EMPTY_SUITE = [ 'test_total' => 0, 'test_pass' => 0, 'test_fail' => 0, 'test_error' => 0, 'test_skip' => 0, 'test_warn' => 0, 'files' => [], 'execution_time' => 0, ]; /** * @throws Exception */ public function __construct(array $env, int $workerID) { // Check whether a junit log is wanted. $fileName = $env['TEST_PHP_JUNIT'] ?? null; if (empty($fileName)) { $this->enabled = false; return; } if (!$workerID && !$this->fp = fopen($fileName, 'w')) { throw new Exception("Failed to open $fileName for writing."); } } public function isEnabled(): bool { return $this->enabled; } public function clear(): void { $this->rootSuite = self::EMPTY_SUITE + ['name' => 'php']; $this->suites = []; } public function saveXML(): void { if (!$this->enabled) { return; } $xml = '<' . '?' . 'xml version="1.0" encoding="UTF-8"' . '?' . '>' . PHP_EOL; $xml .= sprintf( '' . PHP_EOL, $this->rootSuite['name'], $this->rootSuite['test_total'], $this->rootSuite['test_fail'], $this->rootSuite['test_error'], $this->rootSuite['test_skip'], $this->rootSuite['execution_time'] ); $xml .= $this->getSuitesXML(); $xml .= ''; fwrite($this->fp, $xml); } private function getSuitesXML(string $suite_name = '') { // FIXME: $suite_name gets overwritten $result = ''; foreach ($this->suites as $suite_name => $suite) { $result .= sprintf( '' . PHP_EOL, $suite['name'], $suite['test_total'], $suite['test_fail'], $suite['test_error'], $suite['test_skip'], $suite['execution_time'] ); if (!empty($suite_name)) { foreach ($suite['files'] as $file) { $result .= $this->rootSuite['files'][$file]['xml']; } } $result .= '' . PHP_EOL; } return $result; } public function markTestAs( $type, string $file_name, string $test_name, ?int $time = null, string $message = '', string $details = '' ): void { if (!$this->enabled) { return; } $suite = $this->getSuiteName($file_name); $this->record($suite, 'test_total'); $time = $time ?? $this->getTimer($file_name); $this->record($suite, 'execution_time', $time); $escaped_details = htmlspecialchars($details, ENT_QUOTES, 'UTF-8'); $escaped_details = preg_replace_callback('/[\0-\x08\x0B\x0C\x0E-\x1F]/', function ($c) { return sprintf('[[0x%02x]]', ord($c[0])); }, $escaped_details); $escaped_message = htmlspecialchars($message, ENT_QUOTES, 'UTF-8'); $escaped_test_name = htmlspecialchars($file_name . ' (' . $test_name . ')', ENT_QUOTES); $this->rootSuite['files'][$file_name]['xml'] = "\n"; if (is_array($type)) { $output_type = $type[0] . 'ED'; $temp = array_intersect(['XFAIL', 'XLEAK', 'FAIL', 'WARN'], $type); $type = reset($temp); } else { $output_type = $type . 'ED'; } if ('PASS' == $type || 'XFAIL' == $type || 'XLEAK' == $type) { $this->record($suite, 'test_pass'); } elseif ('BORK' == $type) { $this->record($suite, 'test_error'); $this->rootSuite['files'][$file_name]['xml'] .= "\n"; } elseif ('SKIP' == $type) { $this->record($suite, 'test_skip'); $this->rootSuite['files'][$file_name]['xml'] .= "$escaped_message\n"; } elseif ('WARN' == $type) { $this->record($suite, 'test_warn'); $this->rootSuite['files'][$file_name]['xml'] .= "$escaped_message\n"; } elseif ('FAIL' == $type) { $this->record($suite, 'test_fail'); $this->rootSuite['files'][$file_name]['xml'] .= "$escaped_details\n"; } else { $this->record($suite, 'test_error'); $this->rootSuite['files'][$file_name]['xml'] .= "$escaped_details\n"; } $this->rootSuite['files'][$file_name]['xml'] .= "\n"; } private function record(string $suite, string $param, $value = 1): void { $this->rootSuite[$param] += $value; $this->suites[$suite][$param] += $value; } private function getTimer(string $file_name) { if (!$this->enabled) { return 0; } if (isset($this->rootSuite['files'][$file_name]['total'])) { return number_format($this->rootSuite['files'][$file_name]['total'], 4); } return 0; } public function startTimer(string $file_name): void { if (!$this->enabled) { return; } if (!isset($this->rootSuite['files'][$file_name]['start'])) { $this->rootSuite['files'][$file_name]['start'] = microtime(true); $suite = $this->getSuiteName($file_name); $this->initSuite($suite); $this->suites[$suite]['files'][$file_name] = $file_name; } } public function getSuiteName(string $file_name): string { return $this->pathToClassName(dirname($file_name)); } private function pathToClassName(string $file_name): string { if (!$this->enabled) { return ''; } $ret = $this->rootSuite['name']; $_tmp = []; // lookup whether we're in the PHP source checkout $max = 5; if (is_file($file_name)) { $dir = dirname(realpath($file_name)); } else { $dir = realpath($file_name); } do { array_unshift($_tmp, basename($dir)); $chk = $dir . DIRECTORY_SEPARATOR . "main" . DIRECTORY_SEPARATOR . "php_version.h"; $dir = dirname($dir); } while (!file_exists($chk) && --$max > 0); if (file_exists($chk)) { if ($max) { array_shift($_tmp); } foreach ($_tmp as $p) { $ret .= "." . preg_replace(",[^a-z0-9]+,i", ".", $p); } return $ret; } return $this->rootSuite['name'] . '.' . str_replace([DIRECTORY_SEPARATOR, '-'], '.', $file_name); } public function initSuite(string $suite_name): void { if (!$this->enabled) { return; } if (!empty($this->suites[$suite_name])) { return; } $this->suites[$suite_name] = self::EMPTY_SUITE + ['name' => $suite_name]; } /** * @throws Exception */ public function stopTimer(string $file_name): void { if (!$this->enabled) { return; } if (!isset($this->rootSuite['files'][$file_name]['start'])) { throw new Exception("Timer for $file_name was not started!"); } if (!isset($this->rootSuite['files'][$file_name]['total'])) { $this->rootSuite['files'][$file_name]['total'] = 0; } $start = $this->rootSuite['files'][$file_name]['start']; $this->rootSuite['files'][$file_name]['total'] += microtime(true) - $start; unset($this->rootSuite['files'][$file_name]['start']); } public function mergeResults(?JUnit $other): void { if (!$this->enabled || !$other) { return; } $this->mergeSuites($this->rootSuite, $other->rootSuite); foreach ($other->suites as $name => $suite) { if (!isset($this->suites[$name])) { $this->suites[$name] = $suite; continue; } $this->mergeSuites($this->suites[$name], $suite); } } private function mergeSuites(array &$dest, array $source): void { $dest['test_total'] += $source['test_total']; $dest['test_pass'] += $source['test_pass']; $dest['test_fail'] += $source['test_fail']; $dest['test_error'] += $source['test_error']; $dest['test_skip'] += $source['test_skip']; $dest['test_warn'] += $source['test_warn']; $dest['execution_time'] += $source['execution_time']; $dest['files'] += $source['files']; } } class SkipCache { private bool $enable; private bool $keepFile; private array $skips = []; private array $extensions = []; private int $hits = 0; private int $misses = 0; private int $extHits = 0; private int $extMisses = 0; public function __construct(bool $enable, bool $keepFile) { $this->enable = $enable; $this->keepFile = $keepFile; } public function checkSkip(string $php, string $code, string $checkFile, string $tempFile, array $env): string { // Extension tests frequently use something like $dir"; if (isset($this->skips[$key][$code])) { $this->hits++; if ($this->keepFile) { save_text($checkFile, $code, $tempFile); } return $this->skips[$key][$code]; } save_text($checkFile, $code, $tempFile); $result = trim(system_with_timeout("$php \"$checkFile\"", $env)); if (strpos($result, 'nocache') === 0) { $result = ''; } else if ($this->enable) { $this->skips[$key][$code] = $result; } $this->misses++; if (!$this->keepFile) { @unlink($checkFile); } return $result; } public function getExtensions(string $php): array { if (isset($this->extensions[$php])) { $this->extHits++; return $this->extensions[$php]; } $extDir = `$php -d display_errors=0 -r "echo ini_get('extension_dir');"`; $extensions = explode(",", `$php -d display_errors=0 -r "echo implode(',', get_loaded_extensions());"`); $extensions = array_map('strtolower', $extensions); if (in_array('zend opcache', $extensions)) { $extensions[] = 'opcache'; } $result = [$extDir, $extensions]; $this->extensions[$php] = $result; $this->extMisses++; return $result; } // public function __destruct() // { // echo "Skips: {$this->hits} hits, {$this->misses} misses.\n"; // echo "Extensions: {$this->extHits} hits, {$this->extMisses} misses.\n"; // echo "Cache distribution:\n"; // // foreach ($this->skips as $php => $cache) { // echo "$php: " . count($cache) . "\n"; // } // } } class RuntestsValgrind { protected $version = ''; protected $header = ''; protected $version_3_8_0 = false; protected $tool = null; public function getVersion(): string { return $this->version; } public function getHeader(): string { return $this->header; } public function __construct(array $environment, string $tool = 'memcheck') { $this->tool = $tool; $header = system_with_timeout("valgrind --tool={$this->tool} --version", $environment); if (!$header) { error("Valgrind returned no version info for {$this->tool}, cannot proceed.\n". "Please check if Valgrind is installed and the tool is named correctly."); } $count = 0; $version = preg_replace("/valgrind-(\d+)\.(\d+)\.(\d+)([.\w_-]+)?(\s+)/", '$1.$2.$3', $header, 1, $count); if ($count != 1) { error("Valgrind returned invalid version info (\"{$header}\") for {$this->tool}, cannot proceed."); } $this->version = $version; $this->header = sprintf( "%s (%s)", trim($header), $this->tool); $this->version_3_8_0 = version_compare($version, '3.8.0', '>='); } public function wrapCommand(string $cmd, string $memcheck_filename, bool $check_all): string { $vcmd = "valgrind -q --tool={$this->tool} --trace-children=yes"; if ($check_all) { $vcmd .= ' --smc-check=all'; } /* --vex-iropt-register-updates=allregs-at-mem-access is necessary for phpdbg watchpoint tests */ if ($this->version_3_8_0) { return "$vcmd --vex-iropt-register-updates=allregs-at-mem-access --log-file=$memcheck_filename $cmd"; } return "$vcmd --vex-iropt-precise-memory-exns=yes --log-file=$memcheck_filename $cmd"; } } class TestFile { private string $fileName; private array $sections = ['TEST' => '']; private const ALLOWED_SECTIONS = [ 'EXPECT', 'EXPECTF', 'EXPECTREGEX', 'EXPECTREGEX_EXTERNAL', 'EXPECT_EXTERNAL', 'EXPECTF_EXTERNAL', 'EXPECTHEADERS', 'POST', 'POST_RAW', 'GZIP_POST', 'DEFLATE_POST', 'PUT', 'GET', 'COOKIE', 'ARGS', 'FILE', 'FILEEOF', 'FILE_EXTERNAL', 'REDIRECTTEST', 'CAPTURE_STDIO', 'STDIN', 'CGI', 'PHPDBG', 'INI', 'ENV', 'EXTENSIONS', 'SKIPIF', 'XFAIL', 'XLEAK', 'CLEAN', 'CREDITS', 'DESCRIPTION', 'CONFLICTS', 'WHITESPACE_SENSITIVE', 'FLAKY', ]; /** * @throws BorkageException */ public function __construct(string $fileName, bool $inRedirect) { $this->fileName = $fileName; $this->readFile(); $this->validateAndProcess($inRedirect); } public function hasSection(string $name): bool { return isset($this->sections[$name]); } public function hasAllSections(string ...$names): bool { foreach ($names as $section) { if (!isset($this->sections[$section])) { return false; } } return true; } public function hasAnySections(string ...$names): bool { foreach ($names as $section) { if (isset($this->sections[$section])) { return true; } } return false; } public function sectionNotEmpty(string $name): bool { return !empty($this->sections[$name]); } /** * @throws Exception */ public function getSection(string $name): string { if (!isset($this->sections[$name])) { throw new Exception("Section $name not found"); } return $this->sections[$name]; } public function getName(): string { return trim($this->getSection('TEST')); } public function isCGI(): bool { return $this->hasSection('CGI') || $this->sectionNotEmpty('GET') || $this->sectionNotEmpty('POST') || $this->sectionNotEmpty('GZIP_POST') || $this->sectionNotEmpty('DEFLATE_POST') || $this->sectionNotEmpty('POST_RAW') || $this->sectionNotEmpty('PUT') || $this->sectionNotEmpty('COOKIE') || $this->sectionNotEmpty('EXPECTHEADERS'); } /** * TODO Refactor to make it not needed */ public function setSection(string $name, string $value): void { $this->sections[$name] = $value; } /** * Load the sections of the test file * @throws BorkageException */ private function readFile(): void { $fp = fopen($this->fileName, "rb") or error("Cannot open test file: {$this->fileName}"); if (!feof($fp)) { $line = fgets($fp); if ($line === false) { throw new BorkageException("cannot read test"); } } else { throw new BorkageException("empty test [{$this->fileName}]"); } if (strncmp('--TEST--', $line, 8)) { throw new BorkageException("tests must start with --TEST-- [{$this->fileName}]"); } $section = 'TEST'; $secfile = false; $secdone = false; while (!feof($fp)) { $line = fgets($fp); if ($line === false) { break; } // Match the beginning of a section. if (preg_match('/^--([_A-Z]+)--/', $line, $r)) { $section = (string) $r[1]; if (isset($this->sections[$section]) && $this->sections[$section]) { throw new BorkageException("duplicated $section section"); } // check for unknown sections if (!in_array($section, self::ALLOWED_SECTIONS)) { throw new BorkageException('Unknown section "' . $section . '"'); } $this->sections[$section] = ''; $secfile = $section == 'FILE' || $section == 'FILEEOF' || $section == 'FILE_EXTERNAL'; $secdone = false; continue; } // Add to the section text. if (!$secdone) { $this->sections[$section] .= $line; } // End of actual test? if ($secfile && preg_match('/^===DONE===\s*$/', $line)) { $secdone = true; } } fclose($fp); } /** * @throws BorkageException */ private function validateAndProcess(bool $inRedirect): void { // the redirect section allows a set of tests to be reused outside of // a given test dir if ($this->hasSection('REDIRECTTEST')) { if ($inRedirect) { throw new BorkageException("Can't redirect a test from within a redirected test"); } return; } if (!$this->hasSection('PHPDBG') && $this->hasSection('FILE') + $this->hasSection('FILEEOF') + $this->hasSection('FILE_EXTERNAL') != 1) { throw new BorkageException("missing section --FILE--"); } if ($this->hasSection('FILEEOF')) { $this->sections['FILE'] = preg_replace("/[\r\n]+$/", '', $this->sections['FILEEOF']); unset($this->sections['FILEEOF']); } foreach (['FILE', 'EXPECT', 'EXPECTF', 'EXPECTREGEX'] as $prefix) { // For grepping: FILE_EXTERNAL, EXPECT_EXTERNAL, EXPECTF_EXTERNAL, EXPECTREGEX_EXTERNAL $key = $prefix . '_EXTERNAL'; if ($this->hasSection($key)) { // don't allow tests to retrieve files from anywhere but this subdirectory $dir = dirname($this->fileName); $fileName = $dir . '/' . trim(str_replace('..', '', $this->getSection($key))); if (file_exists($fileName)) { $this->sections[$prefix] = file_get_contents($fileName); } else { throw new BorkageException("could not load --" . $key . "-- " . $dir . '/' . trim($fileName)); } } } if (($this->hasSection('EXPECT') + $this->hasSection('EXPECTF') + $this->hasSection('EXPECTREGEX')) != 1) { throw new BorkageException("missing section --EXPECT--, --EXPECTF-- or --EXPECTREGEX--"); } if ($this->hasSection('PHPDBG') && !$this->hasSection('STDIN')) { $this->sections['STDIN'] = $this->sections['PHPDBG'] . "\n"; } } } function init_output_buffers(): void { // Delete as much output buffers as possible. while (@ob_end_clean()) { } if (ob_get_level()) { echo "Not all buffers were deleted.\n"; } } function check_proc_open_function_exists(): void { if (!function_exists('proc_open')) { echo <</dev/null` phpincludedir=`$PHP_CONFIG --include-dir 2>/dev/null` INCLUDES=`$PHP_CONFIG --includes 2>/dev/null` EXTENSION_DIR=`$PHP_CONFIG --extension-dir 2>/dev/null` PHP_EXECUTABLE=`$PHP_CONFIG --php-binary 2>/dev/null` if test -z "$prefix"; then AC_MSG_ERROR([Cannot find php-config. Please use --with-php-config=PATH]) fi php_shtool=$srcdir/build/shtool PHP_INIT_BUILD_SYSTEM AC_MSG_CHECKING([for PHP prefix]) AC_MSG_RESULT([$prefix]) AC_MSG_CHECKING([for PHP includes]) AC_MSG_RESULT([$INCLUDES]) AC_MSG_CHECKING([for PHP extension directory]) AC_MSG_RESULT([$EXTENSION_DIR]) AC_MSG_CHECKING([for PHP installed headers prefix]) AC_MSG_RESULT([$phpincludedir]) dnl Checks for PHP_DEBUG / ZEND_DEBUG / ZTS. AC_MSG_CHECKING([if debug is enabled]) old_CPPFLAGS=$CPPFLAGS CPPFLAGS="-I$phpincludedir" AC_EGREP_CPP(php_debug_is_enabled,[ #include
#if ZEND_DEBUG php_debug_is_enabled #endif ],[ PHP_DEBUG=yes ],[ PHP_DEBUG=no ]) CPPFLAGS=$old_CPPFLAGS AC_MSG_RESULT([$PHP_DEBUG]) AC_MSG_CHECKING([if zts is enabled]) old_CPPFLAGS=$CPPFLAGS CPPFLAGS="-I$phpincludedir" AC_EGREP_CPP(php_zts_is_enabled,[ #include
#if ZTS php_zts_is_enabled #endif ],[ PHP_THREAD_SAFETY=yes ],[ PHP_THREAD_SAFETY=no ]) CPPFLAGS=$old_CPPFLAGS AC_MSG_RESULT([$PHP_THREAD_SAFETY]) dnl Discard optimization flags when debugging is enabled. if test "$PHP_DEBUG" = "yes"; then PHP_DEBUG=1 ZEND_DEBUG=yes changequote({,}) CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9s]*//g'` CXXFLAGS=`echo "$CXXFLAGS" | $SED -e 's/-O[0-9s]*//g'` changequote([,]) dnl Add -O0 only if GCC or ICC is used. if test "$GCC" = "yes" || test "$ICC" = "yes"; then CFLAGS="$CFLAGS -O0" CXXFLAGS="$CXXFLAGS -g -O0" fi if test "$SUNCC" = "yes"; then if test -n "$auto_cflags"; then CFLAGS="-g" CXXFLAGS="-g" else CFLAGS="$CFLAGS -g" CXXFLAGS="$CFLAGS -g" fi fi else PHP_DEBUG=0 ZEND_DEBUG=no fi dnl Always shared. PHP_BUILD_SHARED dnl Required programs. PHP_PROG_AWK sinclude(config.m4) enable_static=no enable_shared=yes dnl Only allow AC_PROG_CXX and AC_PROG_CXXCPP if they are explicitly called (by dnl PHP_REQUIRE_CXX). Otherwise AC_PROG_LIBTOOL fails if there is no working C++ dnl compiler. AC_PROVIDE_IFELSE([PHP_REQUIRE_CXX], [], [ undefine([AC_PROG_CXX]) AC_DEFUN([AC_PROG_CXX], []) undefine([AC_PROG_CXXCPP]) AC_DEFUN([AC_PROG_CXXCPP], [php_prog_cxxcpp=disabled]) ]) AC_PROG_LIBTOOL all_targets='$(PHP_MODULES) $(PHP_ZEND_EX)' install_targets="install-modules install-headers" phplibdir="`pwd`/modules" CPPFLAGS="$CPPFLAGS -DHAVE_CONFIG_H" CFLAGS_CLEAN='$(CFLAGS)' CXXFLAGS_CLEAN='$(CXXFLAGS)' test "$prefix" = "NONE" && prefix="/usr/local" test "$exec_prefix" = "NONE" && exec_prefix='$(prefix)' if test "$cross_compiling" = yes ; then AC_MSG_CHECKING(for native build C compiler) AC_CHECK_PROGS(BUILD_CC, [gcc clang c99 c89 cc cl],none) AC_MSG_RESULT($BUILD_CC) else BUILD_CC=$CC fi PHP_SUBST(PHP_MODULES) PHP_SUBST(PHP_ZEND_EX) PHP_SUBST(all_targets) PHP_SUBST(install_targets) PHP_SUBST(prefix) PHP_SUBST(exec_prefix) PHP_SUBST(libdir) PHP_SUBST(prefix) PHP_SUBST(phplibdir) PHP_SUBST(phpincludedir) PHP_SUBST(CC) PHP_SUBST(CFLAGS) PHP_SUBST(CFLAGS_CLEAN) PHP_SUBST(CPP) PHP_SUBST(CPPFLAGS) PHP_SUBST(CXX) PHP_SUBST(CXXFLAGS) PHP_SUBST(CXXFLAGS_CLEAN) PHP_SUBST(EXTENSION_DIR) PHP_SUBST(PHP_EXECUTABLE) PHP_SUBST(EXTRA_LDFLAGS) PHP_SUBST(EXTRA_LIBS) PHP_SUBST(INCLUDES) PHP_SUBST(LFLAGS) PHP_SUBST(LDFLAGS) PHP_SUBST(SHARED_LIBTOOL) PHP_SUBST(LIBTOOL) PHP_SUBST(SHELL) PHP_SUBST(INSTALL_HEADERS) PHP_SUBST(BUILD_CC) PHP_GEN_BUILD_DIRS PHP_GEN_GLOBAL_MAKEFILE test -d modules || $php_shtool mkdir modules AC_CONFIG_HEADERS([config.h]) AC_CONFIG_COMMANDS_PRE([PHP_PATCH_CONFIG_HEADERS([config.h.in])]) AC_OUTPUT PK! build/ax_gcc_func_attribute.m4nu[# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_gcc_func_attribute.html # =========================================================================== # # SYNOPSIS # # AX_GCC_FUNC_ATTRIBUTE(ATTRIBUTE) # # DESCRIPTION # # This macro checks if the compiler supports one of GCC's function # attributes; many other compilers also provide function attributes with # the same syntax. Compiler warnings are used to detect supported # attributes as unsupported ones are ignored by default so quieting # warnings when using this macro will yield false positives. # # The ATTRIBUTE parameter holds the name of the attribute to be checked. # # If ATTRIBUTE is supported define HAVE_FUNC_ATTRIBUTE_. # # The macro caches its result in the ax_cv_have_func_attribute_ # variable. # # The macro currently supports the following function attributes: # # alias # aligned # alloc_size # always_inline # artificial # cold # const # constructor # constructor_priority for constructor attribute with priority # deprecated # destructor # dllexport # dllimport # error # externally_visible # fallthrough # flatten # format # format_arg # gnu_inline # hot # ifunc # leaf # malloc # noclone # noinline # nonnull # noreturn # nothrow # optimize # pure # sentinel # sentinel_position # unused # used # visibility # warning # warn_unused_result # weak # weakref # # Unsupported function attributes will be tested with a prototype # returning an int and not accepting any arguments and the result of the # check might be wrong or meaningless so use with care. # # LICENSE # # Copyright (c) 2013 Gabriele Svelto # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 9 AC_DEFUN([AX_GCC_FUNC_ATTRIBUTE], [ AS_VAR_PUSHDEF([ac_var], [ax_cv_have_func_attribute_$1]) AC_CACHE_CHECK([for __attribute__(($1))], [ac_var], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([ m4_case([$1], [alias], [ int foo( void ) { return 0; } int bar( void ) __attribute__(($1("foo"))); ], [aligned], [ int foo( void ) __attribute__(($1(32))); ], [alloc_size], [ void *foo(int a) __attribute__(($1(1))); ], [always_inline], [ inline __attribute__(($1)) int foo( void ) { return 0; } ], [artificial], [ inline __attribute__(($1)) int foo( void ) { return 0; } ], [cold], [ int foo( void ) __attribute__(($1)); ], [const], [ int foo( void ) __attribute__(($1)); ], [constructor_priority], [ int foo( void ) __attribute__((__constructor__(65535/2))); ], [constructor], [ int foo( void ) __attribute__(($1)); ], [deprecated], [ int foo( void ) __attribute__(($1(""))); ], [destructor], [ int foo( void ) __attribute__(($1)); ], [dllexport], [ __attribute__(($1)) int foo( void ) { return 0; } ], [dllimport], [ int foo( void ) __attribute__(($1)); ], [error], [ int foo( void ) __attribute__(($1(""))); ], [externally_visible], [ int foo( void ) __attribute__(($1)); ], [fallthrough], [ int foo( void ) {switch (0) { case 1: __attribute__(($1)); case 2: break ; }}; ], [flatten], [ int foo( void ) __attribute__(($1)); ], [format], [ int foo(const char *p, ...) __attribute__(($1(printf, 1, 2))); ], [format_arg], [ char *foo(const char *p) __attribute__(($1(1))); ], [gnu_inline], [ inline __attribute__(($1)) int foo( void ) { return 0; } ], [hot], [ int foo( void ) __attribute__(($1)); ], [ifunc], [ int my_foo( void ) { return 0; } static int (*resolve_foo(void))(void) { return my_foo; } int foo( void ) __attribute__(($1("resolve_foo"))); ], [leaf], [ __attribute__(($1)) int foo( void ) { return 0; } ], [malloc], [ void *foo( void ) __attribute__(($1)); ], [noclone], [ int foo( void ) __attribute__(($1)); ], [noinline], [ __attribute__(($1)) int foo( void ) { return 0; } ], [nonnull], [ int foo(char *p) __attribute__(($1(1))); ], [noreturn], [ void foo( void ) __attribute__(($1)); ], [nothrow], [ int foo( void ) __attribute__(($1)); ], [optimize], [ __attribute__(($1(3))) int foo( void ) { return 0; } ], [pure], [ int foo( void ) __attribute__(($1)); ], [sentinel], [ int foo(void *p, ...) __attribute__(($1)); ], [sentinel_position], [ int foo(void *p, ...) __attribute__(($1(1))); ], [returns_nonnull], [ void *foo( void ) __attribute__(($1)); ], [unused], [ int foo( void ) __attribute__(($1)); ], [used], [ int foo( void ) __attribute__(($1)); ], [visibility], [ int foo_def( void ) __attribute__(($1("default"))); int foo_hid( void ) __attribute__(($1("hidden"))); int foo_int( void ) __attribute__(($1("internal"))); int foo_pro( void ) __attribute__(($1("protected"))); ], [warning], [ int foo( void ) __attribute__(($1(""))); ], [warn_unused_result], [ int foo( void ) __attribute__(($1)); ], [weak], [ int foo( void ) __attribute__(($1)); ], [weakref], [ static int foo( void ) { return 0; } static int bar( void ) __attribute__(($1("foo"))); ], [target], [ static int bar( void ) __attribute__(($1("sse2"))); ], [ m4_warn([syntax], [Unsupported attribute $1, the test may fail]) int foo( void ) __attribute__(($1)); ] )], []) ], dnl GCC doesn't exit with an error if an unknown attribute is dnl provided but only outputs a warning, so accept the attribute dnl only if no warning were issued. [AS_IF([test -s conftest.err], [AS_VAR_SET([ac_var], [no])], [AS_VAR_SET([ac_var], [yes])])], [AS_VAR_SET([ac_var], [no])]) ]) AS_IF([test yes = AS_VAR_GET([ac_var])], [AC_DEFINE_UNQUOTED(AS_TR_CPP(HAVE_FUNC_ATTRIBUTE_$1), 1, [Define to 1 if the system has the `$1' function attribute])], []) AS_VAR_POPDEF([ac_var]) ]) PK!9CDDbuild/php_cxx_compile_stdcxx.m4nu[dnl dnl Based on https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html dnl Author: Anatol Belski dnl dnl PHP_CXX_COMPILE_STDCXX(version, mandatory|optional, var_name_to_put_switch_in) dnl dnl ARGUMENTS dnl dnl first arg - version as 11, 14 or 17 dnl second arg - if mandatory, the configure will fail when no features found. dnl Optional will make configure silently continue dnl third arg - a variable name where the corresponding switch would be put. If dnl the variable is already defined, its contents will be overwritten. dnl dnl EXAMPLE dnl dnl PHP_CXX_COMPILE_STDCXX(14, mandatory, MY_STDCXX_SWiTCH) dnl echo $MY_STDCXX_SWITCH dnl dnl dnl PHP specific implementation start. dnl AC_DEFUN([PHP_CXX_COMPILE_STDCXX], [dnl m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], [$1], [14], [ax_cxx_compile_alternatives="14 1y"], [$1], [17], [ax_cxx_compile_alternatives="17 1z"], [m4_fatal([invalid first argument `$1' to PHP_CXX_COMPILE_STDCXX])])dnl m4_if([$2], [], [ax_cxx_compile_cxx$1_required=true], [$2], [mandatory], [ax_cxx_compile_cxx$1_required=true], [$2], [optional], [ax_cxx_compile_cxx$1_required=false], [m4_fatal([invalid third argument `$2' to PHP_CXX_COMPILE_STDCXX])])dnl AC_LANG_PUSH([C++])dnl ac_success=no dnl HP's aCC needs +std=c++11 according to: dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf dnl Cray's crayCC needs "-h std=c++11" for alternative in ${ax_cxx_compile_alternatives}; do for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, $cachevar, [ac_save_CXX="$CXX" CXX="$CXX $switch" AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], [eval $cachevar=yes], [eval $cachevar=no]) CXX="$ac_save_CXX"]) if eval test x\$$cachevar = xyes; then eval AS_TR_SH([$3])="$switch" ac_success=yes break fi done if test x$ac_success = xyes; then break fi done AC_LANG_POP([C++]) if test x$ax_cxx_compile_cxx$1_required = xtrue; then if test x$ac_success = xno; then AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) fi fi if test x$ac_success = xno; then AC_MSG_NOTICE([No compiler with C++$1 support was found]) fi AC_SUBST(HAVE_CXX$1) ]) dnl dnl PHP specific implementation end. dnl The relevant part of the unchanged original implementation is below. dnl # # LICENSE # # Copyright (c) 2008 Benjamin Kosnik # Copyright (c) 2012 Zack Weinberg # Copyright (c) 2013 Roy Stogner # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov # Copyright (c) 2015 Paul Norman # Copyright (c) 2015 Moritz Klammler # Copyright (c) 2016, 2018 Krzesimir Nowak # Copyright (c) 2019 Enji Cooper # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. dnl Test body for checking C++11 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 ) dnl Test body for checking C++14 support m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 ) m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 ) dnl Tests for new features in C++11 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ // If the compiler admits that it is not ready for C++11, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201103L #error "This is not a C++11 compiler" #else namespace cxx11 { namespace test_static_assert { template struct check { static_assert(sizeof(int) <= sizeof(T), "not big enough"); }; } namespace test_final_override { struct Base { virtual ~Base() {} virtual void f() {} }; struct Derived : public Base { virtual ~Derived() override {} virtual void f() override {} }; } namespace test_double_right_angle_brackets { template < typename T > struct check {}; typedef check single_type; typedef check> double_type; typedef check>> triple_type; typedef check>>> quadruple_type; } namespace test_decltype { int f() { int a = 1; decltype(a) b = 2; return a + b; } } namespace test_type_deduction { template < typename T1, typename T2 > struct is_same { static const bool value = false; }; template < typename T > struct is_same { static const bool value = true; }; template < typename T1, typename T2 > auto add(T1 a1, T2 a2) -> decltype(a1 + a2) { return a1 + a2; } int test(const int c, volatile int v) { static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == false, ""); auto ac = c; auto av = v; auto sumi = ac + av + 'x'; auto sumf = ac + av + 1.0; static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == true, ""); static_assert(is_same::value == false, ""); static_assert(is_same::value == true, ""); return (sumf > 0.0) ? sumi : add(c, v); } } namespace test_noexcept { int f() { return 0; } int g() noexcept { return 0; } static_assert(noexcept(f()) == false, ""); static_assert(noexcept(g()) == true, ""); } namespace test_constexpr { template < typename CharT > unsigned long constexpr strlen_c_r(const CharT *const s, const unsigned long acc) noexcept { return *s ? strlen_c_r(s + 1, acc + 1) : acc; } template < typename CharT > unsigned long constexpr strlen_c(const CharT *const s) noexcept { return strlen_c_r(s, 0UL); } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("1") == 1UL, ""); static_assert(strlen_c("example") == 7UL, ""); static_assert(strlen_c("another\0example") == 7UL, ""); } namespace test_rvalue_references { template < int N > struct answer { static constexpr int value = N; }; answer<1> f(int&) { return answer<1>(); } answer<2> f(const int&) { return answer<2>(); } answer<3> f(int&&) { return answer<3>(); } void test() { int i = 0; const int c = 0; static_assert(decltype(f(i))::value == 1, ""); static_assert(decltype(f(c))::value == 2, ""); static_assert(decltype(f(0))::value == 3, ""); } } namespace test_uniform_initialization { struct test { static const int zero {}; static const int one {1}; }; static_assert(test::zero == 0, ""); static_assert(test::one == 1, ""); } namespace test_lambdas { void test1() { auto lambda1 = [](){}; auto lambda2 = lambda1; lambda1(); lambda2(); } int test2() { auto a = [](int i, int j){ return i + j; }(1, 2); auto b = []() -> int { return '0'; }(); auto c = [=](){ return a + b; }(); auto d = [&](){ return c; }(); auto e = [a, &b](int x) mutable { const auto identity = [](int y){ return y; }; for (auto i = 0; i < a; ++i) a += b--; return x + identity(a + b); }(0); return a + b + c + d + e; } int test3() { const auto nullary = [](){ return 0; }; const auto unary = [](int x){ return x; }; using nullary_t = decltype(nullary); using unary_t = decltype(unary); const auto higher1st = [](nullary_t f){ return f(); }; const auto higher2nd = [unary](nullary_t f1){ return [unary, f1](unary_t f2){ return f2(unary(f1())); }; }; return higher1st(nullary) + higher2nd(nullary)(unary); } } namespace test_variadic_templates { template struct sum; template struct sum { static constexpr auto value = N0 + sum::value; }; template <> struct sum<> { static constexpr auto value = 0; }; static_assert(sum<>::value == 0, ""); static_assert(sum<1>::value == 1, ""); static_assert(sum<23>::value == 23, ""); static_assert(sum<1, 2>::value == 3, ""); static_assert(sum<5, 5, 11>::value == 21, ""); static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); } // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function // because of this. namespace test_template_alias_sfinae { struct foo {}; template using member = typename T::member_type; template void func(...) {} template void func(member*) {} void test(); void test() { func(0); } } } // namespace cxx11 #endif // __cplusplus >= 201103L ]]) dnl Tests for new features in C++14 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ // If the compiler admits that it is not ready for C++14, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201402L #error "This is not a C++14 compiler" #else namespace cxx14 { namespace test_polymorphic_lambdas { int test() { const auto lambda = [](auto&&... args){ const auto istiny = [](auto x){ return (sizeof(x) == 1UL) ? 1 : 0; }; const int aretiny[] = { istiny(args)... }; return aretiny[0]; }; return lambda(1, 1L, 1.0f, '1'); } } namespace test_binary_literals { constexpr auto ivii = 0b0000000000101010; static_assert(ivii == 42, "wrong value"); } namespace test_generalized_constexpr { template < typename CharT > constexpr unsigned long strlen_c(const CharT *const s) noexcept { auto length = 0UL; for (auto p = s; *p; ++p) ++length; return length; } static_assert(strlen_c("") == 0UL, ""); static_assert(strlen_c("x") == 1UL, ""); static_assert(strlen_c("test") == 4UL, ""); static_assert(strlen_c("another\0test") == 7UL, ""); } namespace test_lambda_init_capture { int test() { auto x = 0; const auto lambda1 = [a = x](int b){ return a + b; }; const auto lambda2 = [a = lambda1(x)](){ return a; }; return lambda2(); } } namespace test_digit_separators { constexpr auto ten_million = 100'000'000; static_assert(ten_million == 100000000, ""); } namespace test_return_type_deduction { auto f(int& x) { return x; } decltype(auto) g(int& x) { return x; } template < typename T1, typename T2 > struct is_same { static constexpr auto value = false; }; template < typename T > struct is_same { static constexpr auto value = true; }; int test() { auto x = 0; static_assert(is_same::value, ""); static_assert(is_same::value, ""); return x; } } } // namespace cxx14 #endif // __cplusplus >= 201402L ]]) dnl Tests for new features in C++17 m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ // If the compiler admits that it is not ready for C++17, why torture it? // Hopefully, this will speed up the test. #ifndef __cplusplus #error "This is not a C++ compiler" #elif __cplusplus < 201703L #error "This is not a C++17 compiler" #else #include #include #include namespace cxx17 { namespace test_constexpr_lambdas { constexpr int foo = [](){return 42;}(); } namespace test::nested_namespace::definitions { } namespace test_fold_expression { template int multiply(Args... args) { return (args * ... * 1); } template bool all(Args... args) { return (args && ...); } } namespace test_extended_static_assert { static_assert (true); } namespace test_auto_brace_init_list { auto foo = {5}; auto bar {5}; static_assert(std::is_same, decltype(foo)>::value); static_assert(std::is_same::value); } namespace test_typename_in_template_template_parameter { template typename X> struct D; } namespace test_fallthrough_nodiscard_maybe_unused_attributes { int f1() { return 42; } [[nodiscard]] int f2() { [[maybe_unused]] auto unused = f1(); switch (f1()) { case 17: f1(); [[fallthrough]]; case 42: f1(); } return f1(); } } namespace test_extended_aggregate_initialization { struct base1 { int b1, b2 = 42; }; struct base2 { base2() { b3 = 42; } int b3; }; struct derived : base1, base2 { int d; }; derived d1 {{1, 2}, {}, 4}; // full initialization derived d2 {{}, {}, 4}; // value-initialized bases } namespace test_general_range_based_for_loop { struct iter { int i; int& operator* () { return i; } const int& operator* () const { return i; } iter& operator++() { ++i; return *this; } }; struct sentinel { int i; }; bool operator== (const iter& i, const sentinel& s) { return i.i == s.i; } bool operator!= (const iter& i, const sentinel& s) { return !(i == s); } struct range { iter begin() const { return {0}; } sentinel end() const { return {5}; } }; void f() { range r {}; for (auto i : r) { [[maybe_unused]] auto v = i; } } } namespace test_lambda_capture_asterisk_this_by_value { struct t { int i; int foo() { return [*this]() { return i; }(); } }; } namespace test_enum_class_construction { enum class byte : unsigned char {}; byte foo {42}; } namespace test_constexpr_if { template int f () { if constexpr(cond) { return 13; } else { return 42; } } } namespace test_selection_statement_with_initializer { int f() { return 13; } int f2() { if (auto i = f(); i > 0) { return 3; } switch (auto i = f(); i + 4) { case 17: return 2; default: return 1; } } } namespace test_template_argument_deduction_for_class_templates { template struct pair { pair (T1 p1, T2 p2) : m1 {p1}, m2 {p2} {} T1 m1; T2 m2; }; void f() { [[maybe_unused]] auto p = pair{13, 42u}; } } namespace test_non_type_auto_template_parameters { template struct B {}; B<5> b1; B<'a'> b2; } namespace test_structured_bindings { int arr[2] = { 1, 2 }; std::pair pr = { 1, 2 }; auto f1() -> int(&)[2] { return arr; } auto f2() -> std::pair& { return pr; } struct S { int x1 : 2; volatile double y1; }; S f3() { return {}; } auto [ x1, y1 ] = f1(); auto& [ xr1, yr1 ] = f1(); auto [ x2, y2 ] = f2(); auto& [ xr2, yr2 ] = f2(); const auto [ x3, y3 ] = f3(); } namespace test_exception_spec_type_system { struct Good {}; struct Bad {}; void g1() noexcept; void g2(); template Bad f(T*, T*); template Good f(T1*, T2*); static_assert (std::is_same_v); } namespace test_inline_variables { template void f(T) {} template inline T g(T) { return T{}; } template<> inline void f<>(int) {} template<> int g<>(int) { return 5; } } } // namespace cxx17 #endif // __cplusplus < 201703L ]]) PK!xXOObuild/libtool.m4nu[# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # ='`$ECHO "$" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to ." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib.so # instead of lib.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Add ABI-specific directories to the system library path. sys_lib_dlsearch_path_spec="/lib64 /usr/lib64 /lib /usr/lib" # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="$sys_lib_dlsearch_path_spec $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 &1 conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd*) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS # Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) # ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) # ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) # lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) PK!XA build/php.m4nu[dnl This file contains local autoconf macros. dnl ---------------------------------------------------------------------------- dnl Output stylize macros for configure (help/runtime). dnl ---------------------------------------------------------------------------- dnl dnl PHP_HELP_SEPARATOR(title) dnl dnl Adds separator title into the configure --help display. dnl AC_DEFUN([PHP_HELP_SEPARATOR],[ AC_ARG_ENABLE([],[ $1 ],[]) ]) dnl dnl PHP_CONFIGURE_PART(title) dnl dnl Adds separator title configure output (idea borrowed from mm). dnl AC_DEFUN([PHP_CONFIGURE_PART],[ AC_MSG_RESULT() AC_MSG_RESULT([${T_MD}$1${T_ME}]) ]) dnl ---------------------------------------------------------------------------- dnl Build system helper macros. dnl ---------------------------------------------------------------------------- dnl dnl PHP_DEF_HAVE(what) dnl dnl Generates 'AC_DEFINE(HAVE_WHAT, 1, [ ])'. dnl AC_DEFUN([PHP_DEF_HAVE],[AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___), 1, [ ])]) dnl dnl PHP_RUN_ONCE(namespace, variable, code) dnl dnl Execute code, if variable is not set in namespace. dnl AC_DEFUN([PHP_RUN_ONCE],[ changequote({,}) unique=`echo $2|$SED 's/[^a-zA-Z0-9]/_/g'` changequote([,]) cmd="echo $ac_n \"\$$1$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "$1$unique=set" $3 fi ]) dnl dnl PHP_EXPAND_PATH(path, variable) dnl dnl Expands path to an absolute path and assigns it to variable. dnl AC_DEFUN([PHP_EXPAND_PATH],[ if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then $2=$1 else changequote({,}) ep_dir=`echo $1|$SED 's%/*[^/][^/]*/*$%%'` changequote([,]) ep_realdir=`(cd "$ep_dir" && pwd)` $2="$ep_realdir"/`basename "$1"` fi ]) dnl dnl PHP_DEFINE(WHAT [, value[, directory]]) dnl dnl Creates builddir/include/what.h and in there #define WHAT value. dnl AC_DEFUN([PHP_DEFINE],[ [echo "#define ]$1[]ifelse([$2],,[ 1],[ $2])[" > ]ifelse([$3],,[include],[$3])[/php_]translit($1,A-Z,a-z)[.h] ]) dnl dnl PHP_SUBST(varname) dnl dnl Adds variable with its value into Makefile, e.g.: dnl CC = gcc dnl AC_DEFUN([PHP_SUBST],[ PHP_VAR_SUBST="$PHP_VAR_SUBST $1" ]) dnl dnl PHP_SUBST_OLD(varname, [VALUE]) dnl dnl Same as PHP_SUBST() but also substitutes all @VARNAME@ instances in every dnl file passed to AC_OUTPUT. dnl AC_DEFUN([PHP_SUBST_OLD],[ AC_SUBST($@) PHP_SUBST([$1]) ]) dnl dnl PHP_OUTPUT(file) dnl dnl Adds "file" to the list of files generated by AC_OUTPUT. This macro can be dnl used several times. dnl AC_DEFUN([PHP_OUTPUT],[ PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1" ]) dnl ---------------------------------------------------------------------------- dnl Build system base macros. dnl ---------------------------------------------------------------------------- dnl dnl PHP_CANONICAL_HOST_TARGET dnl AC_DEFUN([PHP_CANONICAL_HOST_TARGET],[ AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_TARGET])dnl dnl Make sure we do not continue if host_alias is empty. if test -z "$host_alias" && test -n "$host"; then host_alias=$host fi if test -z "$host_alias"; then AC_MSG_ERROR([host_alias is not set!]) fi ]) dnl dnl PHP_INIT_BUILD_SYSTEM dnl dnl Creates build directories and Makefile placeholders. dnl AC_DEFUN([PHP_INIT_BUILD_SYSTEM],[ AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl test -d include || $php_shtool mkdir include > Makefile.objects > Makefile.fragments dnl We need to play tricks here to avoid matching the grep line itself. pattern=define $EGREP $pattern'.*include/php' $srcdir/configure|$SED 's/.*>//'|xargs touch 2>/dev/null ]) dnl dnl PHP_GEN_GLOBAL_MAKEFILE dnl dnl Generates the global makefile. dnl AC_DEFUN([PHP_GEN_GLOBAL_MAKEFILE],[ cat >Makefile <> Makefile done cat $abs_srcdir/build/Makefile.global Makefile.fragments Makefile.objects >> Makefile ]) dnl dnl PHP_ADD_MAKEFILE_FRAGMENT([srcfile [, ext_srcdir [, ext_builddir]]]) dnl dnl Processes a file called Makefile.frag in the source directory of the most dnl recently added extension. $(srcdir) and $(builddir) are substituted with the dnl proper paths. Can be used to supply custom rules and/or additional targets. dnl AC_DEFUN([PHP_ADD_MAKEFILE_FRAGMENT],[ ifelse($1,,src=$ext_srcdir/Makefile.frag,src=$1) ifelse($2,,ac_srcdir=$ext_srcdir,ac_srcdir=$2) ifelse($3,,ac_builddir=$ext_builddir,ac_builddir=$3) test -f "$src" && $SED -e "s#\$(srcdir)#$ac_srcdir#g" -e "s#\$(builddir)#$ac_builddir#g" $src >> Makefile.fragments ]) dnl dnl PHP_ADD_SOURCES(source-path, sources [, special-flags [, type]]) dnl dnl Adds sources which are located relative to source-path to the array of type dnl type. Sources are processed with optional special-flags which are passed to dnl the compiler. Sources can be either written in C or C++ (filenames shall end dnl in .c or .cpp, respectively). dnl dnl Note: If source-path begins with a "/", the "/" is removed and the path is dnl interpreted relative to the top build-directory. dnl dnl Which array to append to? dnl AC_DEFUN([PHP_ADD_SOURCES],[ PHP_ADD_SOURCES_X($1, $2, $3, ifelse($4,sapi,PHP_SAPI_OBJS,PHP_GLOBAL_OBJS)) ]) dnl dnl _PHP_ASSIGN_BUILD_VARS(type) dnl dnl Internal, don't use. dnl AC_DEFUN([_PHP_ASSIGN_BUILD_VARS],[ ifelse($1,shared,[ b_c_pre=$shared_c_pre b_cxx_pre=$shared_cxx_pre b_c_meta=$shared_c_meta b_cxx_meta=$shared_cxx_meta b_c_post=$shared_c_post b_cxx_post=$shared_cxx_post ],[ b_c_pre=$php_c_pre b_cxx_pre=$php_cxx_pre b_c_meta=$php_c_meta b_cxx_meta=$php_cxx_meta b_c_post=$php_c_post b_cxx_post=$php_cxx_post ])dnl b_lo=[$]$1_lo ]) dnl dnl PHP_ADD_SOURCES_X(source-path, sources[, special-flags[, target-var[, shared]]]) dnl dnl Additional to PHP_ADD_SOURCES (see above), this lets you set the name of the dnl array target-var directly, as well as whether shared objects will be built dnl from the sources. Should not be used directly. dnl AC_DEFUN([PHP_ADD_SOURCES_X],[ dnl Relative to source- or build-directory? dnl ac_srcdir/ac_bdir include trailing slash case $1 in ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;; /*[)] ac_srcdir=`echo "$1"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;; *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$1/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;; esac dnl how to build .. shared or static? ifelse($5,yes,_PHP_ASSIGN_BUILD_VARS(shared),_PHP_ASSIGN_BUILD_VARS(php)) dnl Iterate over the sources. old_IFS=[$]IFS for ac_src in $2; do dnl Remove the suffix. IFS=. set $ac_src ac_obj=[$]1 IFS=$old_IFS dnl Append to the array which has been dynamically chosen at m4 time. $4="[$]$4 [$]ac_bdir[$]ac_obj.lo" dnl Choose the right compiler/flags/etc. for the source-file. case $ac_src in *.c[)] ac_comp="$b_c_pre $ac_inc $b_c_meta $3 -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;; *.s[)] ac_comp="$b_c_pre $ac_inc $b_c_meta $3 -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;; *.S[)] ac_comp="$b_c_pre $ac_inc $b_c_meta $3 -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_c_post" ;; *.cpp|*.cc|*.cxx[)] ac_comp="$b_cxx_pre $ac_inc $b_cxx_meta $3 -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $b_cxx_post" ;; esac dnl Generate Makefiles with dependencies ac_comp="$ac_comp -MMD -MF $ac_bdir$ac_obj.dep -MT $ac_bdir[$]ac_obj.lo" dnl Create a rule for the object/source combo. cat >>Makefile.objects<>Makefile.objects< #include #include #include #ifdef HAVE_UNISTD_H #include #endif $3 int main() { FILE *fp = fopen("conftestval", "w"); if (!fp) return(1); fprintf(fp, "%d\n", sizeof($1)); return(0); } ]])], [ eval $php_cache_value=`cat conftestval` ], [ eval $php_cache_value=0 ], [ ifelse([$2],,[eval $php_cache_value=0], [eval $php_cache_value=$2]) ]) LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS ]) if eval test "\$$php_cache_value" != "0"; then ifelse([$4],[],:,[$4]) ifelse([$5],[],,[else $5]) fi ]) dnl dnl PHP_CHECK_SIZEOF(type, cross-value, extra-headers) dnl AC_DEFUN([PHP_CHECK_SIZEOF], [ AC_MSG_CHECKING([size of $1]) _PHP_CHECK_SIZEOF($1, $2, $3, [ AC_DEFINE_UNQUOTED([SIZEOF_]translit($1,a-z,A-Z_), [$]php_cv_sizeof_[]$1, [Size of $1]) AC_DEFINE_UNQUOTED([HAVE_]translit($1,a-z,A-Z_), 1, [Whether $1 is available]) ]) AC_MSG_RESULT([[$][php_cv_sizeof_]translit($1, ,_)]) ]) dnl dnl PHP_CHECK_IN_ADDR_T dnl AC_DEFUN([PHP_CHECK_IN_ADDR_T], [ dnl AIX keeps in_addr_t in /usr/include/netinet/in.h AC_MSG_CHECKING([for in_addr_t]) AC_CACHE_VAL(ac_cv_type_in_addr_t, [AC_EGREP_CPP(dnl changequote(<<,>>)dnl <>dnl changequote([,]), [#include #include #include #ifdef HAVE_NETINET_IN_H #include #endif], ac_cv_type_in_addr_t=yes, ac_cv_type_in_addr_t=no)])dnl AC_MSG_RESULT([$ac_cv_type_in_addr_t]) if test $ac_cv_type_in_addr_t = no; then AC_DEFINE(in_addr_t, u_int, [ ]) fi ]) dnl dnl PHP_TIME_R_TYPE dnl dnl Check type of reentrant time-related functions. Type can be: irix, hpux or dnl POSIX. dnl AC_DEFUN([PHP_TIME_R_TYPE],[ AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include int main() { char buf[27]; struct tm t; time_t old = 0; int r, s; s = gmtime_r(&old, &t); r = (int) asctime_r(&t, buf, 26); if (r == s && s == 0) return (0); return (1); } ]])],[ ac_cv_time_r_type=hpux ],[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include int main() { struct tm t, *s; time_t old = 0; char buf[27], *p; s = gmtime_r(&old, &t); p = asctime_r(&t, buf, 26); if (p == buf && s == &t) return (0); return (1); } ]])],[ ac_cv_time_r_type=irix ],[ ac_cv_time_r_type=POSIX ],[ ac_cv_time_r_type=POSIX ]) ],[ ac_cv_time_r_type=POSIX ]) ]) case $ac_cv_time_r_type in hpux[)] AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;; irix[)] AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;; esac ]) dnl dnl PHP_DOES_PWRITE_WORK dnl dnl Internal. dnl AC_DEFUN([PHP_DOES_PWRITE_WORK],[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include #include #include #include $1 int main() { int fd = open("conftest_in", O_WRONLY|O_CREAT, 0600); if (fd < 0) return 1; if (pwrite(fd, "text", 4, 0) != 4) return 1; /* Linux glibc breakage until 2.2.5 */ if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) return 1; return 0; } ]])],[ ac_cv_pwrite=yes ],[ ac_cv_pwrite=no ],[ ac_cv_pwrite=no ]) ]) dnl dnl PHP_DOES_PREAD_WORK dnl dnl Internal. dnl AC_DEFUN([PHP_DOES_PREAD_WORK],[ echo test > conftest_in AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include #include #include #include $1 int main() { char buf[3]; int fd = open("conftest_in", O_RDONLY); if (fd < 0) return 1; if (pread(fd, buf, 2, 0) != 2) return 1; /* Linux glibc breakage until 2.2.5 */ if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) return 1; return 0; } ]])],[ ac_cv_pread=yes ],[ ac_cv_pread=no ],[ ac_cv_pread=no ]) rm -f conftest_in ]) dnl dnl PHP_PWRITE_TEST dnl AC_DEFUN([PHP_PWRITE_TEST],[ AC_CACHE_CHECK(whether pwrite works,ac_cv_pwrite,[ PHP_DOES_PWRITE_WORK if test "$ac_cv_pwrite" = "no"; then PHP_DOES_PWRITE_WORK([ssize_t pwrite(int, void *, size_t, off64_t);]) if test "$ac_cv_pwrite" = "yes"; then ac_cv_pwrite=64 fi fi ]) if test "$ac_cv_pwrite" != "no"; then AC_DEFINE(HAVE_PWRITE, 1, [ ]) if test "$ac_cv_pwrite" = "64"; then AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default]) fi fi ]) dnl dnl PHP_PREAD_TEST dnl AC_DEFUN([PHP_PREAD_TEST],[ AC_CACHE_CHECK(whether pread works,ac_cv_pread,[ PHP_DOES_PREAD_WORK if test "$ac_cv_pread" = "no"; then PHP_DOES_PREAD_WORK([ssize_t pread(int, void *, size_t, off64_t);]) if test "$ac_cv_pread" = "yes"; then ac_cv_pread=64 fi fi ]) if test "$ac_cv_pread" != "no"; then AC_DEFINE(HAVE_PREAD, 1, [ ]) if test "$ac_cv_pread" = "64"; then AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default]) fi fi ]) dnl dnl PHP_MISSING_TIME_R_DECL dnl AC_DEFUN([PHP_MISSING_TIME_R_DECL],[ AC_MSG_CHECKING([for missing declarations of reentrant functions]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct tm *(*func)() = localtime_r]])],[ : ],[ AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared]) ]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[struct tm *(*func)() = gmtime_r]])],[ : ],[ AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared]) ]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[char *(*func)() = asctime_r]])],[ : ],[ AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared]) ]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[char *(*func)() = ctime_r]])],[ : ],[ AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared]) ]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[char *(*func)() = strtok_r]])],[ : ],[ AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared]) ]) AC_MSG_RESULT([done]) ]) dnl dnl PHP_STRUCT_FLOCK dnl AC_DEFUN([PHP_STRUCT_FLOCK],[ AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock, AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include ]], [[struct flock x;]])],[ ac_cv_struct_flock=yes ],[ ac_cv_struct_flock=no ]) ) if test "$ac_cv_struct_flock" = "yes" ; then AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock]) fi ]) dnl dnl PHP_MISSING_FCLOSE_DECL dnl dnl See if we have broken header files like SunOS has. dnl AC_DEFUN([PHP_MISSING_FCLOSE_DECL],[ AC_MSG_CHECKING([for fclose declaration]) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include ]], [[int (*func)() = fclose]])],[ AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ]) AC_MSG_RESULT([ok]) ],[ AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ]) AC_MSG_RESULT([missing]) ]) ]) dnl dnl PHP_SOCKADDR_CHECKS dnl AC_DEFUN([PHP_SOCKADDR_CHECKS], [ dnl Check for struct sockaddr_storage exists. AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_sockaddr_storage, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #include ]], [[struct sockaddr_storage s; s]])], [ac_cv_sockaddr_storage=yes], [ac_cv_sockaddr_storage=no]) ]) if test "$ac_cv_sockaddr_storage" = "yes"; then AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1, [Whether you have struct sockaddr_storage]) fi dnl Check if field sa_len exists in struct sockaddr. AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include #include ]], [[static struct sockaddr sa; int n = (int) sa.sa_len; return n;]])], [ac_cv_sockaddr_sa_len=yes], [ac_cv_sockaddr_sa_len=no]) ]) if test "$ac_cv_sockaddr_sa_len" = "yes"; then AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has field sa_len]) fi ]) dnl dnl PHP_EBCDIC dnl AC_DEFUN([PHP_EBCDIC], [ AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ int main(void) { return (unsigned char)'A' != (unsigned char)0xC1; } ]])],[ ac_cv_ebcdic=yes ],[ ac_cv_ebcdic=no ],[ ac_cv_ebcdic=no ])]) if test "$ac_cv_ebcdic" = "yes"; then AC_MSG_ERROR([PHP does not support EBCDIC targets]) fi ]) dnl dnl PHP_BROKEN_GETCWD dnl dnl Some systems, notably Solaris, cause getcwd() or realpath to fail if a dnl component of the path has execute but not read permissions. dnl AC_DEFUN([PHP_BROKEN_GETCWD],[ AC_MSG_CHECKING([for broken getcwd]) os=`uname -sr 2>/dev/null` case $os in SunOS*[)] AC_DEFINE(HAVE_BROKEN_GETCWD,1, [Define if system has broken getcwd]) AC_MSG_RESULT([yes]);; *[)] AC_MSG_RESULT([no]);; esac ]) dnl dnl PHP_BROKEN_GCC_STRLEN_OPT dnl dnl Early releases of GCC 8 shipped with a strlen() optimization bug, so they dnl didn't properly handle the `char val[1]` struct hack. See bug #76510. dnl AC_DEFUN([PHP_BROKEN_GCC_STRLEN_OPT], [ AC_CACHE_CHECK([for broken gcc optimize-strlen],ac_cv_have_broken_gcc_strlen_opt,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include #include #include struct s { int i; char c[1]; }; int main() { struct s *s = malloc(sizeof(struct s) + 3); s->i = 3; strcpy(s->c, "foo"); return strlen(s->c+1) == 2; } ]])],[ ac_cv_have_broken_gcc_strlen_opt=yes ],[ ac_cv_have_broken_gcc_strlen_opt=no ],[ ac_cv_have_broken_gcc_strlen_opt=no ])]) if test "$ac_cv_have_broken_gcc_strlen_opt" = "yes"; then CFLAGS="$CFLAGS -fno-optimize-strlen" fi ]) dnl dnl PHP_FOPENCOOKIE dnl AC_DEFUN([PHP_FOPENCOOKIE], [ AC_CHECK_FUNC(fopencookie, [have_glibc_fopencookie=yes]) if test "$have_glibc_fopencookie" = "yes"; then dnl This comes in two flavors: newer glibcs (since 2.1.2?) have a type called dnl cookie_io_functions_t. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define _GNU_SOURCE #include ]], [[cookie_io_functions_t cookie;]])],[have_cookie_io_functions_t=yes],[]) if test "$have_cookie_io_functions_t" = "yes"; then cookie_io_functions_t=cookie_io_functions_t have_fopen_cookie=yes dnl Even newer glibcs have a different seeker definition. AC_RUN_IFELSE([AC_LANG_SOURCE([[ #define _GNU_SOURCE #include #include struct cookiedata { off64_t pos; }; ssize_t reader(void *cookie, char *buffer, size_t size) { return size; } ssize_t writer(void *cookie, const char *buffer, size_t size) { return size; } int closer(void *cookie) { return 0; } int seeker(void *cookie, off64_t *position, int whence) { ((struct cookiedata*)cookie)->pos = *position; return 0; } cookie_io_functions_t funcs = {reader, writer, seeker, closer}; int main() { struct cookiedata g = { 0 }; FILE *fp = fopencookie(&g, "r", funcs); if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192) return 0; return 1; } ]])], [ cookie_io_functions_use_off64_t=yes ], [ cookie_io_functions_use_off64_t=no ], [ dnl Cross compilation. case $host_alias in *linux*) cookie_io_functions_use_off64_t=yes ;; *) cookie_io_functions_use_off64_t=no ;; esac ]) else dnl Older glibc versions (up to 2.1.2?) call it _IO_cookie_io_functions_t. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define _GNU_SOURCE #include ]], [[_IO_cookie_io_functions_t cookie;]])], [have_IO_cookie_io_functions_t=yes], []) if test "$have_cookie_io_functions_t" = "yes" ; then cookie_io_functions_t=_IO_cookie_io_functions_t have_fopen_cookie=yes fi fi if test "$have_fopen_cookie" = "yes" ; then AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ]) AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ]) if test "$cookie_io_functions_use_off64_t" = "yes" ; then AC_DEFINE(COOKIE_SEEKER_USES_OFF64_T, 1, [ ]) fi fi fi ]) dnl ---------------------------------------------------------------------------- dnl Library/function existence and build sanity checks. dnl ---------------------------------------------------------------------------- dnl dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]]) dnl dnl Wrapper for AC_CHECK_LIB. dnl AC_DEFUN([PHP_CHECK_LIBRARY], [ save_old_LDFLAGS=$LDFLAGS ac_stuff="$5" save_ext_shared=$ext_shared ext_shared=yes PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS) AC_CHECK_LIB([$1],[$2],[ LDFLAGS=$save_old_LDFLAGS ext_shared=$save_ext_shared $3 ],[ LDFLAGS=$save_old_LDFLAGS ext_shared=$save_ext_shared unset ac_cv_lib_$1[]_$2 $4 ])dnl ]) dnl dnl PHP_CHECK_FRAMEWORK(framework, function [, action-found [, action-not-found ]]) dnl dnl El cheapo wrapper for AC_CHECK_LIB. dnl AC_DEFUN([PHP_CHECK_FRAMEWORK], [ save_old_LDFLAGS=$LDFLAGS LDFLAGS="-framework $1 $LDFLAGS" dnl Supplying "c" to AC_CHECK_LIB is technically cheating, but rewriting dnl AC_CHECK_LIB is overkill and this only affects the "checking.." output dnl anyway. AC_CHECK_LIB(c,[$2],[ LDFLAGS=$save_old_LDFLAGS $3 ],[ LDFLAGS=$save_old_LDFLAGS $4 ]) ]) dnl dnl PHP_CHECK_FUNC_LIB(func, libs) dnl dnl This macro checks whether 'func' or '__func' exists in the specified dnl library. Defines HAVE_func and HAVE_library if found and adds the library to dnl LIBS. This should be called in the ACTION-IF-NOT-FOUND part of dnl PHP_CHECK_FUNC. dnl dnl autoconf undefines the builtin "shift" :-( dnl If possible, we use the builtin shift anyway, otherwise we use the ubercool dnl definition that has been tested so far with FreeBSD/GNU m4. dnl ifdef([builtin],[builtin(define, phpshift, [builtin(shift, $@)])],[ define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,])))])]) ]) dnl dnl PHP_CHECK_FUNC_LIB dnl AC_DEFUN([PHP_CHECK_FUNC_LIB],[ ifelse($2,,:,[ unset ac_cv_lib_$2[]_$1 unset ac_cv_lib_$2[]___$1 unset found AC_CHECK_LIB($2, $1, [found=yes], [ AC_CHECK_LIB($2, __$1, [found=yes], [found=no]) ]) if test "$found" = "yes"; then ac_libs=$LIBS LIBS="$LIBS -l$2" AC_RUN_IFELSE([AC_LANG_SOURCE([[int main() { return (0); }]])],[found=yes],[found=no],[ dnl Cross compilation. found=yes ]) LIBS=$ac_libs fi if test "$found" = "yes"; then PHP_ADD_LIBRARY($2) PHP_DEF_HAVE($1) PHP_DEF_HAVE(lib$2) ac_cv_func_$1=yes else PHP_CHECK_FUNC_LIB($1,phpshift(phpshift($@))) fi ]) ]) dnl dnl PHP_CHECK_FUNC(func, ...) dnl dnl This macro checks whether 'func' or '__func' exists in the default libraries dnl and as a fall back in the specified library. Defines HAVE_func and dnl HAVE_library if found and adds the library to LIBS. dnl AC_DEFUN([PHP_CHECK_FUNC],[ unset ac_cv_func_$1 unset ac_cv_func___$1 unset found AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ]) case $found in yes[)] PHP_DEF_HAVE($1) ac_cv_func_$1=yes ;; ifelse($#,1,,[ *[)] PHP_CHECK_FUNC_LIB($@) ;; ]) esac ]) dnl dnl PHP_TEST_BUILD(function, action-if-ok, action-if-not-ok [, extra-libs [, extra-source]]) dnl dnl This macro checks whether build works and given function exists. dnl AC_DEFUN([PHP_TEST_BUILD], [ old_LIBS=$LIBS LIBS="$4 $LIBS" AC_LINK_IFELSE([AC_LANG_SOURCE([[ $5 char $1(); int main() { $1(); return 0; } ]])],[ LIBS=$old_LIBS $2 ],[ LIBS=$old_LIBS $3 ]) ]) dnl ---------------------------------------------------------------------------- dnl Platform characteristics checks. dnl ---------------------------------------------------------------------------- dnl dnl PHP_SHLIB_SUFFIX_NAMES dnl dnl Determines link library suffix SHLIB_SUFFIX_NAME which can be: .so, .sl or dnl .dylib dnl dnl Determines shared library suffix SHLIB_DL_SUFFIX_NAME suffix can be: .so or dnl .sl dnl AC_DEFUN([PHP_SHLIB_SUFFIX_NAMES],[ AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl PHP_SUBST_OLD(SHLIB_SUFFIX_NAME) PHP_SUBST_OLD(SHLIB_DL_SUFFIX_NAME) SHLIB_SUFFIX_NAME=so SHLIB_DL_SUFFIX_NAME=$SHLIB_SUFFIX_NAME case $host_alias in *hpux*[)] SHLIB_SUFFIX_NAME=sl SHLIB_DL_SUFFIX_NAME=sl ;; *darwin*[)] SHLIB_SUFFIX_NAME=dylib SHLIB_DL_SUFFIX_NAME=so ;; esac ]) dnl dnl PHP_C_BIGENDIAN dnl dnl Replacement macro for AC_C_BIGENDIAN. dnl AC_DEFUN([PHP_C_BIGENDIAN], [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian_php, [ ac_cv_c_bigendian_php=unknown AC_RUN_IFELSE([AC_LANG_SOURCE([[ int main(void) { short one = 1; char *cp = (char *)&one; if (*cp == 0) { return(0); } else { return(1); } } ]])], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown]) ]) if test $ac_cv_c_bigendian_php = yes; then AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word]) fi ]) dnl ---------------------------------------------------------------------------- dnl Checks for programs: PHP_PROG_. dnl ---------------------------------------------------------------------------- dnl dnl PHP_PROG_SENDMAIL dnl dnl Search for the sendmail binary. dnl AC_DEFUN([PHP_PROG_SENDMAIL], [ PHP_ALT_PATH=/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib AC_PATH_PROG(PROG_SENDMAIL, sendmail, /usr/sbin/sendmail, $PATH:$PHP_ALT_PATH) PHP_SUBST(PROG_SENDMAIL) ]) dnl dnl PHP_PROG_AWK dnl dnl Some vendors force mawk before gawk; mawk is broken so we don't like that. dnl AC_DEFUN([PHP_PROG_AWK], [ AC_CHECK_PROGS(AWK, gawk nawk awk mawk, bork, /usr/xpg4/bin/:$PATH) case "$AWK" in *mawk) AC_MSG_WARN([mawk is known to have problems on some systems. You should install GNU awk]) ;; *gawk) ;; bork) AC_MSG_ERROR([Could not find awk; Install GNU awk]) ;; *) AC_MSG_CHECKING([if $AWK is broken]) if ! $AWK 'function foo() {}' >/dev/null 2>&1 ; then AC_MSG_RESULT([yes]) AC_MSG_ERROR([You should install GNU awk]) else AC_MSG_RESULT([no]) fi ;; esac PHP_SUBST(AWK) ]) dnl dnl PHP_PROG_BISON([MIN-VERSION], [EXCLUDED-VERSION...]) dnl dnl Search for bison and optionally check if version is at least the minimum dnl required version MIN-VERSION and doesn't match any of the blank separated dnl list of excluded versions EXCLUDED-VERSION (for example "3.0 3.2"). dnl AC_DEFUN([PHP_PROG_BISON], [ AC_CHECK_PROG(YACC, bison, bison) ifelse($1,,php_bison_required_version='',php_bison_required_version="$1") ifelse($2,,php_bison_excluded_versions='none',php_bison_excluded_versions="$2") if test -n "$YACC"; then AC_MSG_CHECKING([for bison version]) php_bison_version=$($YACC --version 2> /dev/null | grep 'GNU Bison' | cut -d ' ' -f 4 | tr -d a-z) if test -z "$php_bison_version"; then php_bison_version=0.0.0 fi ac_IFS=$IFS; IFS="." set $php_bison_version IFS=$ac_IFS php_bison_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` php_bison_branch="[$]1.[$]2" php_bison_check=ok if test -z "$php_bison_required_version" && test -z "$php_bison_num"; then php_bison_check=invalid elif test -n "$php_bison_required_version"; then ac_IFS=$IFS; IFS="." set $php_bison_required_version IFS=$ac_IFS php_bison_required_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` php_bison_required_version="$php_bison_required_version or later" if test -z "$php_bison_num" || test "$php_bison_num" -lt "$php_bison_required_num"; then php_bison_check=invalid fi fi for php_bison_check_version in $php_bison_excluded_versions; do if test "$php_bison_version" = "$php_bison_check_version" || test "$php_bison_branch" = "$php_bison_check_version"; then php_bison_check=invalid break fi done if test "$php_bison_check" != "invalid"; then PHP_SUBST_OLD([YFLAGS], [-Wall]) AC_MSG_RESULT([$php_bison_version (ok)]) else AC_MSG_RESULT([$php_bison_version]) fi fi case $php_bison_check in ""|invalid[)] if test ! -f "$abs_srcdir/Zend/zend_language_parser.h" || test ! -f "$abs_srcdir/Zend/zend_language_parser.c"; then AC_MSG_ERROR([bison $php_bison_required_version is required to generate PHP parsers (excluded versions: $php_bison_excluded_versions).]) fi YACC="exit 0;" ;; esac PHP_SUBST(YACC) ]) dnl dnl PHP_PROG_RE2C([MIN-VERSION]) dnl dnl Search for the re2c and optionally check if version is at least the minimum dnl required version MIN-VERSION. dnl AC_DEFUN([PHP_PROG_RE2C],[ AC_CHECK_PROG(RE2C, re2c, re2c) ifelse($1,,php_re2c_required_version='',php_re2c_required_version="$1") if test -n "$RE2C"; then AC_MSG_CHECKING([for re2c version]) php_re2c_version=$($RE2C --version | cut -d ' ' -f 2 2>/dev/null) if test -z "$php_re2c_version"; then php_re2c_version=0.0.0 fi ac_IFS=$IFS; IFS="." set $php_re2c_version IFS=$ac_IFS php_re2c_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` php_re2c_check=ok if test -z "$php_re2c_required_version" && test -z "$php_re2c_num"; then php_re2c_check=invalid elif test -n "$php_re2c_required_version"; then ac_IFS=$IFS; IFS="." set $php_re2c_required_version IFS=$ac_IFS php_re2c_required_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` php_re2c_required_version="$php_re2c_required_version or later" if test -z "$php_re2c_num" || test "$php_re2c_num" -lt "$php_re2c_required_num"; then php_re2c_check=invalid fi fi if test "$php_re2c_check" != "invalid"; then AC_MSG_RESULT([$php_re2c_version (ok)]) else AC_MSG_RESULT([$php_re2c_version]) fi fi case $php_re2c_check in ""|invalid[)] if test ! -f "$abs_srcdir/Zend/zend_language_scanner.c"; then AC_MSG_ERROR([re2c $php_re2c_required_version is required to generate PHP lexers.]) fi RE2C="exit 0;" ;; esac PHP_SUBST(RE2C) ]) AC_DEFUN([PHP_PROG_PHP],[ AC_CHECK_PROG(PHP, php, php) if test -n "$PHP"; then AC_MSG_CHECKING([for php version]) php_version=$($PHP -v | head -n1 | cut -d ' ' -f 2 | cut -d '-' -f 1) if test -z "$php_version"; then php_version=0.0.0 fi ac_IFS=$IFS; IFS="." set $php_version IFS=$ac_IFS php_version_num=`expr [$]{1:-0} \* 10000 + [$]{2:-0} \* 100 + [$]{3:-0}` dnl Minimum supported version for gen_stubs.php is PHP 7.1. if test "$php_version_num" -lt 70100; then AC_MSG_RESULT([$php_version (too old)]) unset PHP else AC_MSG_RESULT([$php_version (ok)]) fi fi PHP_SUBST(PHP) ]) dnl ---------------------------------------------------------------------------- dnl Common setup macros: PHP_SETUP_ dnl ---------------------------------------------------------------------------- dnl dnl PHP_SETUP_ICU([shared-add]) dnl dnl Common setup macro for ICU. dnl AC_DEFUN([PHP_SETUP_ICU],[ PKG_CHECK_MODULES([ICU], [icu-uc >= 50.1 icu-io icu-i18n]) PHP_EVAL_INCLINE($ICU_CFLAGS) PHP_EVAL_LIBLINE($ICU_LIBS, $1) ICU_CFLAGS="$ICU_CFLAGS -DU_NO_DEFAULT_INCLUDE_UTF_HEADERS=1" ICU_CXXFLAGS="$ICU_CXXFLAGS -DUNISTR_FROM_CHAR_EXPLICIT=explicit -DUNISTR_FROM_STRING_EXPLICIT=explicit" if test "$PKG_CONFIG icu-io --atleast-version=60"; then ICU_CFLAGS="$ICU_CFLAGS -DU_HIDE_OBSOLETE_UTF_OLD_H=1" fi ]) dnl dnl PHP_SETUP_OPENSSL(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for openssl. dnl AC_DEFUN([PHP_SETUP_OPENSSL],[ found_openssl=no PKG_CHECK_MODULES([OPENSSL], [openssl >= 1.0.2], [found_openssl=yes]) if test "$found_openssl" = "yes"; then PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1) PHP_EVAL_INCLINE($OPENSSL_CFLAGS) ifelse([$2],[],:,[$2]) ifelse([$3],[],,[else $3]) fi ]) dnl dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for iconv. dnl AC_DEFUN([PHP_SETUP_ICONV], [ found_iconv=no unset ICONV_DIR dnl Check libc first if no path is provided in --with-iconv. if test "$PHP_ICONV" = "yes"; then dnl Reset LIBS temporarily as it may have already been included -liconv in. LIBS_save="$LIBS" LIBS= AC_CHECK_FUNC(iconv, [ found_iconv=yes ],[ AC_CHECK_FUNC(libiconv,[ AC_DEFINE(HAVE_LIBICONV, 1, [ ]) found_iconv=yes ]) ]) LIBS="$LIBS_save" fi dnl Check external libs for iconv funcs. if test "$found_iconv" = "no"; then for i in $PHP_ICONV /usr/local /usr; do if test -r $i/include/gnu-libiconv/iconv.h; then ICONV_DIR=$i ICONV_INCLUDE_DIR=$i/include/gnu-libiconv iconv_lib_name=iconv break elif test -r $i/include/iconv.h; then ICONV_DIR=$i ICONV_INCLUDE_DIR=$i/include iconv_lib_name=iconv break fi done if test -z "$ICONV_DIR"; then AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=]) fi if test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.a || test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME || test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.tbd then PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [ found_iconv=yes AC_DEFINE(HAVE_LIBICONV,1,[ ]) AC_DEFINE([ICONV_ALIASED_LIBICONV],1,[iconv() is aliased to libiconv() in -liconv]) ], [ PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [ found_iconv=yes ], [], [ -L$ICONV_DIR/$PHP_LIBDIR ]) ], [ -L$ICONV_DIR/$PHP_LIBDIR ]) fi fi if test "$found_iconv" = "yes"; then AC_DEFINE(HAVE_ICONV,1,[ ]) if test -n "$ICONV_DIR"; then PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/$PHP_LIBDIR, $1) PHP_ADD_INCLUDE($ICONV_INCLUDE_DIR) fi $2 ifelse([$3],[],,[else $3]) fi ]) dnl dnl PHP_SETUP_LIBXML(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for libxml. dnl AC_DEFUN([PHP_SETUP_LIBXML], [ PHP_EVAL_INCLINE($LIBXML_CFLAGS) PHP_EVAL_LIBLINE($LIBXML_LIBS, $1) AC_DEFINE(HAVE_LIBXML, 1, [ ]) $2 ]) dnl dnl PHP_SETUP_EXPAT([shared-add]) dnl dnl Common setup macro for expat. dnl AC_DEFUN([PHP_SETUP_EXPAT], [ PKG_CHECK_MODULES([EXPAT], [expat]) PHP_EVAL_INCLINE($EXPAT_CFLAGS) PHP_EVAL_LIBLINE($EXPAT_LIBS, $1) AC_DEFINE(HAVE_LIBEXPAT, 1, [ ]) ]) dnl ---------------------------------------------------------------------------- dnl Misc. macros dnl ---------------------------------------------------------------------------- dnl dnl PHP_INSTALL_HEADERS(path [, file ...]) dnl dnl PHP header files to be installed. dnl AC_DEFUN([PHP_INSTALL_HEADERS],[ ifelse([$2],[],[ for header_file in $1; do PHP_RUN_ONCE(INSTALLHEADERS, $header_file, [ INSTALL_HEADERS="$INSTALL_HEADERS $header_file" ]) done ], [ header_path=$1 for header_file in $2; do hp_hf="$header_path/$header_file" PHP_RUN_ONCE(INSTALLHEADERS, $hp_hf, [ INSTALL_HEADERS="$INSTALL_HEADERS $hp_hf" ]) done ]) ]) dnl dnl PHP_AP_EXTRACT_VERSION(/path/httpd) dnl dnl This macro is used to get a comparable version for Apache. dnl AC_DEFUN([PHP_AP_EXTRACT_VERSION],[ ac_output=`$1 -v 2>&1 | grep version | $SED -e 's/Oracle-HTTP-//'` ac_IFS=$IFS IFS="- /. " set $ac_output IFS=$ac_IFS APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6` ]) dnl dnl PHP_CONFIG_NICE(filename) dnl dnl This macro creates script file with given filename which includes the last dnl configure command run by user. This file is named 'config.nice' in PHP. dnl AC_DEFUN([PHP_CONFIG_NICE],[ AC_REQUIRE([AC_PROG_EGREP]) AC_REQUIRE([AC_PROG_SED]) PHP_SUBST_OLD(EGREP) PHP_SUBST_OLD(SED) test -f $1 && mv $1 $1.old rm -f $1.old cat >$1<> $1 if test `expr "X$ac_configure_args" : ".*${var}.*"` != 0; then clean_configure_args=$(echo $clean_configure_args | sed -e "s#'$var=$val'##") fi fi done echo "'[$]0' \\" >> $1 if test `expr " [$]0" : " '.*"` = 0; then CONFIGURE_COMMAND="$CONFIGURE_COMMAND '[$]0'" else CONFIGURE_COMMAND="$CONFIGURE_COMMAND [$]0" fi CONFIGURE_ARGS="$clean_configure_args" while test "X$CONFIGURE_ARGS" != "X"; do if CURRENT_ARG=`expr "X$CONFIGURE_ARGS" : "X *\('[[^']]*'\)"` then CONFIGURE_ARGS=`expr "X$CONFIGURE_ARGS" : "X *'[[^']]*' \(.*\)"` elif CURRENT_ARG=`expr "X$CONFIGURE_ARGS" : "X *\([[^ ]]*\)"` then CONFIGURE_ARGS=`expr "X$CONFIGURE_ARGS" : "X *[[^ ]]* \(.*\)"` CURRENT_ARG="'$CURRENT_ARG'" else break fi AS_ECHO(["$CURRENT_ARG \\"]) >>$1 CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS $CURRENT_ARG" done echo '"[$]@"' >> $1 chmod +x $1 CONFIGURE_COMMAND="$CONFIGURE_COMMAND $CONFIGURE_OPTIONS" PHP_SUBST_OLD(CONFIGURE_COMMAND) PHP_SUBST_OLD(CONFIGURE_OPTIONS) ]) dnl dnl PHP_CHECK_PDO_INCLUDES([found [, not-found]]) dnl AC_DEFUN([PHP_CHECK_PDO_INCLUDES],[ AC_CACHE_CHECK([for PDO includes], pdo_cv_inc_path, [ if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then pdo_cv_inc_path=$abs_srcdir/ext elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then pdo_cv_inc_path=$abs_srcdir/ext elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then pdo_cv_inc_path=$phpincludedir/ext fi ]) if test -n "$pdo_cv_inc_path"; then ifelse([$1],[],:,[$1]) else ifelse([$2],[],[AC_MSG_ERROR([Cannot find php_pdo_driver.h.])],[$2]) fi ]) dnl dnl PHP_DETECT_ICC dnl dnl Detect Intel C++ Compiler and unset $GCC if ICC found. dnl AC_DEFUN([PHP_DETECT_ICC], [ ICC="no" AC_MSG_CHECKING([for icc]) AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER], ICC="no" AC_MSG_RESULT([no]), ICC="yes" GCC="no" AC_MSG_RESULT([yes]) ) ]) dnl dnl PHP_DETECT_SUNCC dnl dnl Detect if the systems default compiler is suncc. We also set some useful dnl CFLAGS if the user didn't set any. dnl AC_DEFUN([PHP_DETECT_SUNCC],[ SUNCC="no" AC_MSG_CHECKING([for suncc]) AC_EGREP_CPP([^__SUNPRO_C], [__SUNPRO_C], SUNCC="no" AC_MSG_RESULT([no]), SUNCC="yes" GCC="no" test -n "$auto_cflags" && CFLAGS="-O -xs -xstrconst -zlazyload" GCC="" AC_MSG_RESULT([yes]) ) ]) dnl dnl PHP_CRYPT_R_STYLE dnl dnl Detect the style of crypt_r() if any is available. dnl See APR_CHECK_CRYPT_R_STYLE() for original version. dnl AC_DEFUN([PHP_CRYPT_R_STYLE], [ AC_CACHE_CHECK([which data struct is used by crypt_r], php_cv_crypt_r_style,[ php_cv_crypt_r_style=none AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define _REENTRANT 1 #include ]], [[ CRYPTD buffer; crypt_r("passwd", "hash", &buffer); ]])],[php_cv_crypt_r_style=cryptd],[]) if test "$php_cv_crypt_r_style" = "none"; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define _REENTRANT 1 #include ]],[[ struct crypt_data buffer; crypt_r("passwd", "hash", &buffer); ]])],[php_cv_crypt_r_style=struct_crypt_data],[]) fi if test "$php_cv_crypt_r_style" = "none"; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define _REENTRANT 1 #define _GNU_SOURCE #include ]],[[ struct crypt_data buffer; crypt_r("passwd", "hash", &buffer); ]])],[php_cv_crypt_r_style=struct_crypt_data_gnu_source],[]) fi if test "$php_cv_crypt_r_style" = "none"; then AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include #include ]],[[ struct crypt_data buffer; crypt_r("passwd", "hash", &buffer); ]])],[php_cv_crypt_r_style=struct_crypt_data],[]) fi ]) if test "$php_cv_crypt_r_style" = "cryptd"; then AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD]) fi if test "$php_cv_crypt_r_style" = "struct_crypt_data" -o "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data]) fi if test "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then AC_DEFINE(CRYPT_R_GNU_SOURCE, 1, [Define if struct crypt_data requires _GNU_SOURCE]) fi if test "$php_cv_crypt_r_style" = "none"; then AC_MSG_ERROR([Unable to detect data struct used by crypt_r]) fi ]) dnl dnl PHP_TEST_WRITE_STDOUT dnl AC_DEFUN([PHP_TEST_WRITE_STDOUT],[ AC_CACHE_CHECK(whether writing to stdout works,ac_cv_write_stdout,[ AC_RUN_IFELSE([AC_LANG_SOURCE([[ #ifdef HAVE_UNISTD_H #include #endif #define TEXT "This is the test message -- " int main() { int n; n = write(1, TEXT, sizeof(TEXT)-1); return (!(n == sizeof(TEXT)-1)); } ]])],[ ac_cv_write_stdout=yes ],[ ac_cv_write_stdout=no ],[ case $host_alias in *linux*) ac_cv_write_stdout=yes ;; *) ac_cv_write_stdout=no ;; esac ]) ]) if test "$ac_cv_write_stdout" = "yes"; then AC_DEFINE(PHP_WRITE_STDOUT, 1, [whether write(2) works]) fi ]) dnl dnl PHP_INIT_DTRACE(providerdesc, header-file, sources [, module]) dnl AC_DEFUN([PHP_INIT_DTRACE],[ dnl Set paths properly when called from extension. case "$4" in ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir;; /*[)] ac_srcdir=`echo "$4"|cut -c 2-`"/"; ac_bdir=$ac_srcdir;; *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$4/";; esac dnl providerdesc. ac_provsrc=$1 old_IFS=[$]IFS IFS=. set $ac_provsrc ac_provobj=[$]1 IFS=$old_IFS dnl header-file. ac_hdrobj=$2 dnl Add providerdesc.o or .lo into global objects when needed. case $host_alias in *freebsd*) PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" PHP_LDFLAGS="$PHP_LDFLAGS -lelf" ;; *solaris*) PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" ;; *linux*) PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" ;; esac dnl DTrace objects. old_IFS=[$]IFS for ac_src in $3; do IFS=. set $ac_src ac_obj=[$]1 IFS=$old_IFS PHP_DTRACE_OBJS="[$]PHP_DTRACE_OBJS [$]ac_bdir[$]ac_obj.lo" done; case [$]php_sapi_module in shared[)] for ac_lo in $PHP_DTRACE_OBJS; do dtrace_objs="[$]dtrace_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`" done; ;; *[)] dtrace_objs='$(PHP_DTRACE_OBJS:.lo=.o)' ;; esac dnl Generate Makefile.objects entries. The empty $ac_provsrc command stops an dnl implicit circular dependency in GNU Make which causes the .d file to be dnl overwritten (Bug 61268). cat>>Makefile.objects< \$[]@ \$(PHP_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj EOF case $host_alias in *solaris*|*linux*|*freebsd*) dtrace_prov_name="`echo $ac_provsrc | $SED -e 's#\(.*\)\/##'`.o" dtrace_lib_dir="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/[^/]*#\1#'`/.libs" dtrace_d_obj="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/\([^/]*\)#\1/.libs/\2#'`.o" dtrace_nolib_objs='$(PHP_DTRACE_OBJS:.lo=.o)' for ac_lo in $PHP_DTRACE_OBJS; do dtrace_lib_objs="[$]dtrace_lib_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`" done; dnl Always attempt to create both PIC and non-PIC DTrace objects (Bug 63692) cat>>Makefile.objects< \$[]@ @test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\] echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\] else [\\] echo "pic_object='none'" >> \$[]@ [;\\] fi if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\] echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\] else [\\] echo "non_pic_object='none'" >> \$[]@ [;\\] fi EOF ;; *) cat>>Makefile.objects< #if HAVE_SYS_TYPES_H # include #endif ]) ]) dnl dnl PHP_CHECK_BUILTIN_EXPECT dnl AC_DEFUN([PHP_CHECK_BUILTIN_EXPECT], [ AC_MSG_CHECKING([for __builtin_expect]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_expect(1,1) ? 1 : 0; ]])], [ have_builtin_expect=1 AC_MSG_RESULT([yes]) ], [ have_builtin_expect=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_EXPECT], [$have_builtin_expect], [Whether the compiler supports __builtin_expect]) ]) dnl dnl PHP_CHECK_BUILTIN_CLZ dnl AC_DEFUN([PHP_CHECK_BUILTIN_CLZ], [ AC_MSG_CHECKING([for __builtin_clz]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_clz(1) ? 1 : 0; ]])], [ have_builtin_clz=1 AC_MSG_RESULT([yes]) ], [ have_builtin_clz=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZ], [$have_builtin_clz], [Whether the compiler supports __builtin_clz]) ]) dnl dnl PHP_CHECK_BUILTIN_CLZL dnl AC_DEFUN([PHP_CHECK_BUILTIN_CLZL], [ AC_MSG_CHECKING([for __builtin_clzl]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_clzl(1) ? 1 : 0; ]])], [ have_builtin_clzl=1 AC_MSG_RESULT([yes]) ], [ have_builtin_clzl=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZL], [$have_builtin_clzl], [Whether the compiler supports __builtin_clzl]) ]) dnl dnl PHP_CHECK_BUILTIN_CLZLL dnl AC_DEFUN([PHP_CHECK_BUILTIN_CLZLL], [ AC_MSG_CHECKING([for __builtin_clzll]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_clzll(1) ? 1 : 0; ]])], [ have_builtin_clzll=1 AC_MSG_RESULT([yes]) ], [ have_builtin_clzll=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZLL], [$have_builtin_clzll], [Whether the compiler supports __builtin_clzll]) ]) dnl dnl PHP_CHECK_BUILTIN_CTZL dnl AC_DEFUN([PHP_CHECK_BUILTIN_CTZL], [ AC_MSG_CHECKING([for __builtin_ctzl]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_ctzl(2L) ? 1 : 0; ]])], [ have_builtin_ctzl=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ctzl=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZL], [$have_builtin_ctzl], [Whether the compiler supports __builtin_ctzl]) ]) dnl dnl PHP_CHECK_BUILTIN_CTZLL dnl AC_DEFUN([PHP_CHECK_BUILTIN_CTZLL], [ AC_MSG_CHECKING([for __builtin_ctzll]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_ctzll(2LL) ? 1 : 0; ]])], [ have_builtin_ctzll=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ctzll=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZLL], [$have_builtin_ctzll], [Whether the compiler supports __builtin_ctzll]) ]) dnl dnl PHP_CHECK_BUILTIN_SMULL_OVERFLOW dnl AC_DEFUN([PHP_CHECK_BUILTIN_SMULL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_smull_overflow]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ long tmpvar; return __builtin_smull_overflow(3, 7, &tmpvar); ]])], [ have_builtin_smull_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_smull_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULL_OVERFLOW], [$have_builtin_smull_overflow], [Whether the compiler supports __builtin_smull_overflow]) ]) dnl dnl PHP_CHECK_BUILTIN_SMULLL_OVERFLOW dnl AC_DEFUN([PHP_CHECK_BUILTIN_SMULLL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_smulll_overflow]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ long long tmpvar; return __builtin_smulll_overflow(3, 7, &tmpvar); ]])], [ have_builtin_smulll_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_smulll_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULLL_OVERFLOW], [$have_builtin_smulll_overflow], [Whether the compiler supports __builtin_smulll_overflow]) ]) dnl dnl PHP_CHECK_BUILTIN_SADDL_OVERFLOW dnl AC_DEFUN([PHP_CHECK_BUILTIN_SADDL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_saddl_overflow]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ long tmpvar; return __builtin_saddl_overflow(3, 7, &tmpvar); ]])], [ have_builtin_saddl_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_saddl_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDL_OVERFLOW], [$have_builtin_saddl_overflow], [Whether the compiler supports __builtin_saddl_overflow]) ]) dnl dnl PHP_CHECK_BUILTIN_SADDLL_OVERFLOW dnl AC_DEFUN([PHP_CHECK_BUILTIN_SADDLL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_saddll_overflow]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ long long tmpvar; return __builtin_saddll_overflow(3, 7, &tmpvar); ]])], [ have_builtin_saddll_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_saddll_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDLL_OVERFLOW], [$have_builtin_saddll_overflow], [Whether the compiler supports __builtin_saddll_overflow]) ]) dnl dnl PHP_CHECK_BUILTIN_SSUBL_OVERFLOW dnl AC_DEFUN([PHP_CHECK_BUILTIN_SSUBL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_ssubl_overflow]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ long tmpvar; return __builtin_ssubl_overflow(3, 7, &tmpvar); ]])], [ have_builtin_ssubl_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ssubl_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBL_OVERFLOW], [$have_builtin_ssubl_overflow], [Whether the compiler supports __builtin_ssubl_overflow]) ]) dnl dnl PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW dnl AC_DEFUN([PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_ssubll_overflow]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ long long tmpvar; return __builtin_ssubll_overflow(3, 7, &tmpvar); ]])], [ have_builtin_ssubll_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ssubll_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW], [$have_builtin_ssubll_overflow], [Whether the compiler supports __builtin_ssubll_overflow]) ]) dnl dnl PHP_CHECK_BUILTIN_CPU_INIT dnl AC_DEFUN([PHP_CHECK_BUILTIN_CPU_INIT], [ AC_MSG_CHECKING([for __builtin_cpu_init]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ __builtin_cpu_init(); ]])], [ have_builtin_cpu_init=1 AC_MSG_RESULT([yes]) ], [ have_builtin_cpu_init=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CPU_INIT], [$have_builtin_cpu_init], [Whether the compiler supports __builtin_cpu_init]) ]) dnl dnl PHP_CHECK_BUILTIN_CPU_SUPPORTS dnl AC_DEFUN([PHP_CHECK_BUILTIN_CPU_SUPPORTS], [ AC_MSG_CHECKING([for __builtin_cpu_supports]) AC_LINK_IFELSE([AC_LANG_PROGRAM([], [[ return __builtin_cpu_supports("sse")? 1 : 0; ]])], [ have_builtin_cpu_supports=1 AC_MSG_RESULT([yes]) ], [ have_builtin_cpu_supports=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CPU_SUPPORTS], [$have_builtin_cpu_supports], [Whether the compiler supports __builtin_cpu_supports]) ]) dnl dnl PHP_PATCH_CONFIG_HEADERS([FILE]) dnl dnl PACKAGE_* symbols are automatically defined by Autoconf. When including dnl configuration header, warnings about redefined symbols are emitted for such dnl symbols if they are defined by multiple libraries. This disables all dnl PACKAGE_* symbols in the generated configuration header template FILE. For dnl example, main/php_config.h.in for PHP or config.h.in for PHP extensions. dnl AC_DEFUN([PHP_PATCH_CONFIG_HEADERS], [ AC_MSG_NOTICE([patching $1]) $SED -e 's/^#undef PACKAGE_[^ ]*/\/\* & \*\//g' < $srcdir/$1 \ > $srcdir/$1.tmp && mv $srcdir/$1.tmp $srcdir/$1 ]) PK!Cx88build/ax_check_compile_flag.m4nu[# =========================================================================== # https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html # =========================================================================== # # SYNOPSIS # # AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # # Check whether the given FLAG works with the current language's compiler # or gives an error. (Warnings, however, are ignored) # # ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on # success/failure. # # If EXTRA-FLAGS is defined, it is added to the current language's default # flags (e.g. CFLAGS) when the check is done. The check is thus made with # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # # INPUT gives an alternative input source to AC_COMPILE_IFELSE. # # NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this # macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. # # LICENSE # # Copyright (c) 2008 Guido U. Draheim # Copyright (c) 2011 Maarten Bosmans # # Copying and distribution of this file, with or without modification, are # permitted in any medium without royalty provided the copyright notice # and this notice are preserved. This file is offered as-is, without any # warranty. #serial 6 AC_DEFUN([AX_CHECK_COMPILE_FLAG], [AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], [AS_VAR_SET(CACHEVAR,[yes])], [AS_VAR_SET(CACHEVAR,[no])]) _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) AS_VAR_IF(CACHEVAR,yes, [m4_default([$2], :)], [m4_default([$3], :)]) AS_VAR_POPDEF([CACHEVAR])dnl ])dnl AX_CHECK_COMPILE_FLAGS PK!!]"&&Zend/zend_ini.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_INI_H #define ZEND_INI_H #define ZEND_INI_USER (1<<0) #define ZEND_INI_PERDIR (1<<1) #define ZEND_INI_SYSTEM (1<<2) #define ZEND_INI_ALL (ZEND_INI_USER|ZEND_INI_PERDIR|ZEND_INI_SYSTEM) #define ZEND_INI_MH(name) int name(zend_ini_entry *entry, zend_string *new_value, void *mh_arg1, void *mh_arg2, void *mh_arg3, int stage) #define ZEND_INI_DISP(name) void name(zend_ini_entry *ini_entry, int type) typedef struct _zend_ini_entry_def { const char *name; ZEND_INI_MH((*on_modify)); void *mh_arg1; void *mh_arg2; void *mh_arg3; const char *value; void (*displayer)(zend_ini_entry *ini_entry, int type); uint32_t value_length; uint16_t name_length; uint8_t modifiable; } zend_ini_entry_def; struct _zend_ini_entry { zend_string *name; ZEND_INI_MH((*on_modify)); void *mh_arg1; void *mh_arg2; void *mh_arg3; zend_string *value; zend_string *orig_value; void (*displayer)(zend_ini_entry *ini_entry, int type); int module_number; uint8_t modifiable; uint8_t orig_modifiable; uint8_t modified; }; BEGIN_EXTERN_C() ZEND_API int zend_ini_startup(void); ZEND_API int zend_ini_shutdown(void); ZEND_API int zend_ini_global_shutdown(void); ZEND_API int zend_ini_deactivate(void); ZEND_API void zend_ini_dtor(HashTable *ini_directives); ZEND_API int zend_copy_ini_directives(void); ZEND_API void zend_ini_sort_entries(void); ZEND_API int zend_register_ini_entries(const zend_ini_entry_def *ini_entry, int module_number); ZEND_API void zend_unregister_ini_entries(int module_number); ZEND_API void zend_ini_refresh_caches(int stage); ZEND_API int zend_alter_ini_entry(zend_string *name, zend_string *new_value, int modify_type, int stage); ZEND_API int zend_alter_ini_entry_ex(zend_string *name, zend_string *new_value, int modify_type, int stage, int force_change); ZEND_API int zend_alter_ini_entry_chars(zend_string *name, const char *value, size_t value_length, int modify_type, int stage); ZEND_API int zend_alter_ini_entry_chars_ex(zend_string *name, const char *value, size_t value_length, int modify_type, int stage, int force_change); ZEND_API int zend_restore_ini_entry(zend_string *name, int stage); ZEND_API void display_ini_entries(zend_module_entry *module); ZEND_API zend_long zend_ini_long(char *name, size_t name_length, int orig); ZEND_API double zend_ini_double(char *name, size_t name_length, int orig); ZEND_API char *zend_ini_string(char *name, size_t name_length, int orig); ZEND_API char *zend_ini_string_ex(char *name, size_t name_length, int orig, zend_bool *exists); ZEND_API zend_string *zend_ini_get_value(zend_string *name); ZEND_API zend_bool zend_ini_parse_bool(zend_string *str); ZEND_API int zend_ini_register_displayer(char *name, uint32_t name_length, void (*displayer)(zend_ini_entry *ini_entry, int type)); ZEND_API ZEND_INI_DISP(zend_ini_boolean_displayer_cb); ZEND_API ZEND_INI_DISP(zend_ini_color_displayer_cb); ZEND_API ZEND_INI_DISP(display_link_numbers); END_EXTERN_C() #define ZEND_INI_BEGIN() static const zend_ini_entry_def ini_entries[] = { #define ZEND_INI_END() { NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, 0} }; #define ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, displayer) \ { name, on_modify, arg1, arg2, arg3, default_value, displayer, sizeof(default_value)-1, sizeof(name)-1, modifiable }, #define ZEND_INI_ENTRY3(name, default_value, modifiable, on_modify, arg1, arg2, arg3) \ ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, arg3, NULL) #define ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, displayer) \ ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL, displayer) #define ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, arg1, arg2) \ ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, arg1, arg2, NULL) #define ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, displayer) \ ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, arg1, NULL, NULL, displayer) #define ZEND_INI_ENTRY1(name, default_value, modifiable, on_modify, arg1) \ ZEND_INI_ENTRY1_EX(name, default_value, modifiable, on_modify, arg1, NULL) #define ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, displayer) \ ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, NULL, NULL, NULL, displayer) #define ZEND_INI_ENTRY(name, default_value, modifiable, on_modify) \ ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, NULL) #ifdef ZTS #define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id) #define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \ ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, displayer) #define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr##_id, NULL, zend_ini_boolean_displayer_cb) #else #define STD_ZEND_INI_ENTRY(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ ZEND_INI_ENTRY2(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr) #define STD_ZEND_INI_ENTRY_EX(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr, displayer) \ ZEND_INI_ENTRY2_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, displayer) #define STD_ZEND_INI_BOOLEAN(name, default_value, modifiable, on_modify, property_name, struct_type, struct_ptr) \ ZEND_INI_ENTRY3_EX(name, default_value, modifiable, on_modify, (void *) XtOffsetOf(struct_type, property_name), (void *) &struct_ptr, NULL, zend_ini_boolean_displayer_cb) #endif #define INI_INT(name) zend_ini_long((name), sizeof(name)-1, 0) #define INI_FLT(name) zend_ini_double((name), sizeof(name)-1, 0) #define INI_STR(name) zend_ini_string_ex((name), sizeof(name)-1, 0, NULL) #define INI_BOOL(name) ((zend_bool) INI_INT(name)) #define INI_ORIG_INT(name) zend_ini_long((name), sizeof(name)-1, 1) #define INI_ORIG_FLT(name) zend_ini_double((name), sizeof(name)-1, 1) #define INI_ORIG_STR(name) zend_ini_string((name), sizeof(name)-1, 1) #define INI_ORIG_BOOL(name) ((zend_bool) INI_ORIG_INT(name)) #define REGISTER_INI_ENTRIES() zend_register_ini_entries(ini_entries, module_number) #define UNREGISTER_INI_ENTRIES() zend_unregister_ini_entries(module_number) #define DISPLAY_INI_ENTRIES() display_ini_entries(zend_module) #define REGISTER_INI_DISPLAYER(name, displayer) zend_ini_register_displayer((name), sizeof(name)-1, displayer) #define REGISTER_INI_BOOLEAN(name) REGISTER_INI_DISPLAYER(name, zend_ini_boolean_displayer_cb) /* Standard message handlers */ BEGIN_EXTERN_C() ZEND_API ZEND_INI_MH(OnUpdateBool); ZEND_API ZEND_INI_MH(OnUpdateLong); ZEND_API ZEND_INI_MH(OnUpdateLongGEZero); ZEND_API ZEND_INI_MH(OnUpdateReal); ZEND_API ZEND_INI_MH(OnUpdateString); ZEND_API ZEND_INI_MH(OnUpdateStringUnempty); END_EXTERN_C() #define ZEND_INI_DISPLAY_ORIG 1 #define ZEND_INI_DISPLAY_ACTIVE 2 #define ZEND_INI_STAGE_STARTUP (1<<0) #define ZEND_INI_STAGE_SHUTDOWN (1<<1) #define ZEND_INI_STAGE_ACTIVATE (1<<2) #define ZEND_INI_STAGE_DEACTIVATE (1<<3) #define ZEND_INI_STAGE_RUNTIME (1<<4) #define ZEND_INI_STAGE_HTACCESS (1<<5) #define ZEND_INI_STAGE_IN_REQUEST (ZEND_INI_STAGE_ACTIVATE|ZEND_INI_STAGE_DEACTIVATE|ZEND_INI_STAGE_RUNTIME|ZEND_INI_STAGE_HTACCESS) /* INI parsing engine */ typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, zval *arg3, int callback_type, void *arg); BEGIN_EXTERN_C() ZEND_API int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg); ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int scanner_mode, zend_ini_parser_cb_t ini_parser_cb, void *arg); END_EXTERN_C() /* INI entries */ #define ZEND_INI_PARSER_ENTRY 1 /* Normal entry: foo = bar */ #define ZEND_INI_PARSER_SECTION 2 /* Section: [foobar] */ #define ZEND_INI_PARSER_POP_ENTRY 3 /* Offset entry: foo[] = bar */ typedef struct _zend_ini_parser_param { zend_ini_parser_cb_t ini_parser_cb; void *arg; } zend_ini_parser_param; #endif /* ZEND_INI_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!,KZend/zend_objects.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_OBJECTS_H #define ZEND_OBJECTS_H #include "zend.h" BEGIN_EXTERN_C() ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce); ZEND_API zend_object* ZEND_FASTCALL zend_objects_new(zend_class_entry *ce); ZEND_API void ZEND_FASTCALL zend_objects_clone_members(zend_object *new_object, zend_object *old_object); ZEND_API void zend_object_std_dtor(zend_object *object); ZEND_API void zend_objects_destroy_object(zend_object *object); ZEND_API zend_object *zend_objects_clone_obj(zval *object); END_EXTERN_C() #endif /* ZEND_OBJECTS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!(kkZend/zend_config.hnu[#include <../main/php_config.h> #if defined(APACHE) && defined(PHP_API_VERSION) #undef HAVE_DLFCN_H #endif PK! Zend/zend_stack.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_STACK_H #define ZEND_STACK_H typedef struct _zend_stack { int size, top, max; void *elements; } zend_stack; #define STACK_BLOCK_SIZE 16 BEGIN_EXTERN_C() ZEND_API int zend_stack_init(zend_stack *stack, int size); ZEND_API int zend_stack_push(zend_stack *stack, const void *element); ZEND_API void *zend_stack_top(const zend_stack *stack); ZEND_API int zend_stack_del_top(zend_stack *stack); ZEND_API int zend_stack_int_top(const zend_stack *stack); ZEND_API int zend_stack_is_empty(const zend_stack *stack); ZEND_API int zend_stack_destroy(zend_stack *stack); ZEND_API void *zend_stack_base(const zend_stack *stack); ZEND_API int zend_stack_count(const zend_stack *stack); ZEND_API void zend_stack_apply(zend_stack *stack, int type, int (*apply_function)(void *element)); ZEND_API void zend_stack_apply_with_argument(zend_stack *stack, int type, int (*apply_function)(void *element, void *arg), void *arg); ZEND_API void zend_stack_clean(zend_stack *stack, void (*func)(void *), zend_bool free_elements); END_EXTERN_C() #define ZEND_STACK_APPLY_TOPDOWN 1 #define ZEND_STACK_APPLY_BOTTOMUP 2 #endif /* ZEND_STACK_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!A  Zend/zend_iterators.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | | Marcus Boerger | +----------------------------------------------------------------------+ */ /* These iterators were designed to operate within the foreach() * structures provided by the engine, but could be extended for use * with other iterative engine opcodes. * These methods have similar semantics to the zend_hash API functions * with similar names. * */ typedef struct _zend_object_iterator zend_object_iterator; typedef struct _zend_object_iterator_funcs { /* release all resources associated with this iterator instance */ void (*dtor)(zend_object_iterator *iter); /* check for end of iteration (FAILURE or SUCCESS if data is valid) */ int (*valid)(zend_object_iterator *iter); /* fetch the item data for the current element */ zval *(*get_current_data)(zend_object_iterator *iter); /* fetch the key for the current element (optional, may be NULL). The key * should be written into the provided zval* using the ZVAL_* macros. If * this handler is not provided auto-incrementing integer keys will be * used. */ void (*get_current_key)(zend_object_iterator *iter, zval *key); /* step forwards to next element */ void (*move_forward)(zend_object_iterator *iter); /* rewind to start of data (optional, may be NULL) */ void (*rewind)(zend_object_iterator *iter); /* invalidate current value/key (optional, may be NULL) */ void (*invalidate_current)(zend_object_iterator *iter); } zend_object_iterator_funcs; struct _zend_object_iterator { zend_object std; zval data; const zend_object_iterator_funcs *funcs; zend_ulong index; /* private to fe_reset/fe_fetch opcodes */ }; typedef struct _zend_class_iterator_funcs { union _zend_function *zf_new_iterator; union _zend_function *zf_valid; union _zend_function *zf_current; union _zend_function *zf_key; union _zend_function *zf_next; union _zend_function *zf_rewind; } zend_class_iterator_funcs; BEGIN_EXTERN_C() /* given a zval, returns stuff that can be used to iterate it. */ ZEND_API zend_object_iterator* zend_iterator_unwrap(zval *array_ptr); /* given an iterator, wrap it up as a zval for use by the engine opcodes */ ZEND_API void zend_iterator_init(zend_object_iterator *iter); ZEND_API void zend_iterator_dtor(zend_object_iterator *iter); ZEND_API void zend_register_iterator_wrapper(void); END_EXTERN_C() /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!y$$Zend/zend_API.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Andrei Zmievski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_API_H #define ZEND_API_H #include "zend_modules.h" #include "zend_list.h" #include "zend_operators.h" #include "zend_variables.h" #include "zend_execute.h" BEGIN_EXTERN_C() typedef struct _zend_function_entry { const char *fname; zif_handler handler; const struct _zend_internal_arg_info *arg_info; uint32_t num_args; uint32_t flags; } zend_function_entry; typedef struct _zend_fcall_info { size_t size; zval function_name; zval *retval; zval *params; zend_object *object; zend_bool no_separation; uint32_t param_count; } zend_fcall_info; typedef struct _zend_fcall_info_cache { zend_function *function_handler; zend_class_entry *calling_scope; zend_class_entry *called_scope; zend_object *object; } zend_fcall_info_cache; #define ZEND_NS_NAME(ns, name) ns "\\" name #define ZEND_FN(name) zif_##name #define ZEND_MN(name) zim_##name #define ZEND_NAMED_FUNCTION(name) void ZEND_FASTCALL name(INTERNAL_FUNCTION_PARAMETERS) #define ZEND_FUNCTION(name) ZEND_NAMED_FUNCTION(ZEND_FN(name)) #define ZEND_METHOD(classname, name) ZEND_NAMED_FUNCTION(ZEND_MN(classname##_##name)) #define ZEND_FENTRY(zend_name, name, arg_info, flags) { #zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags }, #define ZEND_RAW_FENTRY(zend_name, name, arg_info, flags) { zend_name, name, arg_info, (uint32_t) (sizeof(arg_info)/sizeof(struct _zend_internal_arg_info)-1), flags }, #define ZEND_RAW_NAMED_FE(zend_name, name, arg_info) ZEND_RAW_FENTRY(#zend_name, name, arg_info, 0) #define ZEND_NAMED_FE(zend_name, name, arg_info) ZEND_FENTRY(zend_name, name, arg_info, 0) #define ZEND_FE(name, arg_info) ZEND_FENTRY(name, ZEND_FN(name), arg_info, 0) #define ZEND_DEP_FE(name, arg_info) ZEND_FENTRY(name, ZEND_FN(name), arg_info, ZEND_ACC_DEPRECATED) #define ZEND_FALIAS(name, alias, arg_info) ZEND_FENTRY(name, ZEND_FN(alias), arg_info, 0) #define ZEND_DEP_FALIAS(name, alias, arg_info) ZEND_FENTRY(name, ZEND_FN(alias), arg_info, ZEND_ACC_DEPRECATED) #define ZEND_NAMED_ME(zend_name, name, arg_info, flags) ZEND_FENTRY(zend_name, name, arg_info, flags) #define ZEND_ME(classname, name, arg_info, flags) ZEND_FENTRY(name, ZEND_MN(classname##_##name), arg_info, flags) #define ZEND_ABSTRACT_ME(classname, name, arg_info) ZEND_FENTRY(name, NULL, arg_info, ZEND_ACC_PUBLIC|ZEND_ACC_ABSTRACT) #define ZEND_MALIAS(classname, name, alias, arg_info, flags) \ ZEND_FENTRY(name, ZEND_MN(classname##_##alias), arg_info, flags) #define ZEND_ME_MAPPING(name, func_name, arg_types, flags) ZEND_NAMED_ME(name, ZEND_FN(func_name), arg_types, flags) #define ZEND_NS_FENTRY(ns, zend_name, name, arg_info, flags) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, #zend_name), name, arg_info, flags) #define ZEND_NS_RAW_FENTRY(ns, zend_name, name, arg_info, flags) ZEND_RAW_FENTRY(ZEND_NS_NAME(ns, zend_name), name, arg_info, flags) #define ZEND_NS_RAW_NAMED_FE(ns, zend_name, name, arg_info) ZEND_NS_RAW_FENTRY(ns, #zend_name, name, arg_info, 0) #define ZEND_NS_NAMED_FE(ns, zend_name, name, arg_info) ZEND_NS_FENTRY(ns, zend_name, name, arg_info, 0) #define ZEND_NS_FE(ns, name, arg_info) ZEND_NS_FENTRY(ns, name, ZEND_FN(name), arg_info, 0) #define ZEND_NS_DEP_FE(ns, name, arg_info) ZEND_NS_FENTRY(ns, name, ZEND_FN(name), arg_info, ZEND_ACC_DEPRECATED) #define ZEND_NS_FALIAS(ns, name, alias, arg_info) ZEND_NS_FENTRY(ns, name, ZEND_FN(alias), arg_info, 0) #define ZEND_NS_DEP_FALIAS(ns, name, alias, arg_info) ZEND_NS_FENTRY(ns, name, ZEND_FN(alias), arg_info, ZEND_ACC_DEPRECATED) #define ZEND_FE_END { NULL, NULL, NULL, 0, 0 } #define ZEND_ARG_INFO(pass_by_ref, name) { #name, 0, pass_by_ref, 0}, #define ZEND_ARG_PASS_INFO(pass_by_ref) { NULL, 0, pass_by_ref, 0}, #define ZEND_ARG_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, ZEND_TYPE_ENCODE_CLASS_CONST(#classname, allow_null), pass_by_ref, 0 }, #define ZEND_ARG_ARRAY_INFO(pass_by_ref, name, allow_null) { #name, ZEND_TYPE_ENCODE(IS_ARRAY, allow_null), pass_by_ref, 0 }, #define ZEND_ARG_CALLABLE_INFO(pass_by_ref, name, allow_null) { #name, ZEND_TYPE_ENCODE(IS_CALLABLE, allow_null), pass_by_ref, 0 }, #define ZEND_ARG_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, ZEND_TYPE_ENCODE(type_hint, allow_null), pass_by_ref, 0 }, #define ZEND_ARG_VARIADIC_INFO(pass_by_ref, name) { #name, 0, pass_by_ref, 1 }, #define ZEND_ARG_VARIADIC_TYPE_INFO(pass_by_ref, name, type_hint, allow_null) { #name, ZEND_TYPE_ENCODE(type_hint, allow_null), pass_by_ref, 1 }, #define ZEND_ARG_VARIADIC_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, ZEND_TYPE_ENCODE_CLASS_CONST(#classname, allow_null), pass_by_ref, 1 }, #define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, return_reference, required_num_args, class_name, allow_null) \ static const zend_internal_arg_info name[] = { \ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE_CLASS_CONST(#class_name, allow_null), return_reference, 0 }, #define ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO(name, class_name, allow_null) \ ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX(name, 0, -1, class_name, allow_null) #define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, return_reference, required_num_args, type, allow_null) \ static const zend_internal_arg_info name[] = { \ { (const char*)(zend_uintptr_t)(required_num_args), ZEND_TYPE_ENCODE(type, allow_null), return_reference, 0 }, #define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO(name, type, allow_null) \ ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(name, 0, -1, type, allow_null) #define ZEND_BEGIN_ARG_INFO_EX(name, _unused, return_reference, required_num_args) \ static const zend_internal_arg_info name[] = { \ { (const char*)(zend_uintptr_t)(required_num_args), 0, return_reference, 0 }, #define ZEND_BEGIN_ARG_INFO(name, _unused) \ ZEND_BEGIN_ARG_INFO_EX(name, 0, ZEND_RETURN_VALUE, -1) #define ZEND_END_ARG_INFO() }; /* Name macros */ #define ZEND_MODULE_STARTUP_N(module) zm_startup_##module #define ZEND_MODULE_SHUTDOWN_N(module) zm_shutdown_##module #define ZEND_MODULE_ACTIVATE_N(module) zm_activate_##module #define ZEND_MODULE_DEACTIVATE_N(module) zm_deactivate_##module #define ZEND_MODULE_POST_ZEND_DEACTIVATE_N(module) zm_post_zend_deactivate_##module #define ZEND_MODULE_INFO_N(module) zm_info_##module #define ZEND_MODULE_GLOBALS_CTOR_N(module) zm_globals_ctor_##module #define ZEND_MODULE_GLOBALS_DTOR_N(module) zm_globals_dtor_##module /* Declaration macros */ #define ZEND_MODULE_STARTUP_D(module) int ZEND_MODULE_STARTUP_N(module)(INIT_FUNC_ARGS) #define ZEND_MODULE_SHUTDOWN_D(module) int ZEND_MODULE_SHUTDOWN_N(module)(SHUTDOWN_FUNC_ARGS) #define ZEND_MODULE_ACTIVATE_D(module) int ZEND_MODULE_ACTIVATE_N(module)(INIT_FUNC_ARGS) #define ZEND_MODULE_DEACTIVATE_D(module) int ZEND_MODULE_DEACTIVATE_N(module)(SHUTDOWN_FUNC_ARGS) #define ZEND_MODULE_POST_ZEND_DEACTIVATE_D(module) int ZEND_MODULE_POST_ZEND_DEACTIVATE_N(module)(void) #define ZEND_MODULE_INFO_D(module) void ZEND_MODULE_INFO_N(module)(ZEND_MODULE_INFO_FUNC_ARGS) #define ZEND_MODULE_GLOBALS_CTOR_D(module) void ZEND_MODULE_GLOBALS_CTOR_N(module)(zend_##module##_globals *module##_globals) #define ZEND_MODULE_GLOBALS_DTOR_D(module) void ZEND_MODULE_GLOBALS_DTOR_N(module)(zend_##module##_globals *module##_globals) #define ZEND_GET_MODULE(name) \ BEGIN_EXTERN_C()\ ZEND_DLEXPORT zend_module_entry *get_module(void) { return &name##_module_entry; }\ END_EXTERN_C() #define ZEND_BEGIN_MODULE_GLOBALS(module_name) \ typedef struct _zend_##module_name##_globals { #define ZEND_END_MODULE_GLOBALS(module_name) \ } zend_##module_name##_globals; #ifdef ZTS #define ZEND_DECLARE_MODULE_GLOBALS(module_name) \ ts_rsrc_id module_name##_globals_id; #define ZEND_EXTERN_MODULE_GLOBALS(module_name) \ extern ts_rsrc_id module_name##_globals_id; #define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \ ts_allocate_id(&module_name##_globals_id, sizeof(zend_##module_name##_globals), (ts_allocate_ctor) globals_ctor, (ts_allocate_dtor) globals_dtor); #define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) ZEND_TSRMG(module_name##_globals_id, zend_##module_name##_globals *, v) #if ZEND_ENABLE_STATIC_TSRMLS_CACHE #define ZEND_MODULE_GLOBALS_BULK(module_name) TSRMG_BULK_STATIC(module_name##_globals_id, zend_##module_name##_globals *) #else #define ZEND_MODULE_GLOBALS_BULK(module_name) TSRMG_BULK(module_name##_globals_id, zend_##module_name##_globals *) #endif #else #define ZEND_DECLARE_MODULE_GLOBALS(module_name) \ zend_##module_name##_globals module_name##_globals; #define ZEND_EXTERN_MODULE_GLOBALS(module_name) \ extern zend_##module_name##_globals module_name##_globals; #define ZEND_INIT_MODULE_GLOBALS(module_name, globals_ctor, globals_dtor) \ globals_ctor(&module_name##_globals); #define ZEND_MODULE_GLOBALS_ACCESSOR(module_name, v) (module_name##_globals.v) #define ZEND_MODULE_GLOBALS_BULK(module_name) (&module_name##_globals) #endif #define INIT_CLASS_ENTRY(class_container, class_name, functions) \ INIT_CLASS_ENTRY_EX(class_container, class_name, sizeof(class_name)-1, functions) #define INIT_CLASS_ENTRY_EX(class_container, class_name, class_name_len, functions) \ { \ memset(&class_container, 0, sizeof(zend_class_entry)); \ class_container.name = zend_string_init_interned(class_name, class_name_len, 1); \ class_container.info.internal.builtin_functions = functions; \ } #define INIT_CLASS_ENTRY_INIT_METHODS(class_container, functions) \ { \ class_container.constructor = NULL; \ class_container.destructor = NULL; \ class_container.clone = NULL; \ class_container.serialize = NULL; \ class_container.unserialize = NULL; \ class_container.create_object = NULL; \ class_container.get_static_method = NULL; \ class_container.__call = NULL; \ class_container.__callstatic = NULL; \ class_container.__tostring = NULL; \ class_container.__get = NULL; \ class_container.__set = NULL; \ class_container.__unset = NULL; \ class_container.__isset = NULL; \ class_container.__debugInfo = NULL; \ class_container.serialize_func = NULL; \ class_container.unserialize_func = NULL; \ class_container.parent = NULL; \ class_container.num_interfaces = 0; \ class_container.traits = NULL; \ class_container.num_traits = 0; \ class_container.trait_aliases = NULL; \ class_container.trait_precedences = NULL; \ class_container.interfaces = NULL; \ class_container.get_iterator = NULL; \ class_container.iterator_funcs_ptr = NULL; \ class_container.info.internal.module = NULL; \ class_container.info.internal.builtin_functions = functions; \ } #define INIT_NS_CLASS_ENTRY(class_container, ns, class_name, functions) \ INIT_CLASS_ENTRY(class_container, ZEND_NS_NAME(ns, class_name), functions) #ifdef ZTS # define CE_STATIC_MEMBERS(ce) (((ce)->type==ZEND_USER_CLASS)?(ce)->static_members_table:CG(static_members_table)[(zend_intptr_t)(ce)->static_members_table]) #else # define CE_STATIC_MEMBERS(ce) ((ce)->static_members_table) #endif #define ZEND_FCI_INITIALIZED(fci) ((fci).size != 0) ZEND_API int zend_next_free_module(void); BEGIN_EXTERN_C() ZEND_API int _zend_get_parameters_array_ex(int param_count, zval *argument_array); /* internal function to efficiently copy parameters when executing __call() */ ZEND_API int zend_copy_parameters_array(int param_count, zval *argument_array); #define zend_get_parameters_array(ht, param_count, argument_array) \ _zend_get_parameters_array_ex(param_count, argument_array) #define zend_get_parameters_array_ex(param_count, argument_array) \ _zend_get_parameters_array_ex(param_count, argument_array) #define zend_parse_parameters_none() \ (EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : zend_wrong_parameters_none_error()) #define zend_parse_parameters_none_throw() \ (EXPECTED(ZEND_NUM_ARGS() == 0) ? SUCCESS : zend_wrong_parameters_none_exception()) /* Parameter parsing API -- andrei */ #define ZEND_PARSE_PARAMS_QUIET (1<<1) #define ZEND_PARSE_PARAMS_THROW (1<<2) ZEND_API int zend_parse_parameters(int num_args, const char *type_spec, ...); ZEND_API int zend_parse_parameters_ex(int flags, int num_args, const char *type_spec, ...); ZEND_API int zend_parse_parameters_throw(int num_args, const char *type_spec, ...); ZEND_API char *zend_zval_type_name(const zval *arg); ZEND_API zend_string *zend_zval_get_type(const zval *arg); ZEND_API int zend_parse_method_parameters(int num_args, zval *this_ptr, const char *type_spec, ...); ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args, zval *this_ptr, const char *type_spec, ...); ZEND_API int zend_parse_parameter(int flags, int arg_num, zval *arg, const char *spec, ...); /* End of parameter parsing API -- andrei */ ZEND_API int zend_register_functions(zend_class_entry *scope, const zend_function_entry *functions, HashTable *function_table, int type); ZEND_API void zend_unregister_functions(const zend_function_entry *functions, int count, HashTable *function_table); ZEND_API int zend_startup_module(zend_module_entry *module_entry); ZEND_API zend_module_entry* zend_register_internal_module(zend_module_entry *module_entry); ZEND_API zend_module_entry* zend_register_module_ex(zend_module_entry *module); ZEND_API int zend_startup_module_ex(zend_module_entry *module); ZEND_API int zend_startup_modules(void); ZEND_API void zend_collect_module_handlers(void); ZEND_API void zend_destroy_modules(void); ZEND_API void zend_check_magic_method_implementation(const zend_class_entry *ce, const zend_function *fptr, int error_type); ZEND_API zend_class_entry *zend_register_internal_class(zend_class_entry *class_entry); ZEND_API zend_class_entry *zend_register_internal_class_ex(zend_class_entry *class_entry, zend_class_entry *parent_ce); ZEND_API zend_class_entry *zend_register_internal_interface(zend_class_entry *orig_class_entry); ZEND_API void zend_class_implements(zend_class_entry *class_entry, int num_interfaces, ...); ZEND_API int zend_register_class_alias_ex(const char *name, size_t name_len, zend_class_entry *ce, int persistent); #define zend_register_class_alias(name, ce) \ zend_register_class_alias_ex(name, sizeof(name)-1, ce, 1) #define zend_register_ns_class_alias(ns, name, ce) \ zend_register_class_alias_ex(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, ce, 1) ZEND_API int zend_disable_function(char *function_name, size_t function_name_length); ZEND_API int zend_disable_class(char *class_name, size_t class_name_length); ZEND_API ZEND_COLD void zend_wrong_param_count(void); #define IS_CALLABLE_CHECK_SYNTAX_ONLY (1<<0) #define IS_CALLABLE_CHECK_NO_ACCESS (1<<1) #define IS_CALLABLE_CHECK_IS_STATIC (1<<2) #define IS_CALLABLE_CHECK_SILENT (1<<3) #define IS_CALLABLE_STRICT (IS_CALLABLE_CHECK_IS_STATIC) ZEND_API zend_string *zend_get_callable_name_ex(zval *callable, zend_object *object); ZEND_API zend_string *zend_get_callable_name(zval *callable); ZEND_API zend_bool zend_is_callable_ex(zval *callable, zend_object *object, uint32_t check_flags, zend_string **callable_name, zend_fcall_info_cache *fcc, char **error); ZEND_API zend_bool zend_is_callable(zval *callable, uint32_t check_flags, zend_string **callable_name); ZEND_API zend_bool zend_make_callable(zval *callable, zend_string **callable_name); ZEND_API const char *zend_get_module_version(const char *module_name); ZEND_API int zend_get_module_started(const char *module_name); ZEND_API int zend_declare_property_ex(zend_class_entry *ce, zend_string *name, zval *property, int access_type, zend_string *doc_comment); ZEND_API int zend_declare_property(zend_class_entry *ce, const char *name, size_t name_length, zval *property, int access_type); ZEND_API int zend_declare_property_null(zend_class_entry *ce, const char *name, size_t name_length, int access_type); ZEND_API int zend_declare_property_bool(zend_class_entry *ce, const char *name, size_t name_length, zend_long value, int access_type); ZEND_API int zend_declare_property_long(zend_class_entry *ce, const char *name, size_t name_length, zend_long value, int access_type); ZEND_API int zend_declare_property_double(zend_class_entry *ce, const char *name, size_t name_length, double value, int access_type); ZEND_API int zend_declare_property_string(zend_class_entry *ce, const char *name, size_t name_length, const char *value, int access_type); ZEND_API int zend_declare_property_stringl(zend_class_entry *ce, const char *name, size_t name_length, const char *value, size_t value_len, int access_type); ZEND_API int zend_declare_class_constant_ex(zend_class_entry *ce, zend_string *name, zval *value, int access_type, zend_string *doc_comment); ZEND_API int zend_declare_class_constant(zend_class_entry *ce, const char *name, size_t name_length, zval *value); ZEND_API int zend_declare_class_constant_null(zend_class_entry *ce, const char *name, size_t name_length); ZEND_API int zend_declare_class_constant_long(zend_class_entry *ce, const char *name, size_t name_length, zend_long value); ZEND_API int zend_declare_class_constant_bool(zend_class_entry *ce, const char *name, size_t name_length, zend_bool value); ZEND_API int zend_declare_class_constant_double(zend_class_entry *ce, const char *name, size_t name_length, double value); ZEND_API int zend_declare_class_constant_stringl(zend_class_entry *ce, const char *name, size_t name_length, const char *value, size_t value_length); ZEND_API int zend_declare_class_constant_string(zend_class_entry *ce, const char *name, size_t name_length, const char *value); ZEND_API int zend_update_class_constants(zend_class_entry *class_type); ZEND_API void zend_update_property_ex(zend_class_entry *scope, zval *object, zend_string *name, zval *value); ZEND_API void zend_update_property(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zval *value); ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, const char *name, size_t name_length); ZEND_API void zend_update_property_bool(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zend_long value); ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zend_long value); ZEND_API void zend_update_property_double(zend_class_entry *scope, zval *object, const char *name, size_t name_length, double value); ZEND_API void zend_update_property_str(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zend_string *value); ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, const char *name, size_t name_length, const char *value); ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zval *object, const char *name, size_t name_length, const char *value, size_t value_length); ZEND_API void zend_unset_property(zend_class_entry *scope, zval *object, const char *name, size_t name_length); ZEND_API int zend_update_static_property_ex(zend_class_entry *scope, zend_string *name, zval *value); ZEND_API int zend_update_static_property(zend_class_entry *scope, const char *name, size_t name_length, zval *value); ZEND_API int zend_update_static_property_null(zend_class_entry *scope, const char *name, size_t name_length); ZEND_API int zend_update_static_property_bool(zend_class_entry *scope, const char *name, size_t name_length, zend_long value); ZEND_API int zend_update_static_property_long(zend_class_entry *scope, const char *name, size_t name_length, zend_long value); ZEND_API int zend_update_static_property_double(zend_class_entry *scope, const char *name, size_t name_length, double value); ZEND_API int zend_update_static_property_string(zend_class_entry *scope, const char *name, size_t name_length, const char *value); ZEND_API int zend_update_static_property_stringl(zend_class_entry *scope, const char *name, size_t name_length, const char *value, size_t value_length); ZEND_API zval *zend_read_property_ex(zend_class_entry *scope, zval *object, zend_string *name, zend_bool silent, zval *rv); ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, const char *name, size_t name_length, zend_bool silent, zval *rv); ZEND_API zval *zend_read_static_property_ex(zend_class_entry *scope, zend_string *name, zend_bool silent); ZEND_API zval *zend_read_static_property(zend_class_entry *scope, const char *name, size_t name_length, zend_bool silent); ZEND_API char *zend_get_type_by_const(int type); #define getThis() ((Z_TYPE(EX(This)) == IS_OBJECT) ? &EX(This) : NULL) #define ZEND_IS_METHOD_CALL() (EX(func)->common.scope != NULL) #define WRONG_PARAM_COUNT ZEND_WRONG_PARAM_COUNT() #define WRONG_PARAM_COUNT_WITH_RETVAL(ret) ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) #define ARG_COUNT(dummy) EX_NUM_ARGS() #define ZEND_NUM_ARGS() EX_NUM_ARGS() #define ZEND_WRONG_PARAM_COUNT() { zend_wrong_param_count(); return; } #define ZEND_WRONG_PARAM_COUNT_WITH_RETVAL(ret) { zend_wrong_param_count(); return ret; } #ifndef ZEND_WIN32 #define DLEXPORT #endif #define array_init(arg) ZVAL_ARR((arg), zend_new_array(0)) #define array_init_size(arg, size) ZVAL_ARR((arg), zend_new_array(size)) ZEND_API int object_init(zval *arg); ZEND_API int object_init_ex(zval *arg, zend_class_entry *ce); ZEND_API int object_and_properties_init(zval *arg, zend_class_entry *ce, HashTable *properties); ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type); ZEND_API void object_properties_init_ex(zend_object *object, HashTable *properties); ZEND_API void object_properties_load(zend_object *object, HashTable *properties); ZEND_API void zend_merge_properties(zval *obj, HashTable *properties); ZEND_API int add_assoc_long_ex(zval *arg, const char *key, size_t key_len, zend_long n); ZEND_API int add_assoc_null_ex(zval *arg, const char *key, size_t key_len); ZEND_API int add_assoc_bool_ex(zval *arg, const char *key, size_t key_len, int b); ZEND_API int add_assoc_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r); ZEND_API int add_assoc_double_ex(zval *arg, const char *key, size_t key_len, double d); ZEND_API int add_assoc_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str); ZEND_API int add_assoc_string_ex(zval *arg, const char *key, size_t key_len, const char *str); ZEND_API int add_assoc_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length); ZEND_API int add_assoc_zval_ex(zval *arg, const char *key, size_t key_len, zval *value); #define add_assoc_long(__arg, __key, __n) add_assoc_long_ex(__arg, __key, strlen(__key), __n) #define add_assoc_null(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key)) #define add_assoc_bool(__arg, __key, __b) add_assoc_bool_ex(__arg, __key, strlen(__key), __b) #define add_assoc_resource(__arg, __key, __r) add_assoc_resource_ex(__arg, __key, strlen(__key), __r) #define add_assoc_double(__arg, __key, __d) add_assoc_double_ex(__arg, __key, strlen(__key), __d) #define add_assoc_str(__arg, __key, __str) add_assoc_str_ex(__arg, __key, strlen(__key), __str) #define add_assoc_string(__arg, __key, __str) add_assoc_string_ex(__arg, __key, strlen(__key), __str) #define add_assoc_stringl(__arg, __key, __str, __length) add_assoc_stringl_ex(__arg, __key, strlen(__key), __str, __length) #define add_assoc_zval(__arg, __key, __value) add_assoc_zval_ex(__arg, __key, strlen(__key), __value) /* unset() functions are only supported for legacy modules and null() functions should be used */ #define add_assoc_unset(__arg, __key) add_assoc_null_ex(__arg, __key, strlen(__key)) #define add_index_unset(__arg, __key) add_index_null(__arg, __key) #define add_next_index_unset(__arg) add_next_index_null(__arg) #define add_property_unset(__arg, __key) add_property_null(__arg, __key) ZEND_API int add_index_long(zval *arg, zend_ulong idx, zend_long n); ZEND_API int add_index_null(zval *arg, zend_ulong idx); ZEND_API int add_index_bool(zval *arg, zend_ulong idx, int b); ZEND_API int add_index_resource(zval *arg, zend_ulong idx, zend_resource *r); ZEND_API int add_index_double(zval *arg, zend_ulong idx, double d); ZEND_API int add_index_str(zval *arg, zend_ulong idx, zend_string *str); ZEND_API int add_index_string(zval *arg, zend_ulong idx, const char *str); ZEND_API int add_index_stringl(zval *arg, zend_ulong idx, const char *str, size_t length); ZEND_API int add_index_zval(zval *arg, zend_ulong index, zval *value); ZEND_API int add_next_index_long(zval *arg, zend_long n); ZEND_API int add_next_index_null(zval *arg); ZEND_API int add_next_index_bool(zval *arg, int b); ZEND_API int add_next_index_resource(zval *arg, zend_resource *r); ZEND_API int add_next_index_double(zval *arg, double d); ZEND_API int add_next_index_str(zval *arg, zend_string *str); ZEND_API int add_next_index_string(zval *arg, const char *str); ZEND_API int add_next_index_stringl(zval *arg, const char *str, size_t length); ZEND_API int add_next_index_zval(zval *arg, zval *value); ZEND_API zval *add_get_assoc_string_ex(zval *arg, const char *key, uint32_t key_len, const char *str); ZEND_API zval *add_get_assoc_stringl_ex(zval *arg, const char *key, uint32_t key_len, const char *str, size_t length); #define add_get_assoc_string(__arg, __key, __str) add_get_assoc_string_ex(__arg, __key, strlen(__key), __str) #define add_get_assoc_stringl(__arg, __key, __str, __length) add_get_assoc_stringl_ex(__arg, __key, strlen(__key), __str, __length) ZEND_API zval *add_get_index_long(zval *arg, zend_ulong idx, zend_long l); ZEND_API zval *add_get_index_double(zval *arg, zend_ulong idx, double d); ZEND_API zval *add_get_index_str(zval *arg, zend_ulong index, zend_string *str); ZEND_API zval *add_get_index_string(zval *arg, zend_ulong idx, const char *str); ZEND_API zval *add_get_index_stringl(zval *arg, zend_ulong idx, const char *str, size_t length); ZEND_API int array_set_zval_key(HashTable *ht, zval *key, zval *value); ZEND_API int add_property_long_ex(zval *arg, const char *key, size_t key_len, zend_long l); ZEND_API int add_property_null_ex(zval *arg, const char *key, size_t key_len); ZEND_API int add_property_bool_ex(zval *arg, const char *key, size_t key_len, zend_long b); ZEND_API int add_property_resource_ex(zval *arg, const char *key, size_t key_len, zend_resource *r); ZEND_API int add_property_double_ex(zval *arg, const char *key, size_t key_len, double d); ZEND_API int add_property_str_ex(zval *arg, const char *key, size_t key_len, zend_string *str); ZEND_API int add_property_string_ex(zval *arg, const char *key, size_t key_len, const char *str); ZEND_API int add_property_stringl_ex(zval *arg, const char *key, size_t key_len, const char *str, size_t length); ZEND_API int add_property_zval_ex(zval *arg, const char *key, size_t key_len, zval *value); #define add_property_long(__arg, __key, __n) add_property_long_ex(__arg, __key, strlen(__key), __n) #define add_property_null(__arg, __key) add_property_null_ex(__arg, __key, strlen(__key)) #define add_property_bool(__arg, __key, __b) add_property_bool_ex(__arg, __key, strlen(__key), __b) #define add_property_resource(__arg, __key, __r) add_property_resource_ex(__arg, __key, strlen(__key), __r) #define add_property_double(__arg, __key, __d) add_property_double_ex(__arg, __key, strlen(__key), __d) #define add_property_str(__arg, __key, __str) add_property_str_ex(__arg, __key, strlen(__key), __str) #define add_property_string(__arg, __key, __str) add_property_string_ex(__arg, __key, strlen(__key), __str) #define add_property_stringl(__arg, __key, __str, __length) add_property_stringl_ex(__arg, __key, strlen(__key), __str, __length) #define add_property_zval(__arg, __key, __value) add_property_zval_ex(__arg, __key, strlen(__key), __value) ZEND_API int _call_user_function_ex(zval *object, zval *function_name, zval *retval_ptr, uint32_t param_count, zval params[], int no_separation); #define call_user_function(function_table, object, function_name, retval_ptr, param_count, params) \ _call_user_function_ex(object, function_name, retval_ptr, param_count, params, 1) #define call_user_function_ex(function_table, object, function_name, retval_ptr, param_count, params, no_separation, symbol_table) \ _call_user_function_ex(object, function_name, retval_ptr, param_count, params, no_separation) ZEND_API extern const zend_fcall_info empty_fcall_info; ZEND_API extern const zend_fcall_info_cache empty_fcall_info_cache; /** Build zend_call_info/cache from a zval* * * Caller is responsible to provide a return value (fci->retval), otherwise the we will crash. * In order to pass parameters the following members need to be set: * fci->param_count = 0; * fci->params = NULL; * The callable_name argument may be NULL. * Set check_flags to IS_CALLABLE_STRICT for every new usage! */ ZEND_API int zend_fcall_info_init(zval *callable, uint32_t check_flags, zend_fcall_info *fci, zend_fcall_info_cache *fcc, zend_string **callable_name, char **error); /** Clear arguments connected with zend_fcall_info *fci * If free_mem is not zero then the params array gets free'd as well */ ZEND_API void zend_fcall_info_args_clear(zend_fcall_info *fci, int free_mem); /** Save current arguments from zend_fcall_info *fci * params array will be set to NULL */ ZEND_API void zend_fcall_info_args_save(zend_fcall_info *fci, int *param_count, zval **params); /** Free arguments connected with zend_fcall_info *fci andset back saved ones. */ ZEND_API void zend_fcall_info_args_restore(zend_fcall_info *fci, int param_count, zval *params); /** Set or clear the arguments in the zend_call_info struct taking care of * refcount. If args is NULL and arguments are set then those are cleared. */ ZEND_API int zend_fcall_info_args(zend_fcall_info *fci, zval *args); ZEND_API int zend_fcall_info_args_ex(zend_fcall_info *fci, zend_function *func, zval *args); /** Set arguments in the zend_fcall_info struct taking care of refcount. * If argc is 0 the arguments which are set will be cleared, else pass * a variable amount of zval** arguments. */ ZEND_API int zend_fcall_info_argp(zend_fcall_info *fci, int argc, zval *argv); /** Set arguments in the zend_fcall_info struct taking care of refcount. * If argc is 0 the arguments which are set will be cleared, else pass * a variable amount of zval** arguments. */ ZEND_API int zend_fcall_info_argv(zend_fcall_info *fci, int argc, va_list *argv); /** Set arguments in the zend_fcall_info struct taking care of refcount. * If argc is 0 the arguments which are set will be cleared, else pass * a variable amount of zval** arguments. */ ZEND_API int zend_fcall_info_argn(zend_fcall_info *fci, int argc, ...); /** Call a function using information created by zend_fcall_info_init()/args(). * If args is given then those replace the argument info in fci is temporarily. */ ZEND_API int zend_fcall_info_call(zend_fcall_info *fci, zend_fcall_info_cache *fcc, zval *retval, zval *args); ZEND_API int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache); ZEND_API int zend_set_hash_symbol(zval *symbol, const char *name, int name_length, zend_bool is_ref, int num_symbol_tables, ...); ZEND_API int zend_delete_global_variable(zend_string *name); ZEND_API zend_array *zend_rebuild_symbol_table(void); ZEND_API void zend_attach_symbol_table(zend_execute_data *execute_data); ZEND_API void zend_detach_symbol_table(zend_execute_data *execute_data); ZEND_API int zend_set_local_var(zend_string *name, zval *value, int force); ZEND_API int zend_set_local_var_str(const char *name, size_t len, zval *value, int force); ZEND_API int zend_forbid_dynamic_call(const char *func_name); ZEND_API zend_string *zend_find_alias_name(zend_class_entry *ce, zend_string *name); ZEND_API zend_string *zend_resolve_method_name(zend_class_entry *ce, zend_function *f); ZEND_API const char *zend_get_object_type(const zend_class_entry *ce); ZEND_API zend_bool zend_is_iterable(zval *iterable); ZEND_API zend_bool zend_is_countable(zval *countable); #define add_method(arg, key, method) add_assoc_function((arg), (key), (method)) ZEND_API ZEND_FUNCTION(display_disabled_function); ZEND_API ZEND_FUNCTION(display_disabled_class); END_EXTERN_C() #if ZEND_DEBUG #define CHECK_ZVAL_STRING(str) \ if (ZSTR_VAL(str)[ZSTR_LEN(str)] != '\0') { zend_error(E_WARNING, "String is not zero-terminated (%s)", ZSTR_VAL(str)); } #define CHECK_ZVAL_STRING_REL(str) \ if (ZSTR_VAL(str)[ZSTR_LEN(str)] != '\0') { zend_error(E_WARNING, "String is not zero-terminated (%s) (source: %s:%d)", ZSTR_VAL(str) ZEND_FILE_LINE_RELAY_CC); } #else #define CHECK_ZVAL_STRING(z) #define CHECK_ZVAL_STRING_REL(z) #endif #define CHECK_ZVAL_NULL_PATH(p) (Z_STRLEN_P(p) != strlen(Z_STRVAL_P(p))) #define CHECK_NULL_PATH(p, l) (strlen(p) != (size_t)(l)) #define ZVAL_STRINGL(z, s, l) do { \ ZVAL_NEW_STR(z, zend_string_init(s, l, 0)); \ } while (0) #define ZVAL_STRING(z, s) do { \ const char *_s = (s); \ ZVAL_STRINGL(z, _s, strlen(_s)); \ } while (0) #define ZVAL_EMPTY_STRING(z) do { \ ZVAL_INTERNED_STR(z, ZSTR_EMPTY_ALLOC()); \ } while (0) #define ZVAL_PSTRINGL(z, s, l) do { \ ZVAL_NEW_STR(z, zend_string_init(s, l, 1)); \ } while (0) #define ZVAL_PSTRING(z, s) do { \ const char *_s = (s); \ ZVAL_PSTRINGL(z, _s, strlen(_s)); \ } while (0) #define ZVAL_EMPTY_PSTRING(z) do { \ ZVAL_PSTRINGL(z, "", 0); \ } while (0) #define ZVAL_ZVAL(z, zv, copy, dtor) do { \ zval *__z = (z); \ zval *__zv = (zv); \ if (EXPECTED(!Z_ISREF_P(__zv))) { \ if (copy && !dtor) { \ ZVAL_COPY(__z, __zv); \ } else { \ ZVAL_COPY_VALUE(__z, __zv); \ } \ } else { \ ZVAL_COPY(__z, Z_REFVAL_P(__zv)); \ if (dtor || !copy) { \ zval_ptr_dtor(__zv); \ } \ } \ } while (0) #define RETVAL_BOOL(b) ZVAL_BOOL(return_value, b) #define RETVAL_NULL() ZVAL_NULL(return_value) #define RETVAL_LONG(l) ZVAL_LONG(return_value, l) #define RETVAL_DOUBLE(d) ZVAL_DOUBLE(return_value, d) #define RETVAL_STR(s) ZVAL_STR(return_value, s) #define RETVAL_INTERNED_STR(s) ZVAL_INTERNED_STR(return_value, s) #define RETVAL_NEW_STR(s) ZVAL_NEW_STR(return_value, s) #define RETVAL_STR_COPY(s) ZVAL_STR_COPY(return_value, s) #define RETVAL_STRING(s) ZVAL_STRING(return_value, s) #define RETVAL_STRINGL(s, l) ZVAL_STRINGL(return_value, s, l) #define RETVAL_EMPTY_STRING() ZVAL_EMPTY_STRING(return_value) #define RETVAL_RES(r) ZVAL_RES(return_value, r) #define RETVAL_ARR(r) ZVAL_ARR(return_value, r) #define RETVAL_OBJ(r) ZVAL_OBJ(return_value, r) #define RETVAL_ZVAL(zv, copy, dtor) ZVAL_ZVAL(return_value, zv, copy, dtor) #define RETVAL_FALSE ZVAL_FALSE(return_value) #define RETVAL_TRUE ZVAL_TRUE(return_value) #define RETURN_BOOL(b) { RETVAL_BOOL(b); return; } #define RETURN_NULL() { RETVAL_NULL(); return;} #define RETURN_LONG(l) { RETVAL_LONG(l); return; } #define RETURN_DOUBLE(d) { RETVAL_DOUBLE(d); return; } #define RETURN_STR(s) { RETVAL_STR(s); return; } #define RETURN_INTERNED_STR(s) { RETVAL_INTERNED_STR(s); return; } #define RETURN_NEW_STR(s) { RETVAL_NEW_STR(s); return; } #define RETURN_STR_COPY(s) { RETVAL_STR_COPY(s); return; } #define RETURN_STRING(s) { RETVAL_STRING(s); return; } #define RETURN_STRINGL(s, l) { RETVAL_STRINGL(s, l); return; } #define RETURN_EMPTY_STRING() { RETVAL_EMPTY_STRING(); return; } #define RETURN_RES(r) { RETVAL_RES(r); return; } #define RETURN_ARR(r) { RETVAL_ARR(r); return; } #define RETURN_OBJ(r) { RETVAL_OBJ(r); return; } #define RETURN_ZVAL(zv, copy, dtor) { RETVAL_ZVAL(zv, copy, dtor); return; } #define RETURN_FALSE { RETVAL_FALSE; return; } #define RETURN_TRUE { RETVAL_TRUE; return; } #define HASH_OF(p) (Z_TYPE_P(p)==IS_ARRAY ? Z_ARRVAL_P(p) : ((Z_TYPE_P(p)==IS_OBJECT ? Z_OBJ_HT_P(p)->get_properties((p)) : NULL))) #define ZVAL_IS_NULL(z) (Z_TYPE_P(z) == IS_NULL) /* For compatibility */ #define ZEND_MINIT ZEND_MODULE_STARTUP_N #define ZEND_MSHUTDOWN ZEND_MODULE_SHUTDOWN_N #define ZEND_RINIT ZEND_MODULE_ACTIVATE_N #define ZEND_RSHUTDOWN ZEND_MODULE_DEACTIVATE_N #define ZEND_MINFO ZEND_MODULE_INFO_N #define ZEND_GINIT(module) ((void (*)(void*))(ZEND_MODULE_GLOBALS_CTOR_N(module))) #define ZEND_GSHUTDOWN(module) ((void (*)(void*))(ZEND_MODULE_GLOBALS_DTOR_N(module))) #define ZEND_MINIT_FUNCTION ZEND_MODULE_STARTUP_D #define ZEND_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D #define ZEND_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D #define ZEND_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D #define ZEND_MINFO_FUNCTION ZEND_MODULE_INFO_D #define ZEND_GINIT_FUNCTION ZEND_MODULE_GLOBALS_CTOR_D #define ZEND_GSHUTDOWN_FUNCTION ZEND_MODULE_GLOBALS_DTOR_D /* Fast parameter parsing API */ /* Fast ZPP is always enabled now; this define is left in for compatibility * with any existing conditional compilation blocks. */ #define FAST_ZPP 1 #define Z_EXPECTED_TYPES(_) \ _(Z_EXPECTED_LONG, "int") \ _(Z_EXPECTED_BOOL, "bool") \ _(Z_EXPECTED_STRING, "string") \ _(Z_EXPECTED_ARRAY, "array") \ _(Z_EXPECTED_FUNC, "valid callback") \ _(Z_EXPECTED_RESOURCE, "resource") \ _(Z_EXPECTED_PATH, "a valid path") \ _(Z_EXPECTED_OBJECT, "object") \ _(Z_EXPECTED_DOUBLE, "float") #define Z_EXPECTED_TYPE_ENUM(id, str) id, #define Z_EXPECTED_TYPE_STR(id, str) str, typedef enum _zend_expected_type { Z_EXPECTED_TYPES(Z_EXPECTED_TYPE_ENUM) Z_EXPECTED_LAST } zend_expected_type; ZEND_API ZEND_COLD int ZEND_FASTCALL zend_wrong_parameters_none_error(void); ZEND_API ZEND_COLD int ZEND_FASTCALL zend_wrong_parameters_none_exception(void); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_error(int min_num_args, int max_num_args); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameters_count_exception(int min_num_args, int max_num_args); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_error(int num, zend_expected_type expected_type, zval *arg); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_type_exception(int num, zend_expected_type expected_type, zval *arg); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_error(int num, char *name, zval *arg); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_parameter_class_exception(int num, char *name, zval *arg); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_error(int num, char *error); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_deprecated(int num, char *error); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_wrong_callback_exception(int num, char *error); #define ZPP_ERROR_OK 0 #define ZPP_ERROR_FAILURE 1 #define ZPP_ERROR_WRONG_CALLBACK 2 #define ZPP_ERROR_WRONG_CLASS 3 #define ZPP_ERROR_WRONG_ARG 4 #define ZPP_ERROR_WRONG_COUNT 5 #define ZEND_PARSE_PARAMETERS_START_EX(flags, min_num_args, max_num_args) do { \ const int _flags = (flags); \ int _min_num_args = (min_num_args); \ int _max_num_args = (max_num_args); \ int _num_args = EX_NUM_ARGS(); \ int _i; \ zval *_real_arg, *_arg = NULL; \ zend_expected_type _expected_type = Z_EXPECTED_LONG; \ char *_error = NULL; \ zend_bool _dummy; \ zend_bool _optional = 0; \ int error_code = ZPP_ERROR_OK; \ ((void)_i); \ ((void)_real_arg); \ ((void)_arg); \ ((void)_expected_type); \ ((void)_error); \ ((void)_dummy); \ ((void)_optional); \ \ do { \ if (UNEXPECTED(_num_args < _min_num_args) || \ (UNEXPECTED(_num_args > _max_num_args) && \ EXPECTED(_max_num_args >= 0))) { \ if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \ if (_flags & ZEND_PARSE_PARAMS_THROW) { \ zend_wrong_parameters_count_exception(_min_num_args, _max_num_args); \ } else { \ zend_wrong_parameters_count_error(_min_num_args, _max_num_args); \ } \ } \ error_code = ZPP_ERROR_FAILURE; \ break; \ } \ _i = 0; \ _real_arg = ZEND_CALL_ARG(execute_data, 0); #define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args) \ ZEND_PARSE_PARAMETERS_START_EX(0, min_num_args, max_num_args) #define ZEND_PARSE_PARAMETERS_NONE() do { \ if (UNEXPECTED(ZEND_NUM_ARGS() != 0)) { \ zend_wrong_parameters_none_error(); \ return; \ } \ } while (0) #define ZEND_PARSE_PARAMETERS_END_EX(failure) \ } while (0); \ if (UNEXPECTED(error_code != ZPP_ERROR_OK)) { \ if (!(_flags & ZEND_PARSE_PARAMS_QUIET)) { \ if (error_code == ZPP_ERROR_WRONG_CALLBACK) { \ if (_flags & ZEND_PARSE_PARAMS_THROW) { \ zend_wrong_callback_exception(_i, _error); \ } else { \ zend_wrong_callback_error(_i, _error); \ } \ } else if (error_code == ZPP_ERROR_WRONG_CLASS) { \ if (_flags & ZEND_PARSE_PARAMS_THROW) { \ zend_wrong_parameter_class_exception(_i, _error, _arg); \ } else { \ zend_wrong_parameter_class_error(_i, _error, _arg); \ } \ } else if (error_code == ZPP_ERROR_WRONG_ARG) { \ if (_flags & ZEND_PARSE_PARAMS_THROW) { \ zend_wrong_parameter_type_exception(_i, _expected_type, _arg); \ } else { \ zend_wrong_parameter_type_error(_i, _expected_type, _arg); \ } \ } \ } \ failure; \ } \ } while (0) #define ZEND_PARSE_PARAMETERS_END() \ ZEND_PARSE_PARAMETERS_END_EX(return) #define Z_PARAM_PROLOGUE(deref, separate) \ ++_i; \ ZEND_ASSERT(_i <= _min_num_args || _optional==1); \ ZEND_ASSERT(_i > _min_num_args || _optional==0); \ if (_optional) { \ if (UNEXPECTED(_i >_num_args)) break; \ } \ _real_arg++; \ _arg = _real_arg; \ if (deref) { \ ZVAL_DEREF(_arg); \ } \ if (separate) { \ SEPARATE_ZVAL_NOREF(_arg); \ } /* old "|" */ #define Z_PARAM_OPTIONAL \ _optional = 1; /* old "a" */ #define Z_PARAM_ARRAY_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_array(_arg, &dest, check_null, 0))) { \ _expected_type = Z_EXPECTED_ARRAY; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_ARRAY_EX(dest, check_null, separate) \ Z_PARAM_ARRAY_EX2(dest, check_null, separate, separate) #define Z_PARAM_ARRAY(dest) \ Z_PARAM_ARRAY_EX(dest, 0, 0) /* old "A" */ #define Z_PARAM_ARRAY_OR_OBJECT_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_array(_arg, &dest, check_null, 1))) { \ _expected_type = Z_EXPECTED_ARRAY; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_ARRAY_OR_OBJECT_EX(dest, check_null, separate) \ Z_PARAM_ARRAY_OR_OBJECT_EX2(dest, check_null, separate, separate) #define Z_PARAM_ARRAY_OR_OBJECT(dest) \ Z_PARAM_ARRAY_OR_OBJECT_EX(dest, 0, 0) /* old "b" */ #define Z_PARAM_BOOL_EX2(dest, is_null, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_bool(_arg, &dest, &is_null, check_null))) { \ _expected_type = Z_EXPECTED_BOOL; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_BOOL_EX(dest, is_null, check_null, separate) \ Z_PARAM_BOOL_EX2(dest, is_null, check_null, separate, separate) #define Z_PARAM_BOOL(dest) \ Z_PARAM_BOOL_EX(dest, _dummy, 0, 0) /* old "C" */ #define Z_PARAM_CLASS_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_class(_arg, &dest, _i, check_null))) { \ error_code = ZPP_ERROR_FAILURE; \ break; \ } #define Z_PARAM_CLASS_EX(dest, check_null, separate) \ Z_PARAM_CLASS_EX2(dest, check_null, separate, separate) #define Z_PARAM_CLASS(dest) \ Z_PARAM_CLASS_EX(dest, 0, 0) /* old "d" */ #define Z_PARAM_DOUBLE_EX2(dest, is_null, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_double(_arg, &dest, &is_null, check_null))) { \ _expected_type = Z_EXPECTED_DOUBLE; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_DOUBLE_EX(dest, is_null, check_null, separate) \ Z_PARAM_DOUBLE_EX2(dest, is_null, check_null, separate, separate) #define Z_PARAM_DOUBLE(dest) \ Z_PARAM_DOUBLE_EX(dest, _dummy, 0, 0) /* old "f" */ #define Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_func(_arg, &dest_fci, &dest_fcc, check_null, &_error))) { \ if (!_error) { \ _expected_type = Z_EXPECTED_FUNC; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } else { \ error_code = ZPP_ERROR_WRONG_CALLBACK; \ break; \ } \ } else if (UNEXPECTED(_error != NULL)) { \ zend_wrong_callback_deprecated(_i, _error); \ } #define Z_PARAM_FUNC_EX(dest_fci, dest_fcc, check_null, separate) \ Z_PARAM_FUNC_EX2(dest_fci, dest_fcc, check_null, separate, separate) #define Z_PARAM_FUNC(dest_fci, dest_fcc) \ Z_PARAM_FUNC_EX(dest_fci, dest_fcc, 0, 0) /* old "h" */ #define Z_PARAM_ARRAY_HT_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_array_ht(_arg, &dest, check_null, 0, separate))) { \ _expected_type = Z_EXPECTED_ARRAY; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_ARRAY_HT_EX(dest, check_null, separate) \ Z_PARAM_ARRAY_HT_EX2(dest, check_null, separate, separate) #define Z_PARAM_ARRAY_HT(dest) \ Z_PARAM_ARRAY_HT_EX(dest, 0, 0) /* old "H" */ #define Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_array_ht(_arg, &dest, check_null, 1, separate))) { \ _expected_type = Z_EXPECTED_ARRAY; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, check_null, separate) \ Z_PARAM_ARRAY_OR_OBJECT_HT_EX2(dest, check_null, separate, separate) #define Z_PARAM_ARRAY_OR_OBJECT_HT(dest) \ Z_PARAM_ARRAY_OR_OBJECT_HT_EX(dest, 0, 0) /* old "l" */ #define Z_PARAM_LONG_EX2(dest, is_null, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_long(_arg, &dest, &is_null, check_null, 0))) { \ _expected_type = Z_EXPECTED_LONG; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_LONG_EX(dest, is_null, check_null, separate) \ Z_PARAM_LONG_EX2(dest, is_null, check_null, separate, separate) #define Z_PARAM_LONG(dest) \ Z_PARAM_LONG_EX(dest, _dummy, 0, 0) /* old "L" */ #define Z_PARAM_STRICT_LONG_EX2(dest, is_null, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_long(_arg, &dest, &is_null, check_null, 1))) { \ _expected_type = Z_EXPECTED_LONG; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_STRICT_LONG_EX(dest, is_null, check_null, separate) \ Z_PARAM_STRICT_LONG_EX2(dest, is_null, check_null, separate, separate) #define Z_PARAM_STRICT_LONG(dest) \ Z_PARAM_STRICT_LONG_EX(dest, _dummy, 0, 0) /* old "o" */ #define Z_PARAM_OBJECT_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, NULL, check_null))) { \ _expected_type = Z_EXPECTED_OBJECT; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_OBJECT_EX(dest, check_null, separate) \ Z_PARAM_OBJECT_EX2(dest, check_null, separate, separate) #define Z_PARAM_OBJECT(dest) \ Z_PARAM_OBJECT_EX(dest, 0, 0) /* old "O" */ #define Z_PARAM_OBJECT_OF_CLASS_EX2(dest, _ce, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_object(_arg, &dest, _ce, check_null))) { \ if (_ce) { \ _error = ZSTR_VAL((_ce)->name); \ error_code = ZPP_ERROR_WRONG_CLASS; \ break; \ } else { \ _expected_type = Z_EXPECTED_OBJECT; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } \ } #define Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, check_null, separate) \ Z_PARAM_OBJECT_OF_CLASS_EX2(dest, _ce, check_null, separate, separate) #define Z_PARAM_OBJECT_OF_CLASS(dest, _ce) \ Z_PARAM_OBJECT_OF_CLASS_EX(dest, _ce, 0, 0) /* old "p" */ #define Z_PARAM_PATH_EX2(dest, dest_len, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_path(_arg, &dest, &dest_len, check_null))) { \ _expected_type = Z_EXPECTED_PATH; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_PATH_EX(dest, dest_len, check_null, separate) \ Z_PARAM_PATH_EX2(dest, dest_len, check_null, separate, separate) #define Z_PARAM_PATH(dest, dest_len) \ Z_PARAM_PATH_EX(dest, dest_len, 0, 0) /* old "P" */ #define Z_PARAM_PATH_STR_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_path_str(_arg, &dest, check_null))) { \ _expected_type = Z_EXPECTED_PATH; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_PATH_STR_EX(dest, check_null, separate) \ Z_PARAM_PATH_STR_EX2(dest, check_null, separate, separate) #define Z_PARAM_PATH_STR(dest) \ Z_PARAM_PATH_STR_EX(dest, 0, 0) /* old "r" */ #define Z_PARAM_RESOURCE_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_resource(_arg, &dest, check_null))) { \ _expected_type = Z_EXPECTED_RESOURCE; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_RESOURCE_EX(dest, check_null, separate) \ Z_PARAM_RESOURCE_EX2(dest, check_null, separate, separate) #define Z_PARAM_RESOURCE(dest) \ Z_PARAM_RESOURCE_EX(dest, 0, 0) /* old "s" */ #define Z_PARAM_STRING_EX2(dest, dest_len, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_string(_arg, &dest, &dest_len, check_null))) { \ _expected_type = Z_EXPECTED_STRING; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_STRING_EX(dest, dest_len, check_null, separate) \ Z_PARAM_STRING_EX2(dest, dest_len, check_null, separate, separate) #define Z_PARAM_STRING(dest, dest_len) \ Z_PARAM_STRING_EX(dest, dest_len, 0, 0) /* old "S" */ #define Z_PARAM_STR_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ if (UNEXPECTED(!zend_parse_arg_str(_arg, &dest, check_null))) { \ _expected_type = Z_EXPECTED_STRING; \ error_code = ZPP_ERROR_WRONG_ARG; \ break; \ } #define Z_PARAM_STR_EX(dest, check_null, separate) \ Z_PARAM_STR_EX2(dest, check_null, separate, separate) #define Z_PARAM_STR(dest) \ Z_PARAM_STR_EX(dest, 0, 0) /* old "z" */ #define Z_PARAM_ZVAL_EX2(dest, check_null, deref, separate) \ Z_PARAM_PROLOGUE(deref, separate); \ zend_parse_arg_zval_deref(_arg, &dest, check_null); #define Z_PARAM_ZVAL_EX(dest, check_null, separate) \ Z_PARAM_ZVAL_EX2(dest, check_null, separate, separate) #define Z_PARAM_ZVAL(dest) \ Z_PARAM_ZVAL_EX(dest, 0, 0) /* old "z" (with dereference) */ #define Z_PARAM_ZVAL_DEREF_EX(dest, check_null, separate) \ Z_PARAM_PROLOGUE(1, separate); \ zend_parse_arg_zval_deref(_arg, &dest, check_null); #define Z_PARAM_ZVAL_DEREF(dest) \ Z_PARAM_ZVAL_DEREF_EX(dest, 0, 0) /* old "+" and "*" */ #define Z_PARAM_VARIADIC_EX(spec, dest, dest_num, post_varargs) do { \ int _num_varargs = _num_args - _i - (post_varargs); \ if (EXPECTED(_num_varargs > 0)) { \ dest = _real_arg + 1; \ dest_num = _num_varargs; \ _i += _num_varargs; \ _real_arg += _num_varargs; \ } else { \ dest = NULL; \ dest_num = 0; \ } \ } while (0); #define Z_PARAM_VARIADIC(spec, dest, dest_num) \ Z_PARAM_VARIADIC_EX(spec, dest, dest_num, 0) /* End of new parameter parsing API */ /* Inlined implementations shared by new and old parameter parsing APIs */ ZEND_API int ZEND_FASTCALL zend_parse_arg_class(zval *arg, zend_class_entry **pce, int num, int check_null); ZEND_API int ZEND_FASTCALL zend_parse_arg_bool_slow(zval *arg, zend_bool *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_bool_weak(zval *arg, zend_bool *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_long_slow(zval *arg, zend_long *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_long_weak(zval *arg, zend_long *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_long_cap_slow(zval *arg, zend_long *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_long_cap_weak(zval *arg, zend_long *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_double_slow(zval *arg, double *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_double_weak(zval *arg, double *dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_str_slow(zval *arg, zend_string **dest); ZEND_API int ZEND_FASTCALL zend_parse_arg_str_weak(zval *arg, zend_string **dest); static zend_always_inline int zend_parse_arg_bool(zval *arg, zend_bool *dest, zend_bool *is_null, int check_null) { if (check_null) { *is_null = 0; } if (EXPECTED(Z_TYPE_P(arg) == IS_TRUE)) { *dest = 1; } else if (EXPECTED(Z_TYPE_P(arg) == IS_FALSE)) { *dest = 0; } else if (check_null && Z_TYPE_P(arg) == IS_NULL) { *is_null = 1; *dest = 0; } else { return zend_parse_arg_bool_slow(arg, dest); } return 1; } static zend_always_inline int zend_parse_arg_long(zval *arg, zend_long *dest, zend_bool *is_null, int check_null, int cap) { if (check_null) { *is_null = 0; } if (EXPECTED(Z_TYPE_P(arg) == IS_LONG)) { *dest = Z_LVAL_P(arg); } else if (check_null && Z_TYPE_P(arg) == IS_NULL) { *is_null = 1; *dest = 0; } else if (cap) { return zend_parse_arg_long_cap_slow(arg, dest); } else { return zend_parse_arg_long_slow(arg, dest); } return 1; } static zend_always_inline int zend_parse_arg_double(zval *arg, double *dest, zend_bool *is_null, int check_null) { if (check_null) { *is_null = 0; } if (EXPECTED(Z_TYPE_P(arg) == IS_DOUBLE)) { *dest = Z_DVAL_P(arg); } else if (check_null && Z_TYPE_P(arg) == IS_NULL) { *is_null = 1; *dest = 0.0; } else { return zend_parse_arg_double_slow(arg, dest); } return 1; } static zend_always_inline int zend_parse_arg_str(zval *arg, zend_string **dest, int check_null) { if (EXPECTED(Z_TYPE_P(arg) == IS_STRING)) { *dest = Z_STR_P(arg); } else if (check_null && Z_TYPE_P(arg) == IS_NULL) { *dest = NULL; } else { return zend_parse_arg_str_slow(arg, dest); } return 1; } static zend_always_inline int zend_parse_arg_string(zval *arg, char **dest, size_t *dest_len, int check_null) { zend_string *str; if (!zend_parse_arg_str(arg, &str, check_null)) { return 0; } if (check_null && UNEXPECTED(!str)) { *dest = NULL; *dest_len = 0; } else { *dest = ZSTR_VAL(str); *dest_len = ZSTR_LEN(str); } return 1; } static zend_always_inline int zend_parse_arg_path_str(zval *arg, zend_string **dest, int check_null) { if (!zend_parse_arg_str(arg, dest, check_null) || (*dest && UNEXPECTED(CHECK_NULL_PATH(ZSTR_VAL(*dest), ZSTR_LEN(*dest))))) { return 0; } return 1; } static zend_always_inline int zend_parse_arg_path(zval *arg, char **dest, size_t *dest_len, int check_null) { zend_string *str; if (!zend_parse_arg_path_str(arg, &str, check_null)) { return 0; } if (check_null && UNEXPECTED(!str)) { *dest = NULL; *dest_len = 0; } else { *dest = ZSTR_VAL(str); *dest_len = ZSTR_LEN(str); } return 1; } static zend_always_inline int zend_parse_arg_array(zval *arg, zval **dest, int check_null, int or_object) { if (EXPECTED(Z_TYPE_P(arg) == IS_ARRAY) || (or_object && EXPECTED(Z_TYPE_P(arg) == IS_OBJECT))) { *dest = arg; } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { *dest = NULL; } else { return 0; } return 1; } static zend_always_inline int zend_parse_arg_array_ht(zval *arg, HashTable **dest, int check_null, int or_object, int separate) { if (EXPECTED(Z_TYPE_P(arg) == IS_ARRAY)) { *dest = Z_ARRVAL_P(arg); } else if (or_object && EXPECTED(Z_TYPE_P(arg) == IS_OBJECT)) { if (separate && Z_OBJ_P(arg)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(arg)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(arg)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(arg)->properties); } Z_OBJ_P(arg)->properties = zend_array_dup(Z_OBJ_P(arg)->properties); } *dest = Z_OBJ_HT_P(arg)->get_properties(arg); } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { *dest = NULL; } else { return 0; } return 1; } static zend_always_inline int zend_parse_arg_object(zval *arg, zval **dest, zend_class_entry *ce, int check_null) { if (EXPECTED(Z_TYPE_P(arg) == IS_OBJECT) && (!ce || EXPECTED(instanceof_function(Z_OBJCE_P(arg), ce) != 0))) { *dest = arg; } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { *dest = NULL; } else { return 0; } return 1; } static zend_always_inline int zend_parse_arg_resource(zval *arg, zval **dest, int check_null) { if (EXPECTED(Z_TYPE_P(arg) == IS_RESOURCE)) { *dest = arg; } else if (check_null && EXPECTED(Z_TYPE_P(arg) == IS_NULL)) { *dest = NULL; } else { return 0; } return 1; } static zend_always_inline int zend_parse_arg_func(zval *arg, zend_fcall_info *dest_fci, zend_fcall_info_cache *dest_fcc, int check_null, char **error) { if (check_null && UNEXPECTED(Z_TYPE_P(arg) == IS_NULL)) { dest_fci->size = 0; dest_fcc->function_handler = NULL; *error = NULL; } else if (UNEXPECTED(zend_fcall_info_init(arg, 0, dest_fci, dest_fcc, NULL, error) != SUCCESS)) { return 0; } return 1; } static zend_always_inline void zend_parse_arg_zval(zval *arg, zval **dest, int check_null) { *dest = (check_null && (UNEXPECTED(Z_TYPE_P(arg) == IS_NULL) || (UNEXPECTED(Z_ISREF_P(arg)) && UNEXPECTED(Z_TYPE_P(Z_REFVAL_P(arg)) == IS_NULL)))) ? NULL : arg; } static zend_always_inline void zend_parse_arg_zval_deref(zval *arg, zval **dest, int check_null) { *dest = (check_null && UNEXPECTED(Z_TYPE_P(arg) == IS_NULL)) ? NULL : arg; } END_EXTERN_C() #endif /* ZEND_API_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!?EZend/zend_hash.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_HASH_H #define ZEND_HASH_H #include "zend.h" #define HASH_KEY_IS_STRING 1 #define HASH_KEY_IS_LONG 2 #define HASH_KEY_NON_EXISTENT 3 #define HASH_UPDATE (1<<0) #define HASH_ADD (1<<1) #define HASH_UPDATE_INDIRECT (1<<2) #define HASH_ADD_NEW (1<<3) #define HASH_ADD_NEXT (1<<4) #define HASH_FLAG_CONSISTENCY ((1<<0) | (1<<1)) #define HASH_FLAG_PACKED (1<<2) #define HASH_FLAG_INITIALIZED (1<<3) #define HASH_FLAG_STATIC_KEYS (1<<4) /* long and interned strings */ #define HASH_FLAG_HAS_EMPTY_IND (1<<5) #define HASH_FLAG_ALLOW_COW_VIOLATION (1<<6) /* Only the low byte are real flags */ #define HASH_FLAG_MASK 0xff #define HT_FLAGS(ht) (ht)->u.flags #define HT_IS_PACKED(ht) \ ((HT_FLAGS(ht) & HASH_FLAG_PACKED) != 0) #define HT_IS_WITHOUT_HOLES(ht) \ ((ht)->nNumUsed == (ht)->nNumOfElements) #define HT_HAS_STATIC_KEYS_ONLY(ht) \ ((HT_FLAGS(ht) & (HASH_FLAG_PACKED|HASH_FLAG_STATIC_KEYS)) != 0) #if ZEND_DEBUG # define HT_ALLOW_COW_VIOLATION(ht) HT_FLAGS(ht) |= HASH_FLAG_ALLOW_COW_VIOLATION #else # define HT_ALLOW_COW_VIOLATION(ht) #endif #define HT_ITERATORS_COUNT(ht) (ht)->u.v.nIteratorsCount #define HT_ITERATORS_OVERFLOW(ht) (HT_ITERATORS_COUNT(ht) == 0xff) #define HT_HAS_ITERATORS(ht) (HT_ITERATORS_COUNT(ht) != 0) #define HT_SET_ITERATORS_COUNT(ht, iters) \ do { HT_ITERATORS_COUNT(ht) = (iters); } while (0) #define HT_INC_ITERATORS_COUNT(ht) \ HT_SET_ITERATORS_COUNT(ht, HT_ITERATORS_COUNT(ht) + 1) #define HT_DEC_ITERATORS_COUNT(ht) \ HT_SET_ITERATORS_COUNT(ht, HT_ITERATORS_COUNT(ht) - 1) extern ZEND_API const HashTable zend_empty_array; #define ZVAL_EMPTY_ARRAY(z) do { \ zval *__z = (z); \ Z_ARR_P(__z) = (zend_array*)&zend_empty_array; \ Z_TYPE_INFO_P(__z) = IS_ARRAY; \ } while (0) typedef struct _zend_hash_key { zend_ulong h; zend_string *key; } zend_hash_key; typedef zend_bool (*merge_checker_func_t)(HashTable *target_ht, zval *source_data, zend_hash_key *hash_key, void *pParam); BEGIN_EXTERN_C() /* startup/shutdown */ ZEND_API void ZEND_FASTCALL _zend_hash_init(HashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent); ZEND_API void ZEND_FASTCALL zend_hash_destroy(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_clean(HashTable *ht); #define zend_hash_init(ht, nSize, pHashFunction, pDestructor, persistent) \ _zend_hash_init((ht), (nSize), (pDestructor), (persistent)) #define zend_hash_init_ex(ht, nSize, pHashFunction, pDestructor, persistent, bApplyProtection) \ _zend_hash_init((ht), (nSize), (pDestructor), (persistent)) ZEND_API void ZEND_FASTCALL zend_hash_real_init(HashTable *ht, zend_bool packed); ZEND_API void ZEND_FASTCALL zend_hash_real_init_packed(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_real_init_mixed(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_packed_to_hash(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_to_packed(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_extend(HashTable *ht, uint32_t nSize, zend_bool packed); ZEND_API void ZEND_FASTCALL zend_hash_discard(HashTable *ht, uint32_t nNumUsed); /* additions/updates/changes */ ZEND_API zval* ZEND_FASTCALL zend_hash_add_or_update(HashTable *ht, zend_string *key, zval *pData, uint32_t flag); ZEND_API zval* ZEND_FASTCALL zend_hash_update(HashTable *ht, zend_string *key,zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_update_ind(HashTable *ht, zend_string *key,zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_add(HashTable *ht, zend_string *key,zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_add_new(HashTable *ht, zend_string *key,zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_str_add_or_update(HashTable *ht, const char *key, size_t len, zval *pData, uint32_t flag); ZEND_API zval* ZEND_FASTCALL zend_hash_str_update(HashTable *ht, const char *key, size_t len, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_str_update_ind(HashTable *ht, const char *key, size_t len, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_str_add(HashTable *ht, const char *key, size_t len, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_str_add_new(HashTable *ht, const char *key, size_t len, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_or_update(HashTable *ht, zend_ulong h, zval *pData, uint32_t flag); ZEND_API zval* ZEND_FASTCALL zend_hash_index_add(HashTable *ht, zend_ulong h, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_new(HashTable *ht, zend_ulong h, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_index_update(HashTable *ht, zend_ulong h, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_next_index_insert(HashTable *ht, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_next_index_insert_new(HashTable *ht, zval *pData); ZEND_API zval* ZEND_FASTCALL zend_hash_index_add_empty_element(HashTable *ht, zend_ulong h); ZEND_API zval* ZEND_FASTCALL zend_hash_add_empty_element(HashTable *ht, zend_string *key); ZEND_API zval* ZEND_FASTCALL zend_hash_str_add_empty_element(HashTable *ht, const char *key, size_t len); #define ZEND_HASH_APPLY_KEEP 0 #define ZEND_HASH_APPLY_REMOVE 1<<0 #define ZEND_HASH_APPLY_STOP 1<<1 typedef int (*apply_func_t)(zval *pDest); typedef int (*apply_func_arg_t)(zval *pDest, void *argument); typedef int (*apply_func_args_t)(zval *pDest, int num_args, va_list args, zend_hash_key *hash_key); ZEND_API void ZEND_FASTCALL zend_hash_graceful_destroy(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_graceful_reverse_destroy(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_hash_apply(HashTable *ht, apply_func_t apply_func); ZEND_API void ZEND_FASTCALL zend_hash_apply_with_argument(HashTable *ht, apply_func_arg_t apply_func, void *); ZEND_API void zend_hash_apply_with_arguments(HashTable *ht, apply_func_args_t apply_func, int, ...); /* This function should be used with special care (in other words, * it should usually not be used). When used with the ZEND_HASH_APPLY_STOP * return value, it assumes things about the order of the elements in the hash. * Also, it does not provide the same kind of reentrancy protection that * the standard apply functions do. */ ZEND_API void ZEND_FASTCALL zend_hash_reverse_apply(HashTable *ht, apply_func_t apply_func); /* Deletes */ ZEND_API int ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key); ZEND_API int ZEND_FASTCALL zend_hash_del_ind(HashTable *ht, zend_string *key); ZEND_API int ZEND_FASTCALL zend_hash_str_del(HashTable *ht, const char *key, size_t len); ZEND_API int ZEND_FASTCALL zend_hash_str_del_ind(HashTable *ht, const char *key, size_t len); ZEND_API int ZEND_FASTCALL zend_hash_index_del(HashTable *ht, zend_ulong h); ZEND_API void ZEND_FASTCALL zend_hash_del_bucket(HashTable *ht, Bucket *p); /* Data retreival */ ZEND_API zval* ZEND_FASTCALL zend_hash_find(const HashTable *ht, zend_string *key); ZEND_API zval* ZEND_FASTCALL zend_hash_str_find(const HashTable *ht, const char *key, size_t len); ZEND_API zval* ZEND_FASTCALL zend_hash_index_find(const HashTable *ht, zend_ulong h); ZEND_API zval* ZEND_FASTCALL _zend_hash_index_find(const HashTable *ht, zend_ulong h); /* The same as zend_hash_find(), but hash value of the key must be already calculated */ ZEND_API zval* ZEND_FASTCALL _zend_hash_find_known_hash(const HashTable *ht, zend_string *key); static zend_always_inline zval *zend_hash_find_ex(const HashTable *ht, zend_string *key, zend_bool known_hash) { if (known_hash) { return _zend_hash_find_known_hash(ht, key); } else { return zend_hash_find(ht, key); } } #define ZEND_HASH_INDEX_FIND(_ht, _h, _ret, _not_found) do { \ if (EXPECTED(HT_FLAGS(_ht) & HASH_FLAG_PACKED)) { \ if (EXPECTED((zend_ulong)(_h) < (zend_ulong)(_ht)->nNumUsed)) { \ _ret = &_ht->arData[_h].val; \ if (UNEXPECTED(Z_TYPE_P(_ret) == IS_UNDEF)) { \ goto _not_found; \ } \ } else { \ goto _not_found; \ } \ } else { \ _ret = _zend_hash_index_find(_ht, _h); \ if (UNEXPECTED(_ret == NULL)) { \ goto _not_found; \ } \ } \ } while (0) /* Misc */ ZEND_API zend_bool ZEND_FASTCALL zend_hash_exists(const HashTable *ht, zend_string *key); ZEND_API zend_bool ZEND_FASTCALL zend_hash_str_exists(const HashTable *ht, const char *str, size_t len); ZEND_API zend_bool ZEND_FASTCALL zend_hash_index_exists(const HashTable *ht, zend_ulong h); /* traversing */ ZEND_API HashPosition ZEND_FASTCALL zend_hash_get_current_pos(const HashTable *ht); #define zend_hash_has_more_elements_ex(ht, pos) \ (zend_hash_get_current_key_type_ex(ht, pos) == HASH_KEY_NON_EXISTENT ? FAILURE : SUCCESS) ZEND_API int ZEND_FASTCALL zend_hash_move_forward_ex(HashTable *ht, HashPosition *pos); ZEND_API int ZEND_FASTCALL zend_hash_move_backwards_ex(HashTable *ht, HashPosition *pos); ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_ex(const HashTable *ht, zend_string **str_index, zend_ulong *num_index, HashPosition *pos); ZEND_API void ZEND_FASTCALL zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos); ZEND_API int ZEND_FASTCALL zend_hash_get_current_key_type_ex(HashTable *ht, HashPosition *pos); ZEND_API zval* ZEND_FASTCALL zend_hash_get_current_data_ex(HashTable *ht, HashPosition *pos); ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_reset_ex(HashTable *ht, HashPosition *pos); ZEND_API void ZEND_FASTCALL zend_hash_internal_pointer_end_ex(HashTable *ht, HashPosition *pos); #define zend_hash_has_more_elements(ht) \ zend_hash_has_more_elements_ex(ht, &(ht)->nInternalPointer) #define zend_hash_move_forward(ht) \ zend_hash_move_forward_ex(ht, &(ht)->nInternalPointer) #define zend_hash_move_backwards(ht) \ zend_hash_move_backwards_ex(ht, &(ht)->nInternalPointer) #define zend_hash_get_current_key(ht, str_index, num_index) \ zend_hash_get_current_key_ex(ht, str_index, num_index, &(ht)->nInternalPointer) #define zend_hash_get_current_key_zval(ht, key) \ zend_hash_get_current_key_zval_ex(ht, key, &(ht)->nInternalPointer) #define zend_hash_get_current_key_type(ht) \ zend_hash_get_current_key_type_ex(ht, &(ht)->nInternalPointer) #define zend_hash_get_current_data(ht) \ zend_hash_get_current_data_ex(ht, &(ht)->nInternalPointer) #define zend_hash_internal_pointer_reset(ht) \ zend_hash_internal_pointer_reset_ex(ht, &(ht)->nInternalPointer) #define zend_hash_internal_pointer_end(ht) \ zend_hash_internal_pointer_end_ex(ht, &(ht)->nInternalPointer) /* Copying, merging and sorting */ ZEND_API void ZEND_FASTCALL zend_hash_copy(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor); ZEND_API void ZEND_FASTCALL zend_hash_merge(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, zend_bool overwrite); ZEND_API void ZEND_FASTCALL zend_hash_merge_ex(HashTable *target, HashTable *source, copy_ctor_func_t pCopyConstructor, merge_checker_func_t pMergeSource, void *pParam); ZEND_API void zend_hash_bucket_swap(Bucket *p, Bucket *q); ZEND_API void zend_hash_bucket_renum_swap(Bucket *p, Bucket *q); ZEND_API void zend_hash_bucket_packed_swap(Bucket *p, Bucket *q); ZEND_API int zend_hash_compare(HashTable *ht1, HashTable *ht2, compare_func_t compar, zend_bool ordered); ZEND_API int ZEND_FASTCALL zend_hash_sort_ex(HashTable *ht, sort_func_t sort_func, compare_func_t compare_func, zend_bool renumber); ZEND_API zval* ZEND_FASTCALL zend_hash_minmax(const HashTable *ht, compare_func_t compar, uint32_t flag); #define zend_hash_sort(ht, compare_func, renumber) \ zend_hash_sort_ex(ht, zend_sort, compare_func, renumber) #define zend_hash_num_elements(ht) \ (ht)->nNumOfElements #define zend_hash_next_free_element(ht) \ (ht)->nNextFreeElement ZEND_API int ZEND_FASTCALL zend_hash_rehash(HashTable *ht); #if !ZEND_DEBUG && defined(HAVE_BUILTIN_CONSTANT_P) # define zend_new_array(size) \ (__builtin_constant_p(size) ? \ ((((uint32_t)(size)) <= HT_MIN_SIZE) ? \ _zend_new_array_0() \ : \ _zend_new_array((size)) \ ) \ : \ _zend_new_array((size)) \ ) #else # define zend_new_array(size) \ _zend_new_array(size) #endif ZEND_API HashTable* ZEND_FASTCALL _zend_new_array_0(void); ZEND_API HashTable* ZEND_FASTCALL _zend_new_array(uint32_t size); ZEND_API uint32_t zend_array_count(HashTable *ht); ZEND_API HashTable* ZEND_FASTCALL zend_array_dup(HashTable *source); ZEND_API void ZEND_FASTCALL zend_array_destroy(HashTable *ht); ZEND_API void ZEND_FASTCALL zend_symtable_clean(HashTable *ht); ZEND_API HashTable* ZEND_FASTCALL zend_symtable_to_proptable(HashTable *ht); ZEND_API HashTable* ZEND_FASTCALL zend_proptable_to_symtable(HashTable *ht, zend_bool always_duplicate); ZEND_API int ZEND_FASTCALL _zend_handle_numeric_str_ex(const char *key, size_t length, zend_ulong *idx); ZEND_API uint32_t ZEND_FASTCALL zend_hash_iterator_add(HashTable *ht, HashPosition pos); ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos(uint32_t idx, HashTable *ht); ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterator_pos_ex(uint32_t idx, zval *array); ZEND_API void ZEND_FASTCALL zend_hash_iterator_del(uint32_t idx); ZEND_API HashPosition ZEND_FASTCALL zend_hash_iterators_lower_pos(HashTable *ht, HashPosition start); ZEND_API void ZEND_FASTCALL _zend_hash_iterators_update(HashTable *ht, HashPosition from, HashPosition to); ZEND_API void ZEND_FASTCALL zend_hash_iterators_advance(HashTable *ht, HashPosition step); static zend_always_inline void zend_hash_iterators_update(HashTable *ht, HashPosition from, HashPosition to) { if (UNEXPECTED(HT_HAS_ITERATORS(ht))) { _zend_hash_iterators_update(ht, from, to); } } END_EXTERN_C() #define ZEND_INIT_SYMTABLE(ht) \ ZEND_INIT_SYMTABLE_EX(ht, 8, 0) #define ZEND_INIT_SYMTABLE_EX(ht, n, persistent) \ zend_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent) static zend_always_inline int _zend_handle_numeric_str(const char *key, size_t length, zend_ulong *idx) { const char *tmp = key; if (EXPECTED(*tmp > '9')) { return 0; } else if (*tmp < '0') { if (*tmp != '-') { return 0; } tmp++; if (*tmp > '9' || *tmp < '0') { return 0; } } return _zend_handle_numeric_str_ex(key, length, idx); } #define ZEND_HANDLE_NUMERIC_STR(key, length, idx) \ _zend_handle_numeric_str(key, length, &idx) #define ZEND_HANDLE_NUMERIC(key, idx) \ ZEND_HANDLE_NUMERIC_STR(ZSTR_VAL(key), ZSTR_LEN(key), idx) static zend_always_inline zval *zend_hash_find_ind(const HashTable *ht, zend_string *key) { zval *zv; zv = zend_hash_find(ht, key); return (zv && Z_TYPE_P(zv) == IS_INDIRECT) ? ((Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF) ? Z_INDIRECT_P(zv) : NULL) : zv; } static zend_always_inline zval *zend_hash_find_ex_ind(const HashTable *ht, zend_string *key, zend_bool known_hash) { zval *zv; zv = zend_hash_find_ex(ht, key, known_hash); return (zv && Z_TYPE_P(zv) == IS_INDIRECT) ? ((Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF) ? Z_INDIRECT_P(zv) : NULL) : zv; } static zend_always_inline int zend_hash_exists_ind(const HashTable *ht, zend_string *key) { zval *zv; zv = zend_hash_find(ht, key); return zv && (Z_TYPE_P(zv) != IS_INDIRECT || Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF); } static zend_always_inline zval *zend_hash_str_find_ind(const HashTable *ht, const char *str, size_t len) { zval *zv; zv = zend_hash_str_find(ht, str, len); return (zv && Z_TYPE_P(zv) == IS_INDIRECT) ? ((Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF) ? Z_INDIRECT_P(zv) : NULL) : zv; } static zend_always_inline int zend_hash_str_exists_ind(const HashTable *ht, const char *str, size_t len) { zval *zv; zv = zend_hash_str_find(ht, str, len); return zv && (Z_TYPE_P(zv) != IS_INDIRECT || Z_TYPE_P(Z_INDIRECT_P(zv)) != IS_UNDEF); } static zend_always_inline zval *zend_symtable_add_new(HashTable *ht, zend_string *key, zval *pData) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_add_new(ht, idx, pData); } else { return zend_hash_add_new(ht, key, pData); } } static zend_always_inline zval *zend_symtable_update(HashTable *ht, zend_string *key, zval *pData) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_update(ht, idx, pData); } else { return zend_hash_update(ht, key, pData); } } static zend_always_inline zval *zend_symtable_update_ind(HashTable *ht, zend_string *key, zval *pData) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_update(ht, idx, pData); } else { return zend_hash_update_ind(ht, key, pData); } } static zend_always_inline int zend_symtable_del(HashTable *ht, zend_string *key) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_del(ht, idx); } else { return zend_hash_del(ht, key); } } static zend_always_inline int zend_symtable_del_ind(HashTable *ht, zend_string *key) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_del(ht, idx); } else { return zend_hash_del_ind(ht, key); } } static zend_always_inline zval *zend_symtable_find(const HashTable *ht, zend_string *key) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_find(ht, idx); } else { return zend_hash_find(ht, key); } } static zend_always_inline zval *zend_symtable_find_ind(const HashTable *ht, zend_string *key) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_find(ht, idx); } else { return zend_hash_find_ind(ht, key); } } static zend_always_inline int zend_symtable_exists(HashTable *ht, zend_string *key) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_exists(ht, idx); } else { return zend_hash_exists(ht, key); } } static zend_always_inline int zend_symtable_exists_ind(HashTable *ht, zend_string *key) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC(key, idx)) { return zend_hash_index_exists(ht, idx); } else { return zend_hash_exists_ind(ht, key); } } static zend_always_inline zval *zend_symtable_str_update(HashTable *ht, const char *str, size_t len, zval *pData) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_update(ht, idx, pData); } else { return zend_hash_str_update(ht, str, len, pData); } } static zend_always_inline zval *zend_symtable_str_update_ind(HashTable *ht, const char *str, size_t len, zval *pData) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_update(ht, idx, pData); } else { return zend_hash_str_update_ind(ht, str, len, pData); } } static zend_always_inline int zend_symtable_str_del(HashTable *ht, const char *str, size_t len) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_del(ht, idx); } else { return zend_hash_str_del(ht, str, len); } } static zend_always_inline int zend_symtable_str_del_ind(HashTable *ht, const char *str, size_t len) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_del(ht, idx); } else { return zend_hash_str_del_ind(ht, str, len); } } static zend_always_inline zval *zend_symtable_str_find(HashTable *ht, const char *str, size_t len) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_find(ht, idx); } else { return zend_hash_str_find(ht, str, len); } } static zend_always_inline int zend_symtable_str_exists(HashTable *ht, const char *str, size_t len) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_exists(ht, idx); } else { return zend_hash_str_exists(ht, str, len); } } static zend_always_inline void *zend_hash_add_ptr(HashTable *ht, zend_string *key, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_add(ht, key, &tmp); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_add_new_ptr(HashTable *ht, zend_string *key, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_add_new(ht, key, &tmp); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_str_add_ptr(HashTable *ht, const char *str, size_t len, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_str_add(ht, str, len, &tmp); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_str_add_new_ptr(HashTable *ht, const char *str, size_t len, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_str_add_new(ht, str, len, &tmp); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_update_ptr(HashTable *ht, zend_string *key, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_update(ht, key, &tmp); ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } static zend_always_inline void *zend_hash_str_update_ptr(HashTable *ht, const char *str, size_t len, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_str_update(ht, str, len, &tmp); ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } static zend_always_inline void *zend_hash_add_mem(HashTable *ht, zend_string *key, void *pData, size_t size) { zval tmp, *zv; ZVAL_PTR(&tmp, NULL); if ((zv = zend_hash_add(ht, key, &tmp))) { Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(Z_PTR_P(zv), pData, size); return Z_PTR_P(zv); } return NULL; } static zend_always_inline void *zend_hash_add_new_mem(HashTable *ht, zend_string *key, void *pData, size_t size) { zval tmp, *zv; ZVAL_PTR(&tmp, NULL); if ((zv = zend_hash_add_new(ht, key, &tmp))) { Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(Z_PTR_P(zv), pData, size); return Z_PTR_P(zv); } return NULL; } static zend_always_inline void *zend_hash_str_add_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size) { zval tmp, *zv; ZVAL_PTR(&tmp, NULL); if ((zv = zend_hash_str_add(ht, str, len, &tmp))) { Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(Z_PTR_P(zv), pData, size); return Z_PTR_P(zv); } return NULL; } static zend_always_inline void *zend_hash_str_add_new_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size) { zval tmp, *zv; ZVAL_PTR(&tmp, NULL); if ((zv = zend_hash_str_add_new(ht, str, len, &tmp))) { Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(Z_PTR_P(zv), pData, size); return Z_PTR_P(zv); } return NULL; } static zend_always_inline void *zend_hash_update_mem(HashTable *ht, zend_string *key, void *pData, size_t size) { void *p; p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(p, pData, size); return zend_hash_update_ptr(ht, key, p); } static zend_always_inline void *zend_hash_str_update_mem(HashTable *ht, const char *str, size_t len, void *pData, size_t size) { void *p; p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(p, pData, size); return zend_hash_str_update_ptr(ht, str, len, p); } static zend_always_inline void *zend_hash_index_add_ptr(HashTable *ht, zend_ulong h, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_index_add(ht, h, &tmp); return zv ? Z_PTR_P(zv) : NULL; } static zend_always_inline void *zend_hash_index_add_new_ptr(HashTable *ht, zend_ulong h, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_index_add_new(ht, h, &tmp); return zv ? Z_PTR_P(zv) : NULL; } static zend_always_inline void *zend_hash_index_update_ptr(HashTable *ht, zend_ulong h, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_index_update(ht, h, &tmp); ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } static zend_always_inline void *zend_hash_index_add_mem(HashTable *ht, zend_ulong h, void *pData, size_t size) { zval tmp, *zv; ZVAL_PTR(&tmp, NULL); if ((zv = zend_hash_index_add(ht, h, &tmp))) { Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(Z_PTR_P(zv), pData, size); return Z_PTR_P(zv); } return NULL; } static zend_always_inline void *zend_hash_next_index_insert_ptr(HashTable *ht, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_hash_next_index_insert(ht, &tmp); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_index_update_mem(HashTable *ht, zend_ulong h, void *pData, size_t size) { void *p; p = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(p, pData, size); return zend_hash_index_update_ptr(ht, h, p); } static zend_always_inline void *zend_hash_next_index_insert_mem(HashTable *ht, void *pData, size_t size) { zval tmp, *zv; ZVAL_PTR(&tmp, NULL); if ((zv = zend_hash_next_index_insert(ht, &tmp))) { Z_PTR_P(zv) = pemalloc(size, GC_FLAGS(ht) & IS_ARRAY_PERSISTENT); memcpy(Z_PTR_P(zv), pData, size); return Z_PTR_P(zv); } return NULL; } static zend_always_inline void *zend_hash_find_ptr(const HashTable *ht, zend_string *key) { zval *zv; zv = zend_hash_find(ht, key); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_find_ex_ptr(const HashTable *ht, zend_string *key, zend_bool known_hash) { zval *zv; zv = zend_hash_find_ex(ht, key, known_hash); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_str_find_ptr(const HashTable *ht, const char *str, size_t len) { zval *zv; zv = zend_hash_str_find(ht, str, len); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline void *zend_hash_index_find_ptr(const HashTable *ht, zend_ulong h) { zval *zv; zv = zend_hash_index_find(ht, h); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } static zend_always_inline zval *zend_hash_index_find_deref(HashTable *ht, zend_ulong h) { zval *zv = zend_hash_index_find(ht, h); if (zv) { ZVAL_DEREF(zv); } return zv; } static zend_always_inline zval *zend_hash_find_deref(HashTable *ht, zend_string *str) { zval *zv = zend_hash_find(ht, str); if (zv) { ZVAL_DEREF(zv); } return zv; } static zend_always_inline zval *zend_hash_str_find_deref(HashTable *ht, const char *str, size_t len) { zval *zv = zend_hash_str_find(ht, str, len); if (zv) { ZVAL_DEREF(zv); } return zv; } static zend_always_inline void *zend_symtable_str_find_ptr(HashTable *ht, const char *str, size_t len) { zend_ulong idx; if (ZEND_HANDLE_NUMERIC_STR(str, len, idx)) { return zend_hash_index_find_ptr(ht, idx); } else { return zend_hash_str_find_ptr(ht, str, len); } } static zend_always_inline void *zend_hash_get_current_data_ptr_ex(HashTable *ht, HashPosition *pos) { zval *zv; zv = zend_hash_get_current_data_ex(ht, pos); if (zv) { ZEND_ASSUME(Z_PTR_P(zv)); return Z_PTR_P(zv); } else { return NULL; } } #define zend_hash_get_current_data_ptr(ht) \ zend_hash_get_current_data_ptr_ex(ht, &(ht)->nInternalPointer) #define ZEND_HASH_FOREACH(_ht, indirect) do { \ HashTable *__ht = (_ht); \ Bucket *_p = __ht->arData; \ Bucket *_end = _p + __ht->nNumUsed; \ for (; _p != _end; _p++) { \ zval *_z = &_p->val; \ if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \ _z = Z_INDIRECT_P(_z); \ } \ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue; #define ZEND_HASH_REVERSE_FOREACH(_ht, indirect) do { \ HashTable *__ht = (_ht); \ uint32_t _idx = __ht->nNumUsed; \ Bucket *_p = __ht->arData + _idx; \ zval *_z; \ for (_idx = __ht->nNumUsed; _idx > 0; _idx--) { \ _p--; \ _z = &_p->val; \ if (indirect && Z_TYPE_P(_z) == IS_INDIRECT) { \ _z = Z_INDIRECT_P(_z); \ } \ if (UNEXPECTED(Z_TYPE_P(_z) == IS_UNDEF)) continue; #define ZEND_HASH_FOREACH_END() \ } \ } while (0) #define ZEND_HASH_FOREACH_END_DEL() \ __ht->nNumOfElements--; \ do { \ uint32_t j = HT_IDX_TO_HASH(_idx - 1); \ uint32_t nIndex = _p->h | __ht->nTableMask; \ uint32_t i = HT_HASH(__ht, nIndex); \ if (UNEXPECTED(j != i)) { \ Bucket *prev = HT_HASH_TO_BUCKET(__ht, i); \ while (Z_NEXT(prev->val) != j) { \ i = Z_NEXT(prev->val); \ prev = HT_HASH_TO_BUCKET(__ht, i); \ } \ Z_NEXT(prev->val) = Z_NEXT(_p->val); \ } else { \ HT_HASH(__ht, nIndex) = Z_NEXT(_p->val); \ } \ } while (0); \ } \ __ht->nNumUsed = _idx; \ } while (0) #define ZEND_HASH_FOREACH_BUCKET(ht, _bucket) \ ZEND_HASH_FOREACH(ht, 0); \ _bucket = _p; #define ZEND_HASH_FOREACH_VAL(ht, _val) \ ZEND_HASH_FOREACH(ht, 0); \ _val = _z; #define ZEND_HASH_FOREACH_VAL_IND(ht, _val) \ ZEND_HASH_FOREACH(ht, 1); \ _val = _z; #define ZEND_HASH_FOREACH_PTR(ht, _ptr) \ ZEND_HASH_FOREACH(ht, 0); \ _ptr = Z_PTR_P(_z); #define ZEND_HASH_FOREACH_NUM_KEY(ht, _h) \ ZEND_HASH_FOREACH(ht, 0); \ _h = _p->h; #define ZEND_HASH_FOREACH_STR_KEY(ht, _key) \ ZEND_HASH_FOREACH(ht, 0); \ _key = _p->key; #define ZEND_HASH_FOREACH_KEY(ht, _h, _key) \ ZEND_HASH_FOREACH(ht, 0); \ _h = _p->h; \ _key = _p->key; #define ZEND_HASH_FOREACH_NUM_KEY_VAL(ht, _h, _val) \ ZEND_HASH_FOREACH(ht, 0); \ _h = _p->h; \ _val = _z; #define ZEND_HASH_FOREACH_STR_KEY_VAL(ht, _key, _val) \ ZEND_HASH_FOREACH(ht, 0); \ _key = _p->key; \ _val = _z; #define ZEND_HASH_FOREACH_KEY_VAL(ht, _h, _key, _val) \ ZEND_HASH_FOREACH(ht, 0); \ _h = _p->h; \ _key = _p->key; \ _val = _z; #define ZEND_HASH_FOREACH_STR_KEY_VAL_IND(ht, _key, _val) \ ZEND_HASH_FOREACH(ht, 1); \ _key = _p->key; \ _val = _z; #define ZEND_HASH_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \ ZEND_HASH_FOREACH(ht, 1); \ _h = _p->h; \ _key = _p->key; \ _val = _z; #define ZEND_HASH_FOREACH_NUM_KEY_PTR(ht, _h, _ptr) \ ZEND_HASH_FOREACH(ht, 0); \ _h = _p->h; \ _ptr = Z_PTR_P(_z); #define ZEND_HASH_FOREACH_STR_KEY_PTR(ht, _key, _ptr) \ ZEND_HASH_FOREACH(ht, 0); \ _key = _p->key; \ _ptr = Z_PTR_P(_z); #define ZEND_HASH_FOREACH_KEY_PTR(ht, _h, _key, _ptr) \ ZEND_HASH_FOREACH(ht, 0); \ _h = _p->h; \ _key = _p->key; \ _ptr = Z_PTR_P(_z); #define ZEND_HASH_REVERSE_FOREACH_BUCKET(ht, _bucket) \ ZEND_HASH_REVERSE_FOREACH(ht, 0); \ _bucket = _p; #define ZEND_HASH_REVERSE_FOREACH_VAL(ht, _val) \ ZEND_HASH_REVERSE_FOREACH(ht, 0); \ _val = _z; #define ZEND_HASH_REVERSE_FOREACH_PTR(ht, _ptr) \ ZEND_HASH_REVERSE_FOREACH(ht, 0); \ _ptr = Z_PTR_P(_z); #define ZEND_HASH_REVERSE_FOREACH_VAL_IND(ht, _val) \ ZEND_HASH_REVERSE_FOREACH(ht, 1); \ _val = _z; #define ZEND_HASH_REVERSE_FOREACH_STR_KEY_VAL(ht, _key, _val) \ ZEND_HASH_REVERSE_FOREACH(ht, 0); \ _key = _p->key; \ _val = _z; #define ZEND_HASH_REVERSE_FOREACH_KEY_VAL(ht, _h, _key, _val) \ ZEND_HASH_REVERSE_FOREACH(ht, 0); \ _h = _p->h; \ _key = _p->key; \ _val = _z; #define ZEND_HASH_REVERSE_FOREACH_KEY_VAL_IND(ht, _h, _key, _val) \ ZEND_HASH_REVERSE_FOREACH(ht, 1); \ _h = _p->h; \ _key = _p->key; \ _val = _z; /* The following macros are useful to insert a sequence of new elements * of packed array. They may be use insted of series of * zend_hash_next_index_insert_new() * (HashTable must have enough free buckets). */ #define ZEND_HASH_FILL_PACKED(ht) do { \ HashTable *__fill_ht = (ht); \ Bucket *__fill_bkt = __fill_ht->arData + __fill_ht->nNumUsed; \ uint32_t __fill_idx = __fill_ht->nNumUsed; \ ZEND_ASSERT(HT_FLAGS(__fill_ht) & HASH_FLAG_PACKED); #define ZEND_HASH_FILL_ADD(_val) do { \ ZVAL_COPY_VALUE(&__fill_bkt->val, _val); \ __fill_bkt->h = (__fill_idx); \ __fill_bkt->key = NULL; \ __fill_bkt++; \ __fill_idx++; \ } while (0) #define ZEND_HASH_FILL_END() \ __fill_ht->nNumUsed = __fill_idx; \ __fill_ht->nNumOfElements = __fill_idx; \ __fill_ht->nNextFreeElement = __fill_idx; \ __fill_ht->nInternalPointer = 0; \ } while (0) static zend_always_inline zval *_zend_hash_append_ex(HashTable *ht, zend_string *key, zval *zv, int interned) { uint32_t idx = ht->nNumUsed++; uint32_t nIndex; Bucket *p = ht->arData + idx; ZVAL_COPY_VALUE(&p->val, zv); if (!interned && !ZSTR_IS_INTERNED(key)) { HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS; zend_string_addref(key); zend_string_hash_val(key); } p->key = key; p->h = ZSTR_H(key); nIndex = (uint32_t)p->h | ht->nTableMask; Z_NEXT(p->val) = HT_HASH(ht, nIndex); HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx); ht->nNumOfElements++; return &p->val; } static zend_always_inline zval *_zend_hash_append(HashTable *ht, zend_string *key, zval *zv) { return _zend_hash_append_ex(ht, key, zv, 0); } static zend_always_inline zval *_zend_hash_append_ptr_ex(HashTable *ht, zend_string *key, void *ptr, int interned) { uint32_t idx = ht->nNumUsed++; uint32_t nIndex; Bucket *p = ht->arData + idx; ZVAL_PTR(&p->val, ptr); if (!interned && !ZSTR_IS_INTERNED(key)) { HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS; zend_string_addref(key); zend_string_hash_val(key); } p->key = key; p->h = ZSTR_H(key); nIndex = (uint32_t)p->h | ht->nTableMask; Z_NEXT(p->val) = HT_HASH(ht, nIndex); HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx); ht->nNumOfElements++; return &p->val; } static zend_always_inline zval *_zend_hash_append_ptr(HashTable *ht, zend_string *key, void *ptr) { return _zend_hash_append_ptr_ex(ht, key, ptr, 0); } static zend_always_inline void _zend_hash_append_ind(HashTable *ht, zend_string *key, zval *ptr) { uint32_t idx = ht->nNumUsed++; uint32_t nIndex; Bucket *p = ht->arData + idx; ZVAL_INDIRECT(&p->val, ptr); if (!ZSTR_IS_INTERNED(key)) { HT_FLAGS(ht) &= ~HASH_FLAG_STATIC_KEYS; zend_string_addref(key); zend_string_hash_val(key); } p->key = key; p->h = ZSTR_H(key); nIndex = (uint32_t)p->h | ht->nTableMask; Z_NEXT(p->val) = HT_HASH(ht, nIndex); HT_HASH(ht, nIndex) = HT_IDX_TO_HASH(idx); ht->nNumOfElements++; } #endif /* ZEND_HASH_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!BIPZend/zend_objects_API.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_OBJECTS_API_H #define ZEND_OBJECTS_API_H #include "zend.h" #include "zend_compile.h" #define OBJ_BUCKET_INVALID (1<<0) #define IS_OBJ_VALID(o) (!(((zend_uintptr_t)(o)) & OBJ_BUCKET_INVALID)) #define SET_OBJ_INVALID(o) ((zend_object*)((((zend_uintptr_t)(o)) | OBJ_BUCKET_INVALID))) #define GET_OBJ_BUCKET_NUMBER(o) (((zend_intptr_t)(o)) >> 1) #define SET_OBJ_BUCKET_NUMBER(o, n) do { \ (o) = (zend_object*)((((zend_uintptr_t)(n)) << 1) | OBJ_BUCKET_INVALID); \ } while (0) #define ZEND_OBJECTS_STORE_ADD_TO_FREE_LIST(h) do { \ SET_OBJ_BUCKET_NUMBER(EG(objects_store).object_buckets[(h)], EG(objects_store).free_list_head); \ EG(objects_store).free_list_head = (h); \ } while (0) #define OBJ_RELEASE(obj) zend_object_release(obj) typedef struct _zend_objects_store { zend_object **object_buckets; uint32_t top; uint32_t size; int free_list_head; } zend_objects_store; /* Global store handling functions */ BEGIN_EXTERN_C() ZEND_API void ZEND_FASTCALL zend_objects_store_init(zend_objects_store *objects, uint32_t init_size); ZEND_API void ZEND_FASTCALL zend_objects_store_call_destructors(zend_objects_store *objects); ZEND_API void ZEND_FASTCALL zend_objects_store_mark_destructed(zend_objects_store *objects); ZEND_API void ZEND_FASTCALL zend_objects_store_free_object_storage(zend_objects_store *objects, zend_bool fast_shutdown); ZEND_API void ZEND_FASTCALL zend_objects_store_destroy(zend_objects_store *objects); /* Store API functions */ ZEND_API void ZEND_FASTCALL zend_objects_store_put(zend_object *object); ZEND_API void ZEND_FASTCALL zend_objects_store_del(zend_object *object); /* Called when the ctor was terminated by an exception */ static zend_always_inline void zend_object_store_ctor_failed(zend_object *obj) { GC_ADD_FLAGS(obj, IS_OBJ_DESTRUCTOR_CALLED); } #define ZEND_OBJECTS_STORE_HANDLERS 0, zend_object_std_dtor, zend_objects_destroy_object, zend_objects_clone_obj END_EXTERN_C() static zend_always_inline void zend_object_release(zend_object *obj) { if (GC_DELREF(obj) == 0) { zend_objects_store_del(obj); } else if (UNEXPECTED(GC_MAY_LEAK((zend_refcounted*)obj))) { gc_possible_root((zend_refcounted*)obj); } } static zend_always_inline size_t zend_object_properties_size(zend_class_entry *ce) { return sizeof(zval) * (ce->default_properties_count - ((ce->ce_flags & ZEND_ACC_USE_GUARDS) ? 0 : 1)); } /* Allocates object type and zeros it, but not the properties. * Properties MUST be initialized using object_properties_init(). */ static zend_always_inline void *zend_object_alloc(size_t obj_size, zend_class_entry *ce) { void *obj = emalloc(obj_size + zend_object_properties_size(ce)); /* Subtraction of sizeof(zval) is necessary, because zend_object_properties_size() may be * -sizeof(zval), if the object has no properties. */ memset(obj, 0, obj_size - sizeof(zval)); return obj; } #endif /* ZEND_OBJECTS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!XHCZend/zend_ini_scanner.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef _ZEND_INI_SCANNER_H #define _ZEND_INI_SCANNER_H /* Scanner modes */ #define ZEND_INI_SCANNER_NORMAL 0 /* Normal mode. [DEFAULT] */ #define ZEND_INI_SCANNER_RAW 1 /* Raw mode. Option values are not parsed */ #define ZEND_INI_SCANNER_TYPED 2 /* Typed mode. */ BEGIN_EXTERN_C() ZEND_COLD int zend_ini_scanner_get_lineno(void); ZEND_COLD char *zend_ini_scanner_get_filename(void); int zend_ini_open_file_for_scanning(zend_file_handle *fh, int scanner_mode); int zend_ini_prepare_string_for_scanning(char *str, int scanner_mode); int ini_lex(zval *ini_lval); void shutdown_ini_scanner(void); END_EXTERN_C() #endif /* _ZEND_INI_SCANNER_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!P_ l,,Zend/zend_ast.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Bob Weinand | | Dmitry Stogov | | Nikita Popov | +----------------------------------------------------------------------+ */ #ifndef ZEND_AST_H #define ZEND_AST_H #include "zend.h" #ifndef ZEND_AST_SPEC # define ZEND_AST_SPEC 1 #endif #define ZEND_AST_SPECIAL_SHIFT 6 #define ZEND_AST_IS_LIST_SHIFT 7 #define ZEND_AST_NUM_CHILDREN_SHIFT 8 enum _zend_ast_kind { /* special nodes */ ZEND_AST_ZVAL = 1 << ZEND_AST_SPECIAL_SHIFT, ZEND_AST_CONSTANT, ZEND_AST_ZNODE, /* declaration nodes */ ZEND_AST_FUNC_DECL, ZEND_AST_CLOSURE, ZEND_AST_METHOD, ZEND_AST_CLASS, /* list nodes */ ZEND_AST_ARG_LIST = 1 << ZEND_AST_IS_LIST_SHIFT, ZEND_AST_ARRAY, ZEND_AST_ENCAPS_LIST, ZEND_AST_EXPR_LIST, ZEND_AST_STMT_LIST, ZEND_AST_IF, ZEND_AST_SWITCH_LIST, ZEND_AST_CATCH_LIST, ZEND_AST_PARAM_LIST, ZEND_AST_CLOSURE_USES, ZEND_AST_PROP_DECL, ZEND_AST_CONST_DECL, ZEND_AST_CLASS_CONST_DECL, ZEND_AST_NAME_LIST, ZEND_AST_TRAIT_ADAPTATIONS, ZEND_AST_USE, /* 0 child nodes */ ZEND_AST_MAGIC_CONST = 0 << ZEND_AST_NUM_CHILDREN_SHIFT, ZEND_AST_TYPE, ZEND_AST_CONSTANT_CLASS, /* 1 child node */ ZEND_AST_VAR = 1 << ZEND_AST_NUM_CHILDREN_SHIFT, ZEND_AST_CONST, ZEND_AST_UNPACK, ZEND_AST_UNARY_PLUS, ZEND_AST_UNARY_MINUS, ZEND_AST_CAST, ZEND_AST_EMPTY, ZEND_AST_ISSET, ZEND_AST_SILENCE, ZEND_AST_SHELL_EXEC, ZEND_AST_CLONE, ZEND_AST_EXIT, ZEND_AST_PRINT, ZEND_AST_INCLUDE_OR_EVAL, ZEND_AST_UNARY_OP, ZEND_AST_PRE_INC, ZEND_AST_PRE_DEC, ZEND_AST_POST_INC, ZEND_AST_POST_DEC, ZEND_AST_YIELD_FROM, ZEND_AST_GLOBAL, ZEND_AST_UNSET, ZEND_AST_RETURN, ZEND_AST_LABEL, ZEND_AST_REF, ZEND_AST_HALT_COMPILER, ZEND_AST_ECHO, ZEND_AST_THROW, ZEND_AST_GOTO, ZEND_AST_BREAK, ZEND_AST_CONTINUE, /* 2 child nodes */ ZEND_AST_DIM = 2 << ZEND_AST_NUM_CHILDREN_SHIFT, ZEND_AST_PROP, ZEND_AST_STATIC_PROP, ZEND_AST_CALL, ZEND_AST_CLASS_CONST, ZEND_AST_ASSIGN, ZEND_AST_ASSIGN_REF, ZEND_AST_ASSIGN_OP, ZEND_AST_BINARY_OP, ZEND_AST_GREATER, ZEND_AST_GREATER_EQUAL, ZEND_AST_AND, ZEND_AST_OR, ZEND_AST_ARRAY_ELEM, ZEND_AST_NEW, ZEND_AST_INSTANCEOF, ZEND_AST_YIELD, ZEND_AST_COALESCE, ZEND_AST_STATIC, ZEND_AST_WHILE, ZEND_AST_DO_WHILE, ZEND_AST_IF_ELEM, ZEND_AST_SWITCH, ZEND_AST_SWITCH_CASE, ZEND_AST_DECLARE, ZEND_AST_USE_TRAIT, ZEND_AST_TRAIT_PRECEDENCE, ZEND_AST_METHOD_REFERENCE, ZEND_AST_NAMESPACE, ZEND_AST_USE_ELEM, ZEND_AST_TRAIT_ALIAS, ZEND_AST_GROUP_USE, /* 3 child nodes */ ZEND_AST_METHOD_CALL = 3 << ZEND_AST_NUM_CHILDREN_SHIFT, ZEND_AST_STATIC_CALL, ZEND_AST_CONDITIONAL, ZEND_AST_TRY, ZEND_AST_CATCH, ZEND_AST_PARAM, ZEND_AST_PROP_ELEM, ZEND_AST_CONST_ELEM, /* 4 child nodes */ ZEND_AST_FOR = 4 << ZEND_AST_NUM_CHILDREN_SHIFT, ZEND_AST_FOREACH, }; typedef uint16_t zend_ast_kind; typedef uint16_t zend_ast_attr; struct _zend_ast { zend_ast_kind kind; /* Type of the node (ZEND_AST_* enum constant) */ zend_ast_attr attr; /* Additional attribute, use depending on node type */ uint32_t lineno; /* Line number */ zend_ast *child[1]; /* Array of children (using struct hack) */ }; /* Same as zend_ast, but with children count, which is updated dynamically */ typedef struct _zend_ast_list { zend_ast_kind kind; zend_ast_attr attr; uint32_t lineno; uint32_t children; zend_ast *child[1]; } zend_ast_list; /* Lineno is stored in val.u2.lineno */ typedef struct _zend_ast_zval { zend_ast_kind kind; zend_ast_attr attr; zval val; } zend_ast_zval; /* Separate structure for function and class declaration, as they need extra information. */ typedef struct _zend_ast_decl { zend_ast_kind kind; zend_ast_attr attr; /* Unused - for structure compatibility */ uint32_t start_lineno; uint32_t end_lineno; uint32_t flags; unsigned char *lex_pos; zend_string *doc_comment; zend_string *name; zend_ast *child[4]; } zend_ast_decl; typedef void (*zend_ast_process_t)(zend_ast *ast); extern ZEND_API zend_ast_process_t zend_ast_process; ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_with_lineno(zval *zv, uint32_t lineno); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_ex(zval *zv, zend_ast_attr attr); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval(zval *zv); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_from_str(zend_string *str); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_zval_from_long(zend_long lval); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_constant(zend_string *name, zend_ast_attr attr); #if ZEND_AST_SPEC # define ZEND_AST_SPEC_CALL(name, ...) \ ZEND_EXPAND_VA(ZEND_AST_SPEC_CALL_(name, __VA_ARGS__, _4, _3, _2, _1, _0)(__VA_ARGS__)) # define ZEND_AST_SPEC_CALL_(name, _, _4, _3, _2, _1, suffix, ...) \ name ## suffix # define ZEND_AST_SPEC_CALL_EX(name, ...) \ ZEND_EXPAND_VA(ZEND_AST_SPEC_CALL_EX_(name, __VA_ARGS__, _4, _3, _2, _1, _0)(__VA_ARGS__)) # define ZEND_AST_SPEC_CALL_EX_(name, _, _5, _4, _3, _2, _1, suffix, ...) \ name ## suffix ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_0(zend_ast_kind kind); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_1(zend_ast_kind kind, zend_ast *child); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_2(zend_ast_kind kind, zend_ast *child1, zend_ast *child2); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_3(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_4(zend_ast_kind kind, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4); static zend_always_inline zend_ast * zend_ast_create_ex_0(zend_ast_kind kind, zend_ast_attr attr) { zend_ast *ast = zend_ast_create_0(kind); ast->attr = attr; return ast; } static zend_always_inline zend_ast * zend_ast_create_ex_1(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child) { zend_ast *ast = zend_ast_create_1(kind, child); ast->attr = attr; return ast; } static zend_always_inline zend_ast * zend_ast_create_ex_2(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2) { zend_ast *ast = zend_ast_create_2(kind, child1, child2); ast->attr = attr; return ast; } static zend_always_inline zend_ast * zend_ast_create_ex_3(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3) { zend_ast *ast = zend_ast_create_3(kind, child1, child2, child3); ast->attr = attr; return ast; } static zend_always_inline zend_ast * zend_ast_create_ex_4(zend_ast_kind kind, zend_ast_attr attr, zend_ast *child1, zend_ast *child2, zend_ast *child3, zend_ast *child4) { zend_ast *ast = zend_ast_create_4(kind, child1, child2, child3, child4); ast->attr = attr; return ast; } ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_0(zend_ast_kind kind); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_1(zend_ast_kind kind, zend_ast *child); ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_list_2(zend_ast_kind kind, zend_ast *child1, zend_ast *child2); # define zend_ast_create(...) \ ZEND_AST_SPEC_CALL(zend_ast_create, __VA_ARGS__) # define zend_ast_create_ex(...) \ ZEND_AST_SPEC_CALL_EX(zend_ast_create_ex, __VA_ARGS__) # define zend_ast_create_list(init_children, ...) \ ZEND_AST_SPEC_CALL(zend_ast_create_list, __VA_ARGS__) #else ZEND_API zend_ast *zend_ast_create(zend_ast_kind kind, ...); ZEND_API zend_ast *zend_ast_create_ex(zend_ast_kind kind, zend_ast_attr attr, ...); ZEND_API zend_ast *zend_ast_create_list(uint32_t init_children, zend_ast_kind kind, ...); #endif ZEND_API zend_ast * ZEND_FASTCALL zend_ast_list_add(zend_ast *list, zend_ast *op); ZEND_API zend_ast *zend_ast_create_decl( zend_ast_kind kind, uint32_t flags, uint32_t start_lineno, zend_string *doc_comment, zend_string *name, zend_ast *child0, zend_ast *child1, zend_ast *child2, zend_ast *child3 ); ZEND_API int ZEND_FASTCALL zend_ast_evaluate(zval *result, zend_ast *ast, zend_class_entry *scope); ZEND_API zend_string *zend_ast_export(const char *prefix, zend_ast *ast, const char *suffix); ZEND_API zend_ast_ref * ZEND_FASTCALL zend_ast_copy(zend_ast *ast); ZEND_API void ZEND_FASTCALL zend_ast_destroy(zend_ast *ast); ZEND_API void ZEND_FASTCALL zend_ast_ref_destroy(zend_ast_ref *ast); typedef void (*zend_ast_apply_func)(zend_ast **ast_ptr); ZEND_API void zend_ast_apply(zend_ast *ast, zend_ast_apply_func fn); static zend_always_inline zend_bool zend_ast_is_list(zend_ast *ast) { return (ast->kind >> ZEND_AST_IS_LIST_SHIFT) & 1; } static zend_always_inline zend_ast_list *zend_ast_get_list(zend_ast *ast) { ZEND_ASSERT(zend_ast_is_list(ast)); return (zend_ast_list *) ast; } static zend_always_inline zval *zend_ast_get_zval(zend_ast *ast) { ZEND_ASSERT(ast->kind == ZEND_AST_ZVAL); return &((zend_ast_zval *) ast)->val; } static zend_always_inline zend_string *zend_ast_get_str(zend_ast *ast) { zval *zv = zend_ast_get_zval(ast); ZEND_ASSERT(Z_TYPE_P(zv) == IS_STRING); return Z_STR_P(zv); } static zend_always_inline zend_string *zend_ast_get_constant_name(zend_ast *ast) { ZEND_ASSERT(ast->kind == ZEND_AST_CONSTANT); ZEND_ASSERT(Z_TYPE(((zend_ast_zval *) ast)->val) == IS_STRING); return Z_STR(((zend_ast_zval *) ast)->val); } static zend_always_inline uint32_t zend_ast_get_num_children(zend_ast *ast) { ZEND_ASSERT(!zend_ast_is_list(ast)); return ast->kind >> ZEND_AST_NUM_CHILDREN_SHIFT; } static zend_always_inline uint32_t zend_ast_get_lineno(zend_ast *ast) { if (ast->kind == ZEND_AST_ZVAL) { zval *zv = zend_ast_get_zval(ast); return Z_LINENO_P(zv); } else { return ast->lineno; } } static zend_always_inline zend_ast *zend_ast_create_binary_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) { return zend_ast_create_ex(ZEND_AST_BINARY_OP, opcode, op0, op1); } static zend_always_inline zend_ast *zend_ast_create_assign_op(uint32_t opcode, zend_ast *op0, zend_ast *op1) { return zend_ast_create_ex(ZEND_AST_ASSIGN_OP, opcode, op0, op1); } static zend_always_inline zend_ast *zend_ast_create_cast(uint32_t type, zend_ast *op0) { return zend_ast_create_ex(ZEND_AST_CAST, type, op0); } static zend_always_inline zend_ast *zend_ast_list_rtrim(zend_ast *ast) { zend_ast_list *list = zend_ast_get_list(ast); if (list->children && list->child[list->children - 1] == NULL) { list->children--; } return ast; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!~LD}}Zend/zend_multibyte.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Masaki Fujimoto | | Rui Hirokawa | +----------------------------------------------------------------------+ */ #ifndef ZEND_MULTIBYTE_H #define ZEND_MULTIBYTE_H typedef struct _zend_encoding zend_encoding; typedef size_t (*zend_encoding_filter)(unsigned char **str, size_t *str_length, const unsigned char *buf, size_t length); typedef const zend_encoding* (*zend_encoding_fetcher)(const char *encoding_name); typedef const char* (*zend_encoding_name_getter)(const zend_encoding *encoding); typedef int (*zend_encoding_lexer_compatibility_checker)(const zend_encoding *encoding); typedef const zend_encoding *(*zend_encoding_detector)(const unsigned char *string, size_t length, const zend_encoding **list, size_t list_size); typedef size_t (*zend_encoding_converter)(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from); typedef int (*zend_encoding_list_parser)(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, int persistent); typedef const zend_encoding *(*zend_encoding_internal_encoding_getter)(void); typedef int (*zend_encoding_internal_encoding_setter)(const zend_encoding *encoding); typedef struct _zend_multibyte_functions { const char *provider_name; zend_encoding_fetcher encoding_fetcher; zend_encoding_name_getter encoding_name_getter; zend_encoding_lexer_compatibility_checker lexer_compatibility_checker; zend_encoding_detector encoding_detector; zend_encoding_converter encoding_converter; zend_encoding_list_parser encoding_list_parser; zend_encoding_internal_encoding_getter internal_encoding_getter; zend_encoding_internal_encoding_setter internal_encoding_setter; } zend_multibyte_functions; /* * zend multibyte APIs */ BEGIN_EXTERN_C() ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf32be; ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf32le; ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf16be; ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf16le; ZEND_API extern const zend_encoding *zend_multibyte_encoding_utf8; /* multibyte utility functions */ ZEND_API int zend_multibyte_set_functions(const zend_multibyte_functions *functions); ZEND_API void zend_multibyte_restore_functions(void); ZEND_API const zend_multibyte_functions *zend_multibyte_get_functions(void); ZEND_API const zend_encoding *zend_multibyte_fetch_encoding(const char *name); ZEND_API const char *zend_multibyte_get_encoding_name(const zend_encoding *encoding); ZEND_API int zend_multibyte_check_lexer_compatibility(const zend_encoding *encoding); ZEND_API const zend_encoding *zend_multibyte_encoding_detector(const unsigned char *string, size_t length, const zend_encoding **list, size_t list_size); ZEND_API size_t zend_multibyte_encoding_converter(unsigned char **to, size_t *to_length, const unsigned char *from, size_t from_length, const zend_encoding *encoding_to, const zend_encoding *encoding_from); ZEND_API int zend_multibyte_parse_encoding_list(const char *encoding_list, size_t encoding_list_len, const zend_encoding ***return_list, size_t *return_size, int persistent); ZEND_API const zend_encoding *zend_multibyte_get_internal_encoding(void); ZEND_API const zend_encoding *zend_multibyte_get_script_encoding(void); ZEND_API int zend_multibyte_set_script_encoding(const zend_encoding **encoding_list, size_t encoding_list_size); ZEND_API int zend_multibyte_set_internal_encoding(const zend_encoding *encoding); ZEND_API int zend_multibyte_set_script_encoding_by_string(const char *new_value, size_t new_value_length); END_EXTERN_C() #endif /* ZEND_MULTIBYTE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!@]00Zend/zend_smart_str.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef ZEND_SMART_STR_H #define ZEND_SMART_STR_H #include #include "zend_globals.h" #include "zend_smart_str_public.h" #define smart_str_appends_ex(dest, src, what) \ smart_str_appendl_ex((dest), (src), strlen(src), (what)) #define smart_str_appends(dest, src) \ smart_str_appendl((dest), (src), strlen(src)) #define smart_str_extend(dest, len) \ smart_str_extend_ex((dest), (len), 0) #define smart_str_appendc(dest, c) \ smart_str_appendc_ex((dest), (c), 0) #define smart_str_appendl(dest, src, len) \ smart_str_appendl_ex((dest), (src), (len), 0) #define smart_str_append(dest, src) \ smart_str_append_ex((dest), (src), 0) #define smart_str_append_smart_str(dest, src) \ smart_str_append_smart_str_ex((dest), (src), 0) #define smart_str_sets(dest, src) \ smart_str_setl((dest), (src), strlen(src)); #define smart_str_append_long(dest, val) \ smart_str_append_long_ex((dest), (val), 0) #define smart_str_append_unsigned(dest, val) \ smart_str_append_unsigned_ex((dest), (val), 0) #define smart_str_free(dest) \ smart_str_free_ex((dest), 0) BEGIN_EXTERN_C() ZEND_API void ZEND_FASTCALL smart_str_erealloc(smart_str *str, size_t len); ZEND_API void ZEND_FASTCALL smart_str_realloc(smart_str *str, size_t len); ZEND_API void ZEND_FASTCALL smart_str_append_escaped(smart_str *str, const char *s, size_t l); ZEND_API void smart_str_append_printf(smart_str *dest, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); END_EXTERN_C() static zend_always_inline size_t smart_str_alloc(smart_str *str, size_t len, zend_bool persistent) { if (UNEXPECTED(!str->s)) { goto do_smart_str_realloc; } else { len += ZSTR_LEN(str->s); if (UNEXPECTED(len >= str->a)) { do_smart_str_realloc: if (persistent) { smart_str_realloc(str, len); } else { smart_str_erealloc(str, len); } } } return len; } static zend_always_inline char* smart_str_extend_ex(smart_str *dest, size_t len, zend_bool persistent) { size_t new_len = smart_str_alloc(dest, len, persistent); char *ret = ZSTR_VAL(dest->s) + ZSTR_LEN(dest->s); ZSTR_LEN(dest->s) = new_len; return ret; } static zend_always_inline void smart_str_free_ex(smart_str *str, zend_bool persistent) { if (str->s) { zend_string_release_ex(str->s, persistent); str->s = NULL; } str->a = 0; } static zend_always_inline void smart_str_0(smart_str *str) { if (str->s) { ZSTR_VAL(str->s)[ZSTR_LEN(str->s)] = '\0'; } } static zend_always_inline size_t smart_str_get_len(smart_str *str) { return str->s ? ZSTR_LEN(str->s) : 0; } static zend_always_inline zend_string *smart_str_extract(smart_str *str) { if (str->s) { zend_string *res; smart_str_0(str); res = str->s; str->s = NULL; return res; } else { return ZSTR_EMPTY_ALLOC(); } } static zend_always_inline void smart_str_appendc_ex(smart_str *dest, char ch, zend_bool persistent) { size_t new_len = smart_str_alloc(dest, 1, persistent); ZSTR_VAL(dest->s)[new_len - 1] = ch; ZSTR_LEN(dest->s) = new_len; } static zend_always_inline void smart_str_appendl_ex(smart_str *dest, const char *str, size_t len, zend_bool persistent) { size_t new_len = smart_str_alloc(dest, len, persistent); memcpy(ZSTR_VAL(dest->s) + ZSTR_LEN(dest->s), str, len); ZSTR_LEN(dest->s) = new_len; } static zend_always_inline void smart_str_append_ex(smart_str *dest, const zend_string *src, zend_bool persistent) { smart_str_appendl_ex(dest, ZSTR_VAL(src), ZSTR_LEN(src), persistent); } static zend_always_inline void smart_str_append_smart_str_ex(smart_str *dest, const smart_str *src, zend_bool persistent) { if (src->s && ZSTR_LEN(src->s)) { smart_str_append_ex(dest, src->s, persistent); } } static zend_always_inline void smart_str_append_long_ex(smart_str *dest, zend_long num, zend_bool persistent) { char buf[32]; char *result = zend_print_long_to_buf(buf + sizeof(buf) - 1, num); smart_str_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent); } static zend_always_inline void smart_str_append_unsigned_ex(smart_str *dest, zend_ulong num, zend_bool persistent) { char buf[32]; char *result = zend_print_ulong_to_buf(buf + sizeof(buf) - 1, num); smart_str_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent); } static zend_always_inline void smart_str_setl(smart_str *dest, const char *src, size_t len) { smart_str_free(dest); smart_str_appendl(dest, src, len); } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!'''Zend/zend_multiply.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sascha Schumann | | Ard Biesheuvel | +----------------------------------------------------------------------+ */ #include "zend_portability.h" #ifndef ZEND_MULTIPLY_H #define ZEND_MULTIPLY_H #if PHP_HAVE_BUILTIN_SMULL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long __tmpvar; \ if (((usedval) = __builtin_smull_overflow((a), (b), &__tmpvar))) { \ (dval) = (double) (a) * (double) (b); \ } \ else (lval) = __tmpvar; \ } while (0) #elif PHP_HAVE_BUILTIN_SMULLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long long __tmpvar; \ if (((usedval) = __builtin_smulll_overflow((a), (b), &__tmpvar))) { \ (dval) = (double) (a) * (double) (b); \ } \ else (lval) = __tmpvar; \ } while (0) #elif (defined(__i386__) || defined(__x86_64__)) && defined(__GNUC__) #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ zend_long __tmpvar; \ __asm__ ("imul %3,%0\n" \ "adc $0,%1" \ : "=r"(__tmpvar),"=r"(usedval) \ : "0"(a), "r"(b), "1"(0)); \ if (usedval) (dval) = (double) (a) * (double) (b); \ else (lval) = __tmpvar; \ } while (0) #elif defined(__arm__) && defined(__GNUC__) #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ zend_long __tmpvar; \ __asm__("smull %0, %1, %2, %3\n" \ "sub %1, %1, %0, asr #31" \ : "=r"(__tmpvar), "=r"(usedval) \ : "r"(a), "r"(b)); \ if (usedval) (dval) = (double) (a) * (double) (b); \ else (lval) = __tmpvar; \ } while (0) #elif defined(__aarch64__) && defined(__GNUC__) #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ zend_long __tmpvar; \ __asm__("mul %0, %2, %3\n" \ "smulh %1, %2, %3\n" \ "sub %1, %1, %0, asr #63\n" \ : "=&r"(__tmpvar), "=&r"(usedval) \ : "r"(a), "r"(b)); \ if (usedval) (dval) = (double) (a) * (double) (b); \ else (lval) = __tmpvar; \ } while (0) #elif defined(ZEND_WIN32) # ifdef _M_X64 # pragma intrinsic(_mul128) # define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ __int64 __high; \ __int64 __low = _mul128((a), (b), &__high); \ if ((__low >> 63I64) == __high) { \ (usedval) = 0; \ (lval) = __low; \ } else { \ (usedval) = 1; \ (dval) = (double)(a) * (double)(b); \ } \ } while (0) # else # define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ zend_long __lres = (a) * (b); \ long double __dres = (long double)(a) * (long double)(b); \ long double __delta = (long double) __lres - __dres; \ if ( ((usedval) = (( __dres + __delta ) != __dres))) { \ (dval) = __dres; \ } else { \ (lval) = __lres; \ } \ } while (0) # endif #elif defined(__powerpc64__) && defined(__GNUC__) #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long __low, __high; \ __asm__("mulld %0,%2,%3\n\t" \ "mulhd %1,%2,%3\n" \ : "=&r"(__low), "=&r"(__high) \ : "r"(a), "r"(b)); \ if ((__low >> 63) != __high) { \ (dval) = (double) (a) * (double) (b); \ (usedval) = 1; \ } else { \ (lval) = __low; \ (usedval) = 0; \ } \ } while (0) #elif SIZEOF_ZEND_LONG == 4 #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ int64_t __result = (int64_t) (a) * (int64_t) (b); \ if (__result > ZEND_LONG_MAX || __result < ZEND_LONG_MIN) { \ (dval) = (double) __result; \ (usedval) = 1; \ } else { \ (lval) = (long) __result; \ (usedval) = 0; \ } \ } while (0) #else #define ZEND_SIGNED_MULTIPLY_LONG(a, b, lval, dval, usedval) do { \ long __lres = (a) * (b); \ long double __dres = (long double)(a) * (long double)(b); \ long double __delta = (long double) __lres - __dres; \ if ( ((usedval) = (( __dres + __delta ) != __dres))) { \ (dval) = __dres; \ } else { \ (lval) = __lres; \ } \ } while (0) #endif #if defined(__GNUC__) && (defined(__native_client__) || defined(i386)) static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { size_t res = nmemb; size_t m_overflow = 0; if (ZEND_CONST_COND(offset == 0, 0)) { __asm__ ("mull %3\n\tadcl $0,%1" : "=&a"(res), "=&d" (m_overflow) : "%0"(res), "rm"(size)); } else { __asm__ ("mull %3\n\taddl %4,%0\n\tadcl $0,%1" : "=&a"(res), "=&d" (m_overflow) : "%0"(res), "rm"(size), "rm"(offset)); } if (UNEXPECTED(m_overflow)) { *overflow = 1; return 0; } *overflow = 0; return res; } #elif defined(__GNUC__) && defined(__x86_64__) static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { size_t res = nmemb; zend_ulong m_overflow = 0; #ifdef __ILP32__ /* x32 */ # define LP_SUFF "l" #else /* amd64 */ # define LP_SUFF "q" #endif if (ZEND_CONST_COND(offset == 0, 0)) { __asm__ ("mul" LP_SUFF " %3\n\t" "adc $0,%1" : "=&a"(res), "=&d" (m_overflow) : "%0"(res), "rm"(size)); } else { __asm__ ("mul" LP_SUFF " %3\n\t" "add %4,%0\n\t" "adc $0,%1" : "=&a"(res), "=&d" (m_overflow) : "%0"(res), "rm"(size), "rm"(offset)); } #undef LP_SUFF if (UNEXPECTED(m_overflow)) { *overflow = 1; return 0; } *overflow = 0; return res; } #elif defined(__GNUC__) && defined(__arm__) static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { size_t res; zend_ulong m_overflow; __asm__ ("umlal %0,%1,%2,%3" : "=r"(res), "=r"(m_overflow) : "r"(nmemb), "r"(size), "0"(offset), "1"(0)); if (UNEXPECTED(m_overflow)) { *overflow = 1; return 0; } *overflow = 0; return res; } #elif defined(__GNUC__) && defined(__aarch64__) static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { size_t res; zend_ulong m_overflow; __asm__ ("mul %0,%2,%3\n\tumulh %1,%2,%3\n\tadds %0,%0,%4\n\tadc %1,%1,xzr" : "=&r"(res), "=&r"(m_overflow) : "r"(nmemb), "r"(size), "r"(offset)); if (UNEXPECTED(m_overflow)) { *overflow = 1; return 0; } *overflow = 0; return res; } #elif defined(__GNUC__) && defined(__powerpc64__) static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { size_t res; unsigned long m_overflow; __asm__ ("mulld %0,%2,%3\n\t" "mulhdu %1,%2,%3\n\t" "addc %0,%0,%4\n\t" "addze %1,%1\n" : "=&r"(res), "=&r"(m_overflow) : "r"(nmemb), "r"(size), "r"(offset)); if (UNEXPECTED(m_overflow)) { *overflow = 1; return 0; } *overflow = 0; return res; } #elif SIZEOF_SIZE_T == 4 static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { uint64_t res = (uint64_t) nmemb * (uint64_t) size + (uint64_t) offset; if (UNEXPECTED(res > UINT64_C(0xFFFFFFFF))) { *overflow = 1; return 0; } *overflow = 0; return (size_t) res; } #else static zend_always_inline size_t zend_safe_address(size_t nmemb, size_t size, size_t offset, int *overflow) { size_t res = nmemb * size + offset; double _d = (double)nmemb * (double)size + (double)offset; double _delta = (double)res - _d; if (UNEXPECTED((_d + _delta ) != _d)) { *overflow = 1; return 0; } *overflow = 0; return res; } #endif static zend_always_inline size_t zend_safe_address_guarded(size_t nmemb, size_t size, size_t offset) { int overflow; size_t ret = zend_safe_address(nmemb, size, offset, &overflow); if (UNEXPECTED(overflow)) { zend_error_noreturn(E_ERROR, "Possible integer overflow in memory allocation (%zu * %zu + %zu)", nmemb, size, offset); return 0; } return ret; } /* A bit more generic version of the same */ static zend_always_inline size_t zend_safe_addmult(size_t nmemb, size_t size, size_t offset, const char *message) { int overflow; size_t ret = zend_safe_address(nmemb, size, offset, &overflow); if (UNEXPECTED(overflow)) { zend_error_noreturn(E_ERROR, "Possible integer overflow in %s (%zu * %zu + %zu)", message, nmemb, size, offset); return 0; } return ret; } #endif /* ZEND_MULTIPLY_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!=N Zend/zend_config.nw.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_CONFIG_NW_H #define ZEND_CONFIG_NW_H #include #include typedef unsigned long ulong; typedef unsigned int uint; #define HAVE_ALLOCA 1 #define HAVE_LIMITS_H 1 /* #include */ #define HAVE_STRING_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_STDLIB_H 1 #undef HAVE_KILL #define HAVE_GETPID 1 /* #define HAVE_ALLOCA_H 1 */ #define HAVE_MEMCPY 1 #define HAVE_STRDUP 1 #define HAVE_SYS_TYPES_H 1 /* #define HAVE_STDIOSTR_H 1 */ #define HAVE_CLASS_ISTDIOSTREAM #define istdiostream stdiostream #define HAVE_STDARG_H 1 #define HAVE_DLFCN_H 1 /* #define HAVE_LIBDL 1 */ #define HAVE_SNPRINTF 1 #define HAVE_VSNPRINTF 1 /* #define snprintf _snprintf #define vsnprintf _vsnprintf #define zend_isinf(a) 0 #define zend_finite(x) _finite(x) #define zend_isnan(x) _isnan(x) */ #define zend_sprintf sprintf /* This will cause the compilation process to be MUCH longer, but will generate * a much quicker PHP binary */ /* #undef inline #ifdef ZEND_WIN32_FORCE_INLINE # define inline __forceinline #else # define inline #endif */ /* #define zend_finite(A) _finite(A) #define zend_isnan(A) _isnan(A) */ #endif /* ZEND_CONFIG_NW_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!=kbKKZend/zend_generators.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Nikita Popov | | Bob Weinand | +----------------------------------------------------------------------+ */ #ifndef ZEND_GENERATORS_H #define ZEND_GENERATORS_H BEGIN_EXTERN_C() extern ZEND_API zend_class_entry *zend_ce_generator; extern ZEND_API zend_class_entry *zend_ce_ClosedGeneratorException; typedef struct _zend_generator_node zend_generator_node; typedef struct _zend_generator zend_generator; /* The concept of `yield from` exposes problems when accessed at different levels of the chain of delegated generators. We need to be able to reference the currently executed Generator in all cases and still being able to access the return values of finished Generators. * The solution to this problem is a doubly-linked tree, which all Generators referenced in maintain a reference to. It should be impossible to avoid walking the tree in all cases. This way, we only need tree walks from leaf to root in case where some part of the `yield from` chain is passed to another `yield from`. (Update of leaf node pointer and list of multi-children nodes needed when leaf gets a child in direct path from leaf to root node.) But only in that case, which should be a fairly rare case (which is then possible, but not totally cheap). * The root of the tree is then the currently executed Generator. The subnodes of the tree (all except the root node) are all Generators which do `yield from`. Each node of the tree knows a pointer to one leaf descendant node. Each node with multiple children needs a list of all leaf descendant nodes paired with pointers to their respective child node. (The stack is determined by leaf node pointers) Nodes with only one child just don't need a list, there it is enough to just have a pointer to the child node. Further, leaf nodes store a pointer to the root node. * That way, when we advance any generator, we just need to look up a leaf node (which all have a reference to a root node). Then we can see at the root node whether current Generator is finished. If it isn't, all is fine and we can just continue. If the Generator finished, there will be two cases. Either it is a simple node with just one child, then go down to child node. Or it has multiple children and we now will remove the current leaf node from the list of nodes (unnecessary, is microoptimization) and go down to the child node whose reference was paired with current leaf node. Child node is then removed its parent reference and becomes new top node. Or the current node references the Generator we're currently executing, then we can continue from the YIELD_FROM opcode. When a node referenced as root node in a leaf node has a parent, then we go the way up until we find a root node without parent. * In case we go into a new `yield from` level, a node is created on top of current root and becomes the new root. Leaf node needs to be updated with new root node then. * When a Generator referenced by a node of the tree is added to `yield from`, that node now gets a list of children (we need to walk the descendants of that node and nodes of the tree of the other Generator down to the first multi-children node and copy all the leaf node pointers from there). In case there was no multi-children node (linear tree), we just add a pair (pointer to leaf node, pointer to child node), with the child node being in a direct path from leaf to this node. */ struct _zend_generator_node { zend_generator *parent; /* NULL for root */ uint32_t children; union { HashTable *ht; /* if multiple children */ struct { /* if one child */ zend_generator *leaf; zend_generator *child; } single; } child; union { zend_generator *leaf; /* if > 0 children */ zend_generator *root; /* if 0 children */ } ptr; }; struct _zend_generator { zend_object std; zend_object_iterator *iterator; /* The suspended execution context. */ zend_execute_data *execute_data; /* Frozen call stack for "yield" used in context of other calls */ zend_execute_data *frozen_call_stack; /* Current value */ zval value; /* Current key */ zval key; /* Return value */ zval retval; /* Variable to put sent value into */ zval *send_target; /* Largest used integer key for auto-incrementing keys */ zend_long largest_used_integer_key; /* Values specified by "yield from" to yield from this generator. * This is only used for arrays or non-generator Traversables. * This zval also uses the u2 structure in the same way as * by-value foreach. */ zval values; /* Node of waiting generators when multiple "yield from" expressions * are nested. */ zend_generator_node node; /* Fake execute_data for stacktraces */ zend_execute_data execute_fake; /* ZEND_GENERATOR_* flags */ zend_uchar flags; zval *gc_buffer; uint32_t gc_buffer_size; }; static const zend_uchar ZEND_GENERATOR_CURRENTLY_RUNNING = 0x1; static const zend_uchar ZEND_GENERATOR_FORCED_CLOSE = 0x2; static const zend_uchar ZEND_GENERATOR_AT_FIRST_YIELD = 0x4; static const zend_uchar ZEND_GENERATOR_DO_INIT = 0x8; void zend_register_generator_ce(void); ZEND_API void zend_generator_close(zend_generator *generator, zend_bool finished_execution); ZEND_API void zend_generator_resume(zend_generator *generator); ZEND_API void zend_generator_restore_call_stack(zend_generator *generator); ZEND_API zend_execute_data* zend_generator_freeze_call_stack(zend_execute_data *execute_data); void zend_generator_yield_from(zend_generator *generator, zend_generator *from); ZEND_API zend_execute_data *zend_generator_check_placeholder_frame(zend_execute_data *ptr); ZEND_API zend_generator *zend_generator_update_current(zend_generator *generator, zend_generator *leaf); static zend_always_inline zend_generator *zend_generator_get_current(zend_generator *generator) { zend_generator *leaf; zend_generator *root; if (EXPECTED(generator->node.parent == NULL)) { /* we're not in yield from mode */ return generator; } leaf = generator->node.children ? generator->node.ptr.leaf : generator; root = leaf->node.ptr.root; if (EXPECTED(root->execute_data && root->node.parent == NULL)) { /* generator still running */ return root; } return zend_generator_update_current(generator, leaf); } END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!dTJ=J=Zend/zend_float.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Christian Seiler | +----------------------------------------------------------------------+ */ #ifndef ZEND_FLOAT_H #define ZEND_FLOAT_H BEGIN_EXTERN_C() /* Define functions for FP initialization and de-initialization. */ extern ZEND_API void zend_init_fpu(void); extern ZEND_API void zend_shutdown_fpu(void); extern ZEND_API void zend_ensure_fpu_mode(void); END_EXTERN_C() /* Copy of the contents of xpfpa.h (which is under public domain) See http://wiki.php.net/rfc/rounding for details. Cross Platform Floating Point Arithmetics This header file defines several platform-dependent macros that ensure equal and deterministic floating point behaviour across several platforms, compilers and architectures. The current macros are currently only used on x86 and x86_64 architectures, on every other architecture, these macros expand to NOPs. This assumes that other architectures do not have an internal precision and the operhand types define the computational precision of floating point operations. This assumption may be false, in that case, the author is interested in further details on the other platform. For further details, please visit: http://www.christian-seiler.de/projekte/fpmath/ Version: 20090317 */ /* Implementation notes: x86_64: - Since all x86_64 compilers use SSE by default, it is probably unnecessary to use these macros there. We define them anyway since we are too lazy to differentiate the architecture. Also, the compiler option -mfpmath=i387 justifies this decision. General: - It would be nice if one could detect whether SSE if used for math via some funky compiler defines and if so, make the macros go to NOPs. Any ideas on how to do that? MS Visual C: - Since MSVC users tipically don't use autoconf or CMake, we will detect MSVC via compile time define. Floating point precision change isn't supported on 64 bit platforms, so it's NOP. See http://msdn.microsoft.com/en-us/library/c9676k6h(v=vs.110).aspx */ /* MSVC detection (MSVC people usually don't use autoconf) */ #if defined(_MSC_VER) && !defined(_WIN64) # define HAVE__CONTROLFP_S #endif /* _MSC_VER */ #ifdef HAVE__CONTROLFP_S /* float.h defines _controlfp_s */ # include # define XPFPA_HAVE_CW 1 # define XPFPA_CW_DATATYPE \ unsigned int # define XPFPA_STORE_CW(vptr) do { \ _controlfp_s((unsigned int *)(vptr), 0, 0); \ } while (0) # define XPFPA_RESTORE_CW(vptr) do { \ unsigned int _xpfpa_fpu_cw; \ _controlfp_s(&_xpfpa_fpu_cw, *((unsigned int *)(vptr)), _MCW_PC); \ } while (0) # define XPFPA_DECLARE \ unsigned int _xpfpa_fpu_oldcw, _xpfpa_fpu_cw; # define XPFPA_SWITCH_DOUBLE() do { \ _controlfp_s(&_xpfpa_fpu_cw, 0, 0); \ _xpfpa_fpu_oldcw = _xpfpa_fpu_cw; \ _controlfp_s(&_xpfpa_fpu_cw, _PC_53, _MCW_PC); \ } while (0) # define XPFPA_SWITCH_SINGLE() do { \ _controlfp_s(&_xpfpa_fpu_cw, 0, 0); \ _xpfpa_fpu_oldcw = _xpfpa_fpu_cw; \ _controlfp_s(&_xpfpa_fpu_cw, _PC_24, _MCW_PC); \ } while (0) /* NOTE: This only sets internal precision. MSVC does NOT support double- extended precision! */ # define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \ _controlfp_s(&_xpfpa_fpu_cw, 0, 0); \ _xpfpa_fpu_oldcw = _xpfpa_fpu_cw; \ _controlfp_s(&_xpfpa_fpu_cw, _PC_64, _MCW_PC); \ } while (0) # define XPFPA_RESTORE() \ _controlfp_s(&_xpfpa_fpu_cw, _xpfpa_fpu_oldcw, _MCW_PC) /* We do NOT use the volatile return trick since _controlfp_s is a function call and thus FP registers are saved in memory anyway. However, we do use a variable to ensure that the expression passed into val will be evaluated *before* switching back contexts. */ # define XPFPA_RETURN_DOUBLE(val) \ do { \ double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_SINGLE(val) \ do { \ float _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) /* This won't work, but we add a macro for it anyway. */ # define XPFPA_RETURN_DOUBLE_EXTENDED(val) \ do { \ long double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) #elif defined(HAVE__CONTROLFP) /* float.h defines _controlfp */ # include # define XPFPA_DECLARE \ unsigned int _xpfpa_fpu_oldcw; # define XPFPA_HAVE_CW 1 # define XPFPA_CW_DATATYPE \ unsigned int # define XPFPA_STORE_CW(vptr) do { \ *((unsigned int *)(vptr)) = _controlfp(0, 0); \ } while (0) # define XPFPA_RESTORE_CW(vptr) do { \ _controlfp(*((unsigned int *)(vptr)), _MCW_PC); \ } while (0) # define XPFPA_SWITCH_DOUBLE() do { \ _xpfpa_fpu_oldcw = _controlfp(0, 0); \ _controlfp(_PC_53, _MCW_PC); \ } while (0) # define XPFPA_SWITCH_SINGLE() do { \ _xpfpa_fpu_oldcw = _controlfp(0, 0); \ _controlfp(_PC_24, _MCW_PC); \ } while (0) /* NOTE: This will only work as expected on MinGW. */ # define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \ _xpfpa_fpu_oldcw = _controlfp(0, 0); \ _controlfp(_PC_64, _MCW_PC); \ } while (0) # define XPFPA_RESTORE() \ _controlfp(_xpfpa_fpu_oldcw, _MCW_PC) /* We do NOT use the volatile return trick since _controlfp is a function call and thus FP registers are saved in memory anyway. However, we do use a variable to ensure that the expression passed into val will be evaluated *before* switching back contexts. */ # define XPFPA_RETURN_DOUBLE(val) \ do { \ double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_SINGLE(val) \ do { \ float _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) /* This will only work on MinGW */ # define XPFPA_RETURN_DOUBLE_EXTENDED(val) \ do { \ long double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) #elif defined(HAVE__FPU_SETCW) /* glibc systems */ /* fpu_control.h defines _FPU_[GS]ETCW */ # include # define XPFPA_DECLARE \ fpu_control_t _xpfpa_fpu_oldcw, _xpfpa_fpu_cw; # define XPFPA_HAVE_CW 1 # define XPFPA_CW_DATATYPE \ fpu_control_t # define XPFPA_STORE_CW(vptr) do { \ _FPU_GETCW((*((fpu_control_t *)(vptr)))); \ } while (0) # define XPFPA_RESTORE_CW(vptr) do { \ _FPU_SETCW((*((fpu_control_t *)(vptr)))); \ } while (0) # define XPFPA_SWITCH_DOUBLE() do { \ _FPU_GETCW(_xpfpa_fpu_oldcw); \ _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~_FPU_EXTENDED & ~_FPU_SINGLE) | _FPU_DOUBLE; \ _FPU_SETCW(_xpfpa_fpu_cw); \ } while (0) # define XPFPA_SWITCH_SINGLE() do { \ _FPU_GETCW(_xpfpa_fpu_oldcw); \ _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~_FPU_EXTENDED & ~_FPU_DOUBLE) | _FPU_SINGLE; \ _FPU_SETCW(_xpfpa_fpu_cw); \ } while (0) # define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \ _FPU_GETCW(_xpfpa_fpu_oldcw); \ _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~_FPU_SINGLE & ~_FPU_DOUBLE) | _FPU_EXTENDED; \ _FPU_SETCW(_xpfpa_fpu_cw); \ } while (0) # define XPFPA_RESTORE() \ _FPU_SETCW(_xpfpa_fpu_oldcw) /* We use a temporary volatile variable (in a new block) in order to ensure that the optimizer does not mis-optimize the instructions. Also, a volatile variable ensures truncation to correct precision. */ # define XPFPA_RETURN_DOUBLE(val) \ do { \ volatile double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_SINGLE(val) \ do { \ volatile float _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_DOUBLE_EXTENDED(val) \ do { \ volatile long double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) #elif defined(HAVE_FPSETPREC) /* FreeBSD */ /* fpu_control.h defines _FPU_[GS]ETCW */ # include # define XPFPA_DECLARE \ fp_prec_t _xpfpa_fpu_oldprec; # define XPFPA_HAVE_CW 1 # define XPFPA_CW_DATATYPE \ fp_prec_t # define XPFPA_STORE_CW(vptr) do { \ *((fp_prec_t *)(vptr)) = fpgetprec(); \ } while (0) # define XPFPA_RESTORE_CW(vptr) do { \ fpsetprec(*((fp_prec_t *)(vptr))); \ } while (0) # define XPFPA_SWITCH_DOUBLE() do { \ _xpfpa_fpu_oldprec = fpgetprec(); \ fpsetprec(FP_PD); \ } while (0) # define XPFPA_SWITCH_SINGLE() do { \ _xpfpa_fpu_oldprec = fpgetprec(); \ fpsetprec(FP_PS); \ } while (0) # define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \ _xpfpa_fpu_oldprec = fpgetprec(); \ fpsetprec(FP_PE); \ } while (0) # define XPFPA_RESTORE() \ fpsetprec(_xpfpa_fpu_oldprec) /* We use a temporary volatile variable (in a new block) in order to ensure that the optimizer does not mis-optimize the instructions. Also, a volatile variable ensures truncation to correct precision. */ # define XPFPA_RETURN_DOUBLE(val) \ do { \ volatile double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_SINGLE(val) \ do { \ volatile float _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_DOUBLE_EXTENDED(val) \ do { \ volatile long double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) #elif defined(HAVE_FPU_INLINE_ASM_X86) /* Custom x86 inline assembler implementation. This implementation does not use predefined wrappers of the OS / compiler but rather uses x86/x87 inline assembler directly. Basic instructions: fnstcw - Store the FPU control word in a variable fldcw - Load the FPU control word from a variable Bits (only bits 8 and 9 are relevant, bits 0 to 7 are for other things): 0x0yy: Single precision 0x1yy: Reserved 0x2yy: Double precision 0x3yy: Double-extended precision We use an unsigned int for the datatype. glibc sources add __mode__ (__HI__) attribute to it (HI stands for half-integer according to docs). It is unclear what the does exactly and how portable it is. The assembly syntax works with GNU CC, Intel CC and Sun CC. */ # define XPFPA_DECLARE \ unsigned int _xpfpa_fpu_oldcw, _xpfpa_fpu_cw; # define XPFPA_HAVE_CW 1 # define XPFPA_CW_DATATYPE \ unsigned int # define XPFPA_STORE_CW(vptr) do { \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*((unsigned int *)(vptr)))); \ } while (0) # define XPFPA_RESTORE_CW(vptr) do { \ __asm__ __volatile__ ("fldcw %0" : : "m" (*((unsigned int *)(vptr)))); \ } while (0) # define XPFPA_SWITCH_DOUBLE() do { \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_xpfpa_fpu_oldcw)); \ _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~0x100) | 0x200; \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_cw)); \ } while (0) # define XPFPA_SWITCH_SINGLE() do { \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_xpfpa_fpu_oldcw)); \ _xpfpa_fpu_cw = (_xpfpa_fpu_oldcw & ~0x300); \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_cw)); \ } while (0) # define XPFPA_SWITCH_DOUBLE_EXTENDED() do { \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_xpfpa_fpu_oldcw)); \ _xpfpa_fpu_cw = _xpfpa_fpu_oldcw | 0x300; \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_cw)); \ } while (0) # define XPFPA_RESTORE() \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_xpfpa_fpu_oldcw)) /* We use a temporary volatile variable (in a new block) in order to ensure that the optimizer does not mis-optimize the instructions. Also, a volatile variable ensures truncation to correct precision. */ # define XPFPA_RETURN_DOUBLE(val) \ do { \ volatile double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_SINGLE(val) \ do { \ volatile float _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) # define XPFPA_RETURN_DOUBLE_EXTENDED(val) \ do { \ volatile long double _xpfpa_result = (val); \ XPFPA_RESTORE(); \ return _xpfpa_result; \ } while (0) #else /* FPU CONTROL */ /* This is either not an x87 FPU or the inline assembly syntax was not recognized. In any case, default to NOPs for the macros and hope the generated code will behave as planned. */ # define XPFPA_DECLARE /* NOP */ # define XPFPA_HAVE_CW 0 # define XPFPA_CW_DATATYPE unsigned int # define XPFPA_STORE_CW(variable) /* NOP */ # define XPFPA_RESTORE_CW(variable) /* NOP */ # define XPFPA_SWITCH_DOUBLE() /* NOP */ # define XPFPA_SWITCH_SINGLE() /* NOP */ # define XPFPA_SWITCH_DOUBLE_EXTENDED() /* NOP */ # define XPFPA_RESTORE() /* NOP */ # define XPFPA_RETURN_DOUBLE(val) return (val) # define XPFPA_RETURN_SINGLE(val) return (val) # define XPFPA_RETURN_DOUBLE_EXTENDED(val) return (val) #endif /* FPU CONTROL */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!~Zend/zend_arena.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef _ZEND_ARENA_H_ #define _ZEND_ARENA_H_ #include "zend.h" typedef struct _zend_arena zend_arena; struct _zend_arena { char *ptr; char *end; zend_arena *prev; }; static zend_always_inline zend_arena* zend_arena_create(size_t size) { zend_arena *arena = (zend_arena*)emalloc(size); arena->ptr = (char*) arena + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena)); arena->end = (char*) arena + size; arena->prev = NULL; return arena; } static zend_always_inline void zend_arena_destroy(zend_arena *arena) { do { zend_arena *prev = arena->prev; efree(arena); arena = prev; } while (arena); } #define ZEND_ARENA_ALIGNMENT 8U static zend_always_inline void* zend_arena_alloc(zend_arena **arena_ptr, size_t size) { zend_arena *arena = *arena_ptr; char *ptr = arena->ptr; size = ZEND_MM_ALIGNED_SIZE(size); if (EXPECTED(size <= (size_t)(arena->end - ptr))) { arena->ptr = ptr + size; } else { size_t arena_size = UNEXPECTED((size + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena))) > (size_t)(arena->end - (char*) arena)) ? (size + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena))) : (size_t)(arena->end - (char*) arena); zend_arena *new_arena = (zend_arena*)emalloc(arena_size); ptr = (char*) new_arena + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena)); new_arena->ptr = (char*) new_arena + ZEND_MM_ALIGNED_SIZE(sizeof(zend_arena)) + size; new_arena->end = (char*) new_arena + arena_size; new_arena->prev = arena; *arena_ptr = new_arena; } return (void*) ptr; } static zend_always_inline void* zend_arena_calloc(zend_arena **arena_ptr, size_t count, size_t unit_size) { int overflow; size_t size; void *ret; size = zend_safe_address(unit_size, count, 0, &overflow); if (UNEXPECTED(overflow)) { zend_error(E_ERROR, "Possible integer overflow in zend_arena_calloc() (%zu * %zu)", unit_size, count); } ret = zend_arena_alloc(arena_ptr, size); memset(ret, 0, size); return ret; } static zend_always_inline void* zend_arena_checkpoint(zend_arena *arena) { return arena->ptr; } static zend_always_inline void zend_arena_release(zend_arena **arena_ptr, void *checkpoint) { zend_arena *arena = *arena_ptr; while (UNEXPECTED((char*)checkpoint > arena->end) || UNEXPECTED((char*)checkpoint <= (char*)arena)) { zend_arena *prev = arena->prev; efree(arena); *arena_ptr = arena = prev; } ZEND_ASSERT((char*)checkpoint > (char*)arena && (char*)checkpoint <= arena->end); arena->ptr = (char*)checkpoint; } static zend_always_inline zend_bool zend_arena_contains(zend_arena *arena, void *ptr) { while (arena) { if ((char*)ptr > (char*)arena && (char*)ptr <= arena->ptr) { return 1; } arena = arena->prev; } return 0; } #endif /* _ZEND_ARENA_H_ */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!i9FLB B Zend/zend_language_scanner.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_SCANNER_H #define ZEND_SCANNER_H typedef struct _zend_lex_state { unsigned int yy_leng; unsigned char *yy_start; unsigned char *yy_text; unsigned char *yy_cursor; unsigned char *yy_marker; unsigned char *yy_limit; int yy_state; zend_stack state_stack; zend_ptr_stack heredoc_label_stack; zend_file_handle *in; uint32_t lineno; zend_string *filename; /* original (unfiltered) script */ unsigned char *script_org; size_t script_org_size; /* filtered script */ unsigned char *script_filtered; size_t script_filtered_size; /* input/output filters */ zend_encoding_filter input_filter; zend_encoding_filter output_filter; const zend_encoding *script_encoding; /* hooks */ void (*on_event)(zend_php_scanner_event event, int token, int line, void *context); void *on_event_context; zend_ast *ast; zend_arena *ast_arena; } zend_lex_state; typedef struct _zend_heredoc_label { char *label; int length; int indentation; zend_bool indentation_uses_spaces; } zend_heredoc_label; BEGIN_EXTERN_C() ZEND_API void zend_save_lexical_state(zend_lex_state *lex_state); ZEND_API void zend_restore_lexical_state(zend_lex_state *lex_state); ZEND_API int zend_prepare_string_for_scanning(zval *str, char *filename); ZEND_API void zend_multibyte_yyinput_again(zend_encoding_filter old_input_filter, const zend_encoding *old_encoding); ZEND_API int zend_multibyte_set_filter(const zend_encoding *onetime_encoding); ZEND_API void zend_lex_tstring(zval *zv); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!7 7 Zend/zend_closures.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Christian Seiler | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_CLOSURES_H #define ZEND_CLOSURES_H BEGIN_EXTERN_C() /* This macro depends on zend_closure structure layout */ #define ZEND_CLOSURE_OBJECT(op_array) \ ((zend_object*)((char*)(op_array) - sizeof(zend_object))) void zend_register_closure_ce(void); void zend_closure_bind_var(zval *closure_zv, zend_string *var_name, zval *var); void zend_closure_bind_var_ex(zval *closure_zv, uint32_t offset, zval *val); extern ZEND_API zend_class_entry *zend_ce_closure; ZEND_API void zend_create_closure(zval *res, zend_function *op_array, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr); ZEND_API void zend_create_fake_closure(zval *res, zend_function *op_array, zend_class_entry *scope, zend_class_entry *called_scope, zval *this_ptr); ZEND_API zend_function *zend_get_closure_invoke_method(zend_object *obj); ZEND_API const zend_function *zend_get_closure_method_def(zval *obj); ZEND_API zval* zend_get_closure_this_ptr(zval *obj); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!+O Zend/zend_ini_parser.hnu[/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ #ifndef YY_INI_ZEND_ZEND_INI_PARSER_H_INCLUDED # define YY_INI_ZEND_ZEND_INI_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int ini_debug; #endif /* Token type. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { TC_SECTION = 258, TC_RAW = 259, TC_CONSTANT = 260, TC_NUMBER = 261, TC_STRING = 262, TC_WHITESPACE = 263, TC_LABEL = 264, TC_OFFSET = 265, TC_DOLLAR_CURLY = 266, TC_VARNAME = 267, TC_QUOTED_STRING = 268, BOOL_TRUE = 269, BOOL_FALSE = 270, NULL_NULL = 271, END_OF_LINE = 272 }; #endif /* Tokens. */ #define TC_SECTION 258 #define TC_RAW 259 #define TC_CONSTANT 260 #define TC_NUMBER 261 #define TC_STRING 262 #define TC_WHITESPACE 263 #define TC_LABEL 264 #define TC_OFFSET 265 #define TC_DOLLAR_CURLY 266 #define TC_VARNAME 267 #define TC_QUOTED_STRING 268 #define BOOL_TRUE 269 #define BOOL_FALSE 270 #define NULL_NULL 271 #define END_OF_LINE 272 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef int YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int ini_parse (void); #endif /* !YY_INI_ZEND_ZEND_INI_PARSER_H_INCLUDED */ PK!DLLZend/zend_modules.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef MODULES_H #define MODULES_H #include "zend.h" #include "zend_compile.h" #include "zend_build.h" #define INIT_FUNC_ARGS int type, int module_number #define INIT_FUNC_ARGS_PASSTHRU type, module_number #define SHUTDOWN_FUNC_ARGS int type, int module_number #define SHUTDOWN_FUNC_ARGS_PASSTHRU type, module_number #define ZEND_MODULE_INFO_FUNC_ARGS zend_module_entry *zend_module #define ZEND_MODULE_INFO_FUNC_ARGS_PASSTHRU zend_module #define ZEND_MODULE_API_NO 20180731 #ifdef ZTS #define USING_ZTS 1 #else #define USING_ZTS 0 #endif #define STANDARD_MODULE_HEADER_EX sizeof(zend_module_entry), ZEND_MODULE_API_NO, ZEND_DEBUG, USING_ZTS #define STANDARD_MODULE_HEADER \ STANDARD_MODULE_HEADER_EX, NULL, NULL #define ZE2_STANDARD_MODULE_HEADER \ STANDARD_MODULE_HEADER_EX, ini_entries, NULL #define ZEND_MODULE_BUILD_ID "API" ZEND_TOSTR(ZEND_MODULE_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA #define STANDARD_MODULE_PROPERTIES_EX 0, 0, NULL, 0, ZEND_MODULE_BUILD_ID #define NO_MODULE_GLOBALS 0, NULL, NULL, NULL #ifdef ZTS # define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals_id #else # define ZEND_MODULE_GLOBALS(module_name) sizeof(zend_##module_name##_globals), &module_name##_globals #endif #define STANDARD_MODULE_PROPERTIES \ NO_MODULE_GLOBALS, NULL, STANDARD_MODULE_PROPERTIES_EX #define NO_VERSION_YET NULL #define MODULE_PERSISTENT 1 #define MODULE_TEMPORARY 2 struct _zend_ini_entry; typedef struct _zend_module_entry zend_module_entry; typedef struct _zend_module_dep zend_module_dep; struct _zend_module_entry { unsigned short size; unsigned int zend_api; unsigned char zend_debug; unsigned char zts; const struct _zend_ini_entry *ini_entry; const struct _zend_module_dep *deps; const char *name; const struct _zend_function_entry *functions; int (*module_startup_func)(INIT_FUNC_ARGS); int (*module_shutdown_func)(SHUTDOWN_FUNC_ARGS); int (*request_startup_func)(INIT_FUNC_ARGS); int (*request_shutdown_func)(SHUTDOWN_FUNC_ARGS); void (*info_func)(ZEND_MODULE_INFO_FUNC_ARGS); const char *version; size_t globals_size; #ifdef ZTS ts_rsrc_id* globals_id_ptr; #else void* globals_ptr; #endif void (*globals_ctor)(void *global); void (*globals_dtor)(void *global); int (*post_deactivate_func)(void); int module_started; unsigned char type; void *handle; int module_number; const char *build_id; }; #define MODULE_DEP_REQUIRED 1 #define MODULE_DEP_CONFLICTS 2 #define MODULE_DEP_OPTIONAL 3 #define ZEND_MOD_REQUIRED_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_REQUIRED }, #define ZEND_MOD_CONFLICTS_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_CONFLICTS }, #define ZEND_MOD_OPTIONAL_EX(name, rel, ver) { name, rel, ver, MODULE_DEP_OPTIONAL }, #define ZEND_MOD_REQUIRED(name) ZEND_MOD_REQUIRED_EX(name, NULL, NULL) #define ZEND_MOD_CONFLICTS(name) ZEND_MOD_CONFLICTS_EX(name, NULL, NULL) #define ZEND_MOD_OPTIONAL(name) ZEND_MOD_OPTIONAL_EX(name, NULL, NULL) #define ZEND_MOD_END { NULL, NULL, NULL, 0 } struct _zend_module_dep { const char *name; /* module name */ const char *rel; /* version relationship: NULL (exists), lt|le|eq|ge|gt (to given version) */ const char *version; /* version */ unsigned char type; /* dependency type */ }; BEGIN_EXTERN_C() extern ZEND_API HashTable module_registry; void module_destructor(zend_module_entry *module); int module_registry_request_startup(zend_module_entry *module); int module_registry_unload_temp(const zend_module_entry *module); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!+Zend/zend_vm_def.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ /* If you change this file, please regenerate the zend_vm_execute.h and * zend_vm_opcodes.h files by running: * php zend_vm_gen.php */ ZEND_VM_COLD_CONSTCONST_HANDLER(1, ZEND_ADD, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(2, ZEND_SUB, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(3, ZEND_MUL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(4, ZEND_DIV, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR(BP_VAR_R); fast_div_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_HELPER(zend_mod_by_zero_helper, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero"); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(5, ZEND_MOD, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_DISPATCH_TO_HELPER(zend_mod_by_zero_helper); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(6, ZEND_SL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(7, ZEND_SR, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(166, ZEND_POW, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR(BP_VAR_R); pow_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(8, ZEND_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(NO_CONST_CONST)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (OP1_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (OP2_TYPE == IS_CONST || OP2_TYPE == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } FREE_OP1(); } else if (OP2_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (OP1_TYPE == IS_CONST || OP1_TYPE == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } FREE_OP2(); } else if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); FREE_OP2(); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); FREE_OP1(); FREE_OP2(); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_COLD_CONSTCONST_HANDLER(15, ZEND_IS_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R); result = fast_is_identical_function(op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(16, ZEND_IS_NOT_IDENTICAL, CONST|TMP|VAR|CV, CONST|TMP|VAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R); result = fast_is_not_identical_function(op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); FREE_OP1(); FREE_OP2(); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); FREE_OP1(); FREE_OP2(); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(19, ZEND_IS_SMALLER, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(20, ZEND_IS_SMALLER_OR_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(170, ZEND_SPACESHIP, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR(BP_VAR_R); compare_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(9, ZEND_BW_OR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(10, ZEND_BW_AND, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(11, ZEND_BW_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(14, ZEND_BOOL_XOR, CONST|TMPVAR|CV, CONST|TMPVAR|CV, SPEC(COMMUTATIVE)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR(BP_VAR_R); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(12, ZEND_BW_NOT, CONST|TMPVAR|CV, ANY) { USE_OPLINE zend_free_op free_op1; zval *op1; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); bitwise_not_function(EX_VAR(opline->result.var), GET_OP1_ZVAL_PTR(BP_VAR_R)); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(13, ZEND_BOOL_NOT, CONST|TMPVAR|CV, ANY) { USE_OPLINE zval *val; zend_free_op free_op1; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); if (OP1_TYPE == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_HELPER(zend_this_not_in_object_context_helper, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Using $this when not in object context"); if ((opline+1)->opcode == ZEND_OP_DATA) { FREE_UNFETCHED_OP_DATA(); } FREE_UNFETCHED_OP2(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } ZEND_VM_COLD_HELPER(zend_abstract_method_helper, ANY, ANY, zend_function *fbc) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } ZEND_VM_COLD_HELPER(zend_undefined_function_helper, ANY, ANY, zval *function_name) { SAVE_OPLINE(); zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name)); HANDLE_EXCEPTION(); } ZEND_VM_HELPER(zend_binary_assign_op_obj_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, binary_op_type binary_op) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { ZEND_VM_C_GOTO(assign_op_object); } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ ZEND_VM_C_LABEL(assign_op_object): if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); FREE_OP2(); FREE_OP1_VAR_PTR(); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } ZEND_VM_HELPER(zend_binary_assign_op_dim_helper, VAR|CV, CONST|TMPVAR|UNUSED|CV, binary_op_type binary_op) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_LABEL(assign_dim_op_array): SEPARATE_ARRAY(container); ZEND_VM_C_LABEL(assign_dim_op_new_array): dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP2_TYPE == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); ZEND_VM_C_GOTO(assign_dim_op_ret_null); } } else { if (OP2_TYPE == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { ZEND_VM_C_GOTO(assign_dim_op_ret_null); } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_GOTO(assign_dim_op_array); } } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); ZEND_VM_C_LABEL(assign_dim_op_convert_to_array): ZVAL_ARR(container, zend_new_array(8)); ZEND_VM_C_GOTO(assign_dim_op_new_array); } dim = GET_OP2_ZVAL_PTR(BP_VAR_R); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (OP2_TYPE == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { ZEND_VM_C_GOTO(assign_dim_op_convert_to_array); } else { if (UNEXPECTED(OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } ZEND_VM_C_LABEL(assign_dim_op_ret_null): if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP2(); FREE_OP(free_op_data1); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_EX(1, 2); } ZEND_VM_HELPER(zend_binary_assign_op_simple_helper, VAR|CV, CONST|TMPVAR|CV, binary_op_type binary_op) { USE_OPLINE zend_free_op free_op1, free_op2; zval *var_ptr; zval *value; SAVE_OPLINE(); value = GET_OP2_ZVAL_PTR(BP_VAR_R); var_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_RW); if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } FREE_OP2(); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_INLINE_HELPER(zend_binary_assign_op_helper, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, SPEC(DIM_OBJ), binary_op_type binary_op) { #if defined(ZEND_VM_SPEC) && OP2_TYPE == IS_UNUSED ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, binary_op); #else # if !defined(ZEND_VM_SPEC) || OP1_TYPE != IS_UNUSED # if !defined(ZEND_VM_SPEC) /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(opline->extended_value == 0)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_simple_helper, binary_op, binary_op); } if (EXPECTED(opline->extended_value == ZEND_ASSIGN_DIM)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_dim_helper, binary_op, binary_op); } # endif ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_obj_helper, binary_op, binary_op); #endif } ZEND_VM_HANDLER(23, ZEND_ASSIGN_ADD, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, add_function); } ZEND_VM_HANDLER(24, ZEND_ASSIGN_SUB, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, sub_function); } ZEND_VM_HANDLER(25, ZEND_ASSIGN_MUL, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, mul_function); } ZEND_VM_HANDLER(26, ZEND_ASSIGN_DIV, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, div_function); } ZEND_VM_HANDLER(27, ZEND_ASSIGN_MOD, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, mod_function); } ZEND_VM_HANDLER(28, ZEND_ASSIGN_SL, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, shift_left_function); } ZEND_VM_HANDLER(29, ZEND_ASSIGN_SR, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, shift_right_function); } ZEND_VM_HANDLER(30, ZEND_ASSIGN_CONCAT, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, concat_function); } ZEND_VM_HANDLER(31, ZEND_ASSIGN_BW_OR, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_or_function); } ZEND_VM_HANDLER(32, ZEND_ASSIGN_BW_AND, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_and_function); } ZEND_VM_HANDLER(33, ZEND_ASSIGN_BW_XOR, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, bitwise_xor_function); } ZEND_VM_HANDLER(167, ZEND_ASSIGN_POW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|UNUSED|NEXT|CV, DIM_OBJ|CACHE_SLOT, SPEC(DIM_OBJ)) { ZEND_VM_DISPATCH_TO_HELPER(zend_binary_assign_op_helper, binary_op, pow_function); } ZEND_VM_HELPER(zend_pre_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, int inc) { USE_OPLINE zend_free_op free_op1, free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); do { if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { ZEND_VM_C_GOTO(pre_incdec_object); } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ ZEND_VM_C_LABEL(pre_incdec_object): if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP2(); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(132, ZEND_PRE_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_pre_incdec_property_helper, inc, 1); } ZEND_VM_HANDLER(133, ZEND_PRE_DEC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_pre_incdec_property_helper, inc, 0); } ZEND_VM_HELPER(zend_post_incdec_property_helper, VAR|UNUSED|CV, CONST|TMPVAR|CV, int inc) { USE_OPLINE zend_free_op free_op1, free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); do { if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { ZEND_VM_C_GOTO(post_incdec_object); } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ ZEND_VM_C_LABEL(post_incdec_object): if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP2(); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(134, ZEND_POST_INC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_post_incdec_property_helper, inc, 1); } ZEND_VM_HANDLER(135, ZEND_POST_DEC_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_post_incdec_property_helper, inc, 0); } ZEND_VM_HANDLER(34, ZEND_PRE_INC, VAR|CV, ANY, SPEC(RETVAL)) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); increment_function(var_ptr); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(35, ZEND_PRE_DEC, VAR|CV, ANY, SPEC(RETVAL)) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); decrement_function(var_ptr); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(36, ZEND_POST_INC, VAR|CV, ANY) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); increment_function(var_ptr); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(37, ZEND_POST_DEC, VAR|CV, ANY) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); decrement_function(var_ptr); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(40, ZEND_ECHO, CONST|TMPVAR|CV, ANY) { USE_OPLINE zend_free_op free_op1; zval *z; SAVE_OPLINE(); z = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_P(z) == IS_STRING) { zend_string *str = Z_STR_P(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } } else { zend_string *str = zval_get_string_func(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { GET_OP1_UNDEF_CV(z, BP_VAR_R); } zend_string_release_ex(str, 0); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HELPER(zend_fetch_var_address_helper, CONST|TMPVAR|CV, UNUSED, int type) { USE_OPLINE zend_free_op free_op1; zval *varname; zval *retval; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); retval = zend_hash_find_ex(target_symbol_table, name, OP1_TYPE == IS_CONST); if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { ZEND_VM_C_LABEL(fetch_this): zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC); if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (type == BP_VAR_W) { retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); } else { retval = &EG(uninitialized_zval); } } /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ } else if (Z_TYPE_P(retval) == IS_INDIRECT) { retval = Z_INDIRECT_P(retval); if (Z_TYPE_P(retval) == IS_UNDEF) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { ZEND_VM_C_GOTO(fetch_this); } if (type == BP_VAR_W) { ZVAL_NULL(retval); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { ZVAL_NULL(retval); } else { retval = &EG(uninitialized_zval); } } } } if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { FREE_OP1(); } if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_ASSERT(retval != NULL); if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(80, ZEND_FETCH_R, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_R); } ZEND_VM_HANDLER(83, ZEND_FETCH_W, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_W); } ZEND_VM_HANDLER(86, ZEND_FETCH_RW, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_RW); } ZEND_VM_HANDLER(92, ZEND_FETCH_FUNC_ARG, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, fetch_type); } ZEND_VM_HANDLER(95, ZEND_FETCH_UNSET, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_UNSET); } ZEND_VM_HANDLER(89, ZEND_FETCH_IS, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_var_address_helper, type, BP_VAR_IS); } ZEND_VM_HELPER(zend_fetch_static_prop_helper, CONST|TMPVAR|CV, UNUSED|CONST|VAR, int type) { USE_OPLINE zend_free_op free_op1; zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (OP2_TYPE == IS_CONST) { if (OP1_TYPE == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { FREE_UNFETCHED_OP1(); retval = NULL; break; } if (OP1_TYPE != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (OP2_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { FREE_UNFETCHED_OP1(); retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (OP1_TYPE == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } if (OP1_TYPE == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } FREE_OP1(); } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(173, ZEND_FETCH_STATIC_PROP_R, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_R); } ZEND_VM_HANDLER(174, ZEND_FETCH_STATIC_PROP_W, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_W); } ZEND_VM_HANDLER(175, ZEND_FETCH_STATIC_PROP_RW, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_RW); } ZEND_VM_HANDLER(177, ZEND_FETCH_STATIC_PROP_FUNC_ARG, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, fetch_type); } ZEND_VM_HANDLER(178, ZEND_FETCH_STATIC_PROP_UNSET, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_UNSET); } ZEND_VM_HANDLER(176, ZEND_FETCH_STATIC_PROP_IS, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { ZEND_VM_DISPATCH_TO_HELPER(zend_fetch_static_prop_helper, type, BP_VAR_IS); } ZEND_VM_COLD_CONSTCONST_HANDLER(81, ZEND_FETCH_DIM_R, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *dim, *value, *result; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_LABEL(fetch_dim_r_array): value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, OP2_TYPE, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_GOTO(fetch_dim_r_array); } else { ZEND_VM_C_GOTO(fetch_dim_r_slow); } } else { ZEND_VM_C_LABEL(fetch_dim_r_slow): if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); } FREE_OP2(); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(84, ZEND_FETCH_DIM_W, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); zend_fetch_dimension_address_W(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(87, ZEND_FETCH_DIM_RW, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); zend_fetch_dimension_address_RW(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(90, ZEND_FETCH_DIM_IS, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_IS); zend_fetch_dimension_address_read_IS(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); FREE_OP2(); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_HELPER(zend_use_tmp_in_write_context_helper, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use temporary expression in write context"); FREE_UNFETCHED_OP2(); FREE_UNFETCHED_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } ZEND_VM_COLD_HELPER(zend_use_undef_in_read_context_helper, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use [] for reading"); FREE_UNFETCHED_OP2(); FREE_UNFETCHED_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(93, ZEND_FETCH_DIM_FUNC_ARG, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper); } ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_W); } else { if (OP2_TYPE == IS_UNUSED) { ZEND_VM_DISPATCH_TO_HELPER(zend_use_undef_in_read_context_helper); } ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_DIM_R); } } ZEND_VM_HANDLER(96, ZEND_FETCH_DIM_UNSET, VAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET); zend_fetch_dimension_address_UNSET(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_OBJ_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1; zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CONST || (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } ZEND_VM_C_GOTO(fetch_obj_r_no_object); } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (OP2_TYPE == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { ZEND_VM_C_LABEL(fetch_obj_r_no_object): zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); FREE_OP2(); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(85, ZEND_FETCH_OBJ_W, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(88, ZEND_FETCH_OBJ_RW, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_RW); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1; zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } offset = GET_OP2_ZVAL_PTR(BP_VAR_R); if (OP1_TYPE == IS_CONST || (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } ZEND_VM_C_GOTO(fetch_obj_is_no_object); } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (OP2_TYPE == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { ZEND_VM_C_LABEL(fetch_obj_is_no_object): ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); FREE_OP2(); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(94, ZEND_FETCH_OBJ_FUNC_ARG, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_DISPATCH_TO_HELPER(zend_use_tmp_in_write_context_helper); } ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_W); } else { ZEND_VM_DISPATCH_TO_HANDLER(ZEND_FETCH_OBJ_R); } } ZEND_VM_HANDLER(97, ZEND_FETCH_OBJ_UNSET, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *property, *result; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, OP1_TYPE, property, OP2_TYPE, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); FREE_OP2(); if (OP1_TYPE == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(98, ZEND_FETCH_LIST_R, CONST|TMPVARCV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); zend_fetch_dimension_address_LIST_r(container, GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R), OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(198, ZEND_FETCH_LIST_W, VAR, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *dim; SAVE_OPLINE(); container = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_VAR && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT && UNEXPECTED(!Z_ISREF_P(container)) ) { zend_error(E_NOTICE, "Attempting to set reference to non referenceable value"); zend_fetch_dimension_address_LIST_r(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); } else { zend_fetch_dimension_address_W(container, dim, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC); } FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(136, ZEND_ASSIGN_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT, SPEC(OP_DATA=CONST|TMP|VAR|CV)) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } property = GET_OP2_ZVAL_PTR(BP_VAR_R); value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R); if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { ZEND_VM_C_GOTO(assign_object); } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { FREE_OP_DATA(); ZEND_VM_C_GOTO(exit_assign_obj); } } ZEND_VM_C_LABEL(assign_object): if (OP2_TYPE == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { ZEND_VM_C_LABEL(fast_assign_obj): value = zend_assign_to_variable(property_val, value, OP_DATA_TYPE); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } ZEND_VM_C_GOTO(exit_assign_obj); } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { ZEND_VM_C_GOTO(fast_assign_obj); } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (OP_DATA_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (OP_DATA_TYPE != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (OP_DATA_TYPE == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (OP_DATA_TYPE == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } ZEND_VM_C_GOTO(exit_assign_obj); } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); FREE_OP_DATA(); ZEND_VM_C_GOTO(exit_assign_obj); } if (OP_DATA_TYPE == IS_CV || OP_DATA_TYPE == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } FREE_OP_DATA(); ZEND_VM_C_LABEL(exit_assign_obj): FREE_OP2(); FREE_OP1_VAR_PTR(); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } ZEND_VM_HANDLER(147, ZEND_ASSIGN_DIM, VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, SPEC(OP_DATA=CONST|TMP|VAR|CV)) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { ZEND_VM_C_LABEL(try_assign_dim_array): SEPARATE_ARRAY(object_ptr); if (OP2_TYPE == IS_UNUSED) { value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R); if (OP_DATA_TYPE == IS_CV || OP_DATA_TYPE == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { FREE_OP_DATA(); zend_cannot_add_element(); ZEND_VM_C_GOTO(assign_dim_error); } else if (OP_DATA_TYPE == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (OP_DATA_TYPE == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } FREE_OP_DATA(); } } else if (OP_DATA_TYPE == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP2_TYPE == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { ZEND_VM_C_GOTO(assign_dim_error); } value = GET_OP_DATA_ZVAL_PTR(BP_VAR_R); value = zend_assign_to_variable(variable_ptr, value, OP_DATA_TYPE); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { ZEND_VM_C_GOTO(try_assign_dim_array); } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = GET_OP2_ZVAL_PTR(BP_VAR_R); value = GET_OP_DATA_ZVAL_PTR_DEREF(BP_VAR_R); if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); FREE_OP_DATA(); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (OP2_TYPE == IS_UNUSED) { zend_use_new_element_for_string(); FREE_UNFETCHED_OP_DATA(); FREE_OP1_VAR_PTR(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = GET_OP2_ZVAL_PTR(BP_VAR_R); value = GET_OP_DATA_ZVAL_PTR_DEREF(BP_VAR_R); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); FREE_OP_DATA(); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); ZEND_VM_C_GOTO(try_assign_dim_array); } else { if (OP1_TYPE != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = GET_OP2_ZVAL_PTR(BP_VAR_R); ZEND_VM_C_LABEL(assign_dim_error): FREE_UNFETCHED_OP_DATA(); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (OP2_TYPE != IS_UNUSED) { FREE_OP2(); } FREE_OP1_VAR_PTR(); /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } ZEND_VM_HANDLER(38, ZEND_ASSIGN, VAR|CV, CONST|TMP|VAR|CV, SPEC(RETVAL)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = GET_OP2_ZVAL_PTR(BP_VAR_R); variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { FREE_OP2(); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, OP2_TYPE); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } FREE_OP1_VAR_PTR(); /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(39, ZEND_ASSIGN_REF, VAR|CV, VAR|CV, SRC) { USE_OPLINE zend_free_op free_op1, free_op2; zval *variable_ptr; zval *value_ptr; SAVE_OPLINE(); value_ptr = GET_OP2_ZVAL_PTR_PTR(BP_VAR_W); variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); FREE_OP1_VAR_PTR(); FREE_OP2_VAR_PTR(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (OP2_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (OP2_TYPE == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION && UNEXPECTED(!Z_ISREF_P(value_ptr))) { if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, OP2_TYPE OPLINE_CC EXECUTE_DATA_CC))) { FREE_OP2_VAR_PTR(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* op2 freed by assign_to_variable */ FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE(); } else { zend_assign_to_variable_reference(variable_ptr, value_ptr); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr); } FREE_OP2_VAR_PTR(); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HELPER(zend_leave_helper, ANY, ANY) { zend_execute_data *old_execute_data; uint32_t call_info = EX_CALL_INFO(); if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(execute_data->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } EG(vm_stack_top) = (zval*)execute_data; execute_data = EX(prev_execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { zend_clean_and_cache_symbol_table(EX(symbol_table)); } /* Free extra args before releasing the closure, * as that may free the op_array. */ zend_vm_stack_free_extra_args_ex(call_info, execute_data); if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(execute_data->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } old_execute_data = execute_data; execute_data = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) { zend_detach_symbol_table(execute_data); destroy_op_array(&EX(func)->op_array); efree_size(EX(func), sizeof(zend_op_array)); old_execute_data = execute_data; execute_data = EG(current_execute_data) = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); zend_attach_symbol_table(execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else { if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { zend_clean_and_cache_symbol_table(EX(symbol_table)); } zend_vm_stack_free_extra_args_ex(call_info, execute_data); } if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } ZEND_VM_RETURN(); } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ { zend_array *symbol_table = EX(symbol_table); zend_detach_symbol_table(execute_data); old_execute_data = EX(prev_execute_data); while (old_execute_data) { if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) { if (old_execute_data->symbol_table == symbol_table) { zend_attach_symbol_table(old_execute_data); } break; } old_execute_data = old_execute_data->prev_execute_data; } EG(current_execute_data) = EX(prev_execute_data); ZEND_VM_RETURN(); } } } ZEND_VM_HOT_HANDLER(42, ZEND_JMP, JMP_ADDR, ANY) { USE_OPLINE ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0); } ZEND_VM_HOT_NOCONST_HANDLER(43, ZEND_JMPZ, CONST|TMPVAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *val; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline++; } else { opline = OP_JMP_ADDR(opline, opline->op2); } FREE_OP1(); ZEND_VM_JMP(opline); } ZEND_VM_HOT_NOCONST_HANDLER(44, ZEND_JMPNZ, CONST|TMPVAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *val; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = OP_JMP_ADDR(opline, opline->op2); } else { opline++; } FREE_OP1(); ZEND_VM_JMP(opline); } ZEND_VM_HOT_NOCONST_HANDLER(45, ZEND_JMPZNZ, CONST|TMPVAR|CV, JMP_ADDR, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *val; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); } else { opline = OP_JMP_ADDR(opline, opline->op2); } FREE_OP1(); ZEND_VM_JMP(opline); } ZEND_VM_COLD_CONST_HANDLER(46, ZEND_JMPZ_EX, CONST|TMPVAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *val; int ret; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); ret = i_zend_is_true(val); FREE_OP1(); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } ZEND_VM_COLD_CONST_HANDLER(47, ZEND_JMPNZ_EX, CONST|TMPVAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *val; int ret; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); ret = i_zend_is_true(val); FREE_OP1(); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } ZEND_VM_JMP(opline); } ZEND_VM_HANDLER(70, ZEND_FREE, TMPVAR, ANY) { USE_OPLINE SAVE_OPLINE(); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HANDLER(127, ZEND_FE_FREE, TMPVAR, ANY) { zval *var; USE_OPLINE SAVE_OPLINE(); var = EX_VAR(opline->op1.var); if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) { zend_hash_iterator_del(Z_FE_ITER_P(var)); } zval_ptr_dtor_nogc(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(53, ZEND_FAST_CONCAT, CONST|TMPVAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if ((OP1_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (OP2_TYPE == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (OP1_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (OP2_TYPE == IS_CONST || OP2_TYPE == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } FREE_OP1(); } else if (OP2_TYPE != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (OP1_TYPE == IS_CONST || OP1_TYPE == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } FREE_OP2(); } else if (OP1_TYPE != IS_CONST && OP1_TYPE != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); FREE_OP2(); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); FREE_OP1(); FREE_OP2(); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (OP1_TYPE == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (OP2_TYPE == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (OP1_TYPE != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (OP2_TYPE == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (OP2_TYPE != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (OP1_TYPE != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (OP2_TYPE != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(54, ZEND_ROPE_INIT, UNUSED, CONST|TMPVAR|CV, NUM) { USE_OPLINE zend_free_op free_op2; zend_string **rope; zval *var; /* Compiler allocates the necessary number of zval slots to keep the rope */ rope = (zend_string**)EX_VAR(opline->result.var); if (OP2_TYPE == IS_CONST) { var = GET_OP2_ZVAL_PTR(BP_VAR_R); rope[0] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (OP2_TYPE == IS_CV) { rope[0] = zend_string_copy(Z_STR_P(var)); } else { rope[0] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[0] = zval_get_string_func(var); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(55, ZEND_ROPE_ADD, TMP, CONST|TMPVAR|CV, NUM) { USE_OPLINE zend_free_op free_op2; zend_string **rope; zval *var; /* op1 and result are the same */ rope = (zend_string**)EX_VAR(opline->op1.var); if (OP2_TYPE == IS_CONST) { var = GET_OP2_ZVAL_PTR(BP_VAR_R); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (OP2_TYPE == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(56, ZEND_ROPE_END, TMP, CONST|TMPVAR|CV, NUM) { USE_OPLINE zend_free_op free_op2; zend_string **rope; zval *var, *ret; uint32_t i; size_t len = 0; char *target; rope = (zend_string**)EX_VAR(opline->op1.var); if (OP2_TYPE == IS_CONST) { var = GET_OP2_ZVAL_PTR(BP_VAR_R); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (OP2_TYPE == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); FREE_OP2(); if (UNEXPECTED(EG(exception))) { for (i = 0; i <= opline->extended_value; i++) { zend_string_release_ex(rope[i], 0); } ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } for (i = 0; i <= opline->extended_value; i++) { len += ZSTR_LEN(rope[i]); } ret = EX_VAR(opline->result.var); ZVAL_STR(ret, zend_string_alloc(len, 0)); target = Z_STRVAL_P(ret); for (i = 0; i <= opline->extended_value; i++) { memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i])); target += ZSTR_LEN(rope[i]); zend_string_release_ex(rope[i], 0); } *target = '\0'; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(109, ZEND_FETCH_CLASS, UNUSED|CLASS_FETCH, CONST|TMPVAR|UNUSED|CV, CACHE_SLOT) { zend_free_op free_op2; zval *class_name; USE_OPLINE SAVE_OPLINE(); if (OP2_TYPE == IS_UNUSED) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else if (OP2_TYPE == IS_CONST) { zend_class_entry *ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { class_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num); CACHE_PTR(opline->extended_value, ce); } Z_CE_P(EX_VAR(opline->result.var)) = ce; } else { class_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); ZEND_VM_C_LABEL(try_class_name): if (Z_TYPE_P(class_name) == IS_OBJECT) { Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name); } else if (Z_TYPE_P(class_name) == IS_STRING) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) { class_name = Z_REFVAL_P(class_name); ZEND_VM_C_GOTO(try_class_name); } else { if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_OBJ_HANDLER(112, ZEND_INIT_METHOD_CALL, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, NUM|CACHE_SLOT) { USE_OPLINE zval *function_name; zend_free_op free_op1, free_op2; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } if (OP2_TYPE != IS_CONST) { function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); } if (OP2_TYPE != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((OP2_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { FREE_OP1(); HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); FREE_OP2(); FREE_OP1(); HANDLE_EXCEPTION(); } while (0); } if (OP1_TYPE != IS_UNUSED) { do { if (OP1_TYPE == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((OP1_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (OP2_TYPE != IS_CONST) { FREE_OP2(); } HANDLE_EXCEPTION(); } } if (OP2_TYPE == IS_CONST) { function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); } zend_invalid_method_call(object, function_name); FREE_OP2(); FREE_OP1(); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (OP2_TYPE == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); FREE_OP2(); FREE_OP1(); HANDLE_EXCEPTION(); } if (OP2_TYPE == IS_CONST) { function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((OP2_TYPE == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } FREE_OP2(); FREE_OP1(); HANDLE_EXCEPTION(); } if (OP2_TYPE == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (OP2_TYPE != IS_CONST) { FREE_OP2(); } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; FREE_OP1(); if ((OP1_TYPE & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (OP1_TYPE & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (OP1_TYPE == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ FREE_OP1(); } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(113, ZEND_INIT_STATIC_METHOD_CALL, UNUSED|CLASS_FETCH|CONST|VAR, CONST|TMPVAR|UNUSED|CONSTRUCTOR|CV, NUM|CACHE_SLOT) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (OP1_TYPE == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); FREE_UNFETCHED_OP2(); HANDLE_EXCEPTION(); } if (OP2_TYPE != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (OP1_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); FREE_UNFETCHED_OP2(); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (OP1_TYPE == IS_CONST && OP2_TYPE == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (OP1_TYPE != IS_CONST && OP2_TYPE == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (OP2_TYPE != IS_UNUSED) { zend_free_op free_op2; function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP2_TYPE != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (OP2_TYPE & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); FREE_OP2(); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((OP2_TYPE == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } FREE_OP2(); HANDLE_EXCEPTION(); } if (OP2_TYPE == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (OP2_TYPE != IS_CONST) { FREE_OP2(); } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (OP1_TYPE == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(59, ZEND_INIT_FCALL_BY_NAME, ANY, CONST, NUM|CACHE_SLOT) { USE_OPLINE zend_function *fbc; zval *function_name, *func; zend_execute_data *call; fbc = CACHED_PTR(opline->result.num); if (UNEXPECTED(fbc == NULL)) { function_name = (zval*)RT_CONSTANT(opline, opline->op2); func = zend_hash_find_ex(EG(function_table), Z_STR_P(function_name+1), 1); if (UNEXPECTED(func == NULL)) { ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper, function_name, function_name); } fbc = Z_FUNC_P(func); if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { fbc = init_func_run_time_cache_ex(func); } CACHE_PTR(opline->result.num, fbc); } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, NULL, NULL); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(128, ZEND_INIT_DYNAMIC_CALL, ANY, CONST|TMPVAR|CV, NUM) { USE_OPLINE zend_free_op free_op2; zval *function_name; zend_execute_data *call; SAVE_OPLINE(); function_name = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); ZEND_VM_C_LABEL(try_function_name): if (OP2_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value); } else if (OP2_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) { call = zend_init_dynamic_call_object(function_name, opline->extended_value); } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) { call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) { function_name = Z_REFVAL_P(function_name); ZEND_VM_C_GOTO(try_function_name); } else { if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); call = NULL; } FREE_OP2(); if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } if (OP2_TYPE & (IS_VAR|IS_TMP_VAR)) { if (UNEXPECTED(EG(exception))) { if (call) { if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { zend_string_release_ex(call->func->common.function_name, 0); zend_free_trampoline(call->func); } zend_vm_stack_free_call_frame(call); } HANDLE_EXCEPTION(); } } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(118, ZEND_INIT_USER_CALL, CONST, CONST|TMPVAR|CV, NUM) { USE_OPLINE zend_free_op free_op2; zval *function_name; zend_fcall_info_cache fcc; char *error = NULL; zend_function *func; zend_class_entry *called_scope; zend_object *object; zend_execute_data *call; uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC; SAVE_OPLINE(); function_name = GET_OP2_ZVAL_PTR(BP_VAR_R); if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) { func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; if (error) { efree(error); /* This is the only soft error is_callable() can generate */ zend_non_static_method_call(func); if (UNEXPECTED(EG(exception) != NULL)) { FREE_OP2(); HANDLE_EXCEPTION(); } } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ GC_ADDREF(ZEND_CLOSURE_OBJECT(func)); call_info |= ZEND_CALL_CLOSURE; if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { call_info |= ZEND_CALL_FAKE_CLOSURE; } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_ADDREF(object); /* For $this pointer */ } FREE_OP2(); if ((OP2_TYPE & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { if (call_info & ZEND_CALL_CLOSURE) { zend_object_release(ZEND_CLOSURE_OBJECT(func)); } if (call_info & ZEND_CALL_RELEASE_THIS) { zend_object_release(object); } HANDLE_EXCEPTION(); } if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error); efree(error); FREE_OP2(); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; } call = zend_vm_stack_push_call_frame(call_info, func, opline->extended_value, called_scope, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(69, ZEND_INIT_NS_FCALL_BY_NAME, ANY, CONST, NUM|CACHE_SLOT) { USE_OPLINE zval *func_name; zval *func; zend_function *fbc; zend_execute_data *call; fbc = CACHED_PTR(opline->result.num); if (UNEXPECTED(fbc == NULL)) { func_name = (zval *)RT_CONSTANT(opline, opline->op2); func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1); if (func == NULL) { func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1); if (UNEXPECTED(func == NULL)) { ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper, function_name, func_name); } } fbc = Z_FUNC_P(func); if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { fbc = init_func_run_time_cache_ex(func); } CACHE_PTR(opline->result.num, fbc); } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, NULL, NULL); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(61, ZEND_INIT_FCALL, NUM, CONST, NUM|CACHE_SLOT) { USE_OPLINE zend_free_op free_op2; zval *fname; zval *func; zend_function *fbc; zend_execute_data *call; fbc = CACHED_PTR(opline->result.num); if (UNEXPECTED(fbc == NULL)) { fname = GET_OP2_ZVAL_PTR(BP_VAR_R); func = zend_hash_find_ex(EG(function_table), Z_STR_P(fname), 1); if (UNEXPECTED(func == NULL)) { ZEND_VM_DISPATCH_TO_HELPER(zend_undefined_function_helper, function_name, fname); } fbc = Z_FUNC_P(func); if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { fbc = init_func_run_time_cache_ex(func); } CACHE_PTR(opline->result.num, fbc); } call = zend_vm_stack_push_call_frame_ex( opline->op1.num, ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, NULL, NULL); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(129, ZEND_DO_ICALL, ANY, ANY, SPEC(RETVAL)) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; zval retval; SAVE_OPLINE(); EX(call) = call->prev_execute_data; call->prev_execute_data = execute_data; EG(current_execute_data) = call; ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); if (!RETURN_VALUE_USED(opline)) { zval_ptr_dtor(ret); } if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } ZEND_VM_HOT_HANDLER(130, ZEND_DO_UCALL, ANY, ANY, SPEC(RETVAL)) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; ret = NULL; if (RETURN_VALUE_USED(opline)) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } ZEND_VM_HOT_HANDLER(131, ZEND_DO_FCALL_BY_NAME, ANY, ANY, SPEC(RETVAL)) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; if (RETURN_VALUE_USED(opline)) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { zend_vm_stack_free_call_frame(call); zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); if (!RETURN_VALUE_USED(opline)) { zval_ptr_dtor(ret); } } if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } ZEND_VM_HOT_HANDLER(60, ZEND_DO_FCALL, ANY, ANY, SPEC(RETVAL)) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zend_object *object; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) { if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) { ZEND_VM_DISPATCH_TO_HELPER(zend_abstract_method_helper, fbc, fbc); } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; if (RETURN_VALUE_USED(opline)) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) { zval retval; call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { UNDEF_RESULT(); ZEND_VM_C_GOTO(fcall_end); } ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); if (!zend_execute_internal) { /* saves one function call if zend_execute_internal is not used */ fbc->internal_function.handler(call, ret); } else { zend_execute_internal(call, ret); } #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); if (!RETURN_VALUE_USED(opline)) { zval_ptr_dtor(ret); } } else { /* ZEND_OVERLOADED_FUNCTION */ zval retval; ret = RETURN_VALUE_USED(opline) ? EX_VAR(opline->result.var) : &retval; call->prev_execute_data = execute_data; if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!RETURN_VALUE_USED(opline)) { zval_ptr_dtor(ret); } } ZEND_VM_C_LABEL(fcall_end): if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { object = Z_OBJ(call->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } zend_vm_stack_free_call_frame(call); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } ZEND_VM_COLD_CONST_HANDLER(124, ZEND_VERIFY_RETURN_TYPE, CONST|TMP|VAR|UNUSED|CV, UNUSED|CACHE_SLOT) { USE_OPLINE SAVE_OPLINE(); if (OP1_TYPE == IS_UNUSED) { zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num)); } else { /* prevents "undefined variable opline" errors */ #if !defined(ZEND_VM_SPEC) || (OP1_TYPE != IS_UNUSED) zval *retval_ref, *retval_ptr; zend_free_op free_op1; zend_arg_info *ret_info = EX(func)->common.arg_info - 1; retval_ref = retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); if (OP1_TYPE == IS_CONST) { ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr); retval_ref = retval_ptr = EX_VAR(opline->result.var); } else if (OP1_TYPE == IS_VAR) { if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) { retval_ptr = Z_INDIRECT_P(retval_ptr); } ZVAL_DEREF(retval_ptr); } else if (OP1_TYPE == IS_CV) { ZVAL_DEREF(retval_ptr); } if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type) && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr)) && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) && retval_ref != retval_ptr) ) { /* A cast might happen - unwrap the reference if this is a by-value return */ if (Z_REFCOUNT_P(retval_ref) == 1) { ZVAL_UNREF(retval_ref); } else { Z_DELREF_P(retval_ref); ZVAL_COPY(retval_ref, retval_ptr); } retval_ptr = retval_ref; } zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num)); #endif } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HANDLER(62, ZEND_RETURN, CONST|TMP|VAR|CV, ANY) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); return_value = EX(return_value); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (OP1_TYPE & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (OP1_TYPE == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } ZEND_VM_COLD_CONST_HANDLER(111, ZEND_RETURN_BY_REF, CONST|TMP|VAR|CV, ANY, SRC) { USE_OPLINE zval *retval_ptr; zend_free_op free_op1; SAVE_OPLINE(); do { if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR)) || (OP1_TYPE == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { /* Not supposed to happen, but we'll allow it */ zend_error(E_NOTICE, "Only variable references should be returned by reference"); retval_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); if (!EX(return_value)) { FREE_OP1(); } else { if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(EX(return_value), retval_ptr); break; } ZVAL_NEW_REF(EX(return_value), retval_ptr); if (OP1_TYPE == IS_CONST) { Z_TRY_ADDREF_P(retval_ptr); } } break; } retval_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); if (OP1_TYPE == IS_VAR) { if (retval_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) { zend_error(E_NOTICE, "Only variable references should be returned by reference"); if (EX(return_value)) { ZVAL_NEW_REF(EX(return_value), retval_ptr); } else { FREE_OP1_VAR_PTR(); } break; } } if (EX(return_value)) { if (Z_ISREF_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } else { ZVAL_MAKE_REF_EX(retval_ptr, 2); } ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); } FREE_OP1_VAR_PTR(); } while (0); ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } ZEND_VM_HANDLER(41, ZEND_GENERATOR_CREATE, ANY, ANY) { zval *return_value = EX(return_value); if (EXPECTED(return_value)) { USE_OPLINE zend_generator *generator; zend_execute_data *gen_execute_data; uint32_t num_args, used_stack, call_info; object_init_ex(return_value, zend_ce_generator); /* * Normally the execute_data is allocated on the VM stack (because it does * not actually do any allocation and thus is faster). For generators * though this behavior would be suboptimal, because the (rather large) * structure would have to be copied back and forth every time execution is * suspended or resumed. That's why for generators the execution context * is allocated on heap. */ num_args = EX_NUM_ARGS(); if (EXPECTED(num_args <= EX(func)->op_array.num_args)) { used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval); gen_execute_data = (zend_execute_data*)emalloc(used_stack); used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval); } else { used_stack = (ZEND_CALL_FRAME_SLOT + num_args + EX(func)->op_array.last_var + EX(func)->op_array.T - EX(func)->op_array.num_args) * sizeof(zval); gen_execute_data = (zend_execute_data*)emalloc(used_stack); } memcpy(gen_execute_data, execute_data, used_stack); /* Save execution context in generator object. */ generator = (zend_generator *) Z_OBJ_P(EX(return_value)); generator->execute_data = gen_execute_data; generator->frozen_call_stack = NULL; generator->execute_fake.opline = NULL; generator->execute_fake.func = NULL; generator->execute_fake.prev_execute_data = NULL; ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator); gen_execute_data->opline = opline + 1; /* EX(return_value) keeps pointer to zend_object (not a real zval) */ gen_execute_data->return_value = (zval*)generator; call_info = Z_TYPE_INFO(EX(This)); if ((call_info & Z_TYPE_MASK) == IS_OBJECT && (!(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT)) /* Bug #72523 */ || UNEXPECTED(zend_execute_ex != execute_ex))) { ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS); Z_ADDREF(gen_execute_data->This); } ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR)); Z_TYPE_INFO(gen_execute_data->This) = call_info; gen_execute_data->prev_execute_data = NULL; call_info = EX_CALL_INFO(); EG(current_execute_data) = EX(prev_execute_data); if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) { EG(vm_stack_top) = (zval*)execute_data; execute_data = EX(prev_execute_data); LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) { zend_execute_data *old_execute_data = execute_data; execute_data = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else { ZEND_VM_RETURN(); } } else { ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } } ZEND_VM_HANDLER(161, ZEND_GENERATOR_RETURN, CONST|TMP|VAR|CV, ANY) { USE_OPLINE zval *retval; zend_free_op free_op1; zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); retval = GET_OP1_ZVAL_PTR(BP_VAR_R); /* Copy return value into generator->retval */ if ((OP1_TYPE & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(&generator->retval, retval); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { Z_ADDREF(generator->retval); } } } else if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(&generator->retval, retval); } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval))) { zend_refcounted *ref = Z_COUNTED_P(retval); retval = Z_REFVAL_P(retval); ZVAL_COPY_VALUE(&generator->retval, retval); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval)) { Z_ADDREF_P(retval); } } else { ZVAL_COPY_VALUE(&generator->retval, retval); } } /* Close the generator to free up resources */ zend_generator_close(generator, 1); /* Pass execution back to handling code */ ZEND_VM_RETURN(); } ZEND_VM_COLD_CONST_HANDLER(108, ZEND_THROW, CONST|TMP|VAR|CV, ANY) { USE_OPLINE zval *value; zend_free_op free_op1; SAVE_OPLINE(); value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); do { if (OP1_TYPE == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { break; } } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Can only throw objects"); FREE_OP1(); HANDLE_EXCEPTION(); } } while (0); zend_exception_save(); if (OP1_TYPE != IS_TMP_VAR) { Z_TRY_ADDREF_P(value); } zend_throw_exception_object(value); zend_exception_restore(); FREE_OP1_IF_VAR(); HANDLE_EXCEPTION(); } ZEND_VM_HANDLER(107, ZEND_CATCH, CONST, JMP_ADDR, LAST_CATCH|CACHE_SLOT) { USE_OPLINE zend_class_entry *ce, *catch_ce; zend_object *exception; zval *ex; SAVE_OPLINE(); /* Check whether an exception has been thrown, if not, jump over code */ zend_exception_restore(); if (EG(exception) == NULL) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH); if (UNEXPECTED(catch_ce == NULL)) { catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce); } ce = EG(exception)->ce; #ifdef HAVE_DTRACE if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) { DTRACE_EXCEPTION_CAUGHT((char *)ce->name); } #endif /* HAVE_DTRACE */ if (ce != catch_ce) { if (!catch_ce || !instanceof_function(ce, catch_ce)) { if (opline->extended_value & ZEND_LAST_CATCH) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } } exception = EG(exception); ex = EX_VAR(opline->result.var); if (UNEXPECTED(Z_ISREF_P(ex))) { ex = Z_REFVAL_P(ex); } zval_ptr_dtor(ex); ZVAL_OBJ(ex, EG(exception)); if (UNEXPECTED(EG(exception) != exception)) { GC_ADDREF(EG(exception)); HANDLE_EXCEPTION(); } else { EG(exception) = NULL; ZEND_VM_NEXT_OPCODE(); } } ZEND_VM_HOT_HANDLER(65, ZEND_SEND_VAL, CONST|TMPVAR, NUM) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; value = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_HELPER(zend_cannot_pass_by_ref_helper, ANY, ANY) { USE_OPLINE zval *arg; uint32_t arg_num = opline->op2.num; SAVE_OPLINE(); zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num); FREE_UNFETCHED_OP1(); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_UNDEF(arg); HANDLE_EXCEPTION(); } ZEND_VM_HOT_SEND_HANDLER(116, ZEND_SEND_VAL_EX, CONST|TMP, NUM, SPEC(QUICK_ARG)) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) { if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_C_GOTO(send_val_by_ref); } } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_C_LABEL(send_val_by_ref): ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper); } value = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(117, ZEND_SEND_VAR, VAR|CV, NUM) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(106, ZEND_SEND_VAR_NO_REF, VAR, NUM) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr))) { ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_SEND_HANDLER(50, ZEND_SEND_VAR_NO_REF_EX, VAR, NUM, SPEC(QUICK_ARG)) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) { if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_VAR); } varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr) || QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) { ZEND_VM_NEXT_OPCODE(); } } else { if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_VAR); } varptr = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr) || ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(67, ZEND_SEND_REF, VAR|CV, NUM) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; SAVE_OPLINE(); varptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (OP1_TYPE == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) { ZVAL_NEW_EMPTY_REF(arg); ZVAL_NULL(Z_REFVAL_P(arg)); ZEND_VM_NEXT_OPCODE(); } if (Z_ISREF_P(varptr)) { Z_ADDREF_P(varptr); } else { ZVAL_MAKE_REF_EX(varptr, 2); } ZVAL_REF(arg, Z_REF_P(varptr)); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_SEND_HANDLER(66, ZEND_SEND_VAR_EX, VAR|CV, NUM, SPEC(QUICK_ARG)) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_C_GOTO(send_var_by_ref); } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_C_LABEL(send_var_by_ref): ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF); } varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_SEND_HANDLER(100, ZEND_CHECK_FUNC_ARG, UNUSED, NUM, SPEC(QUICK_ARG)) { USE_OPLINE uint32_t arg_num = opline->op2.num; if (EXPECTED(arg_num <= MAX_ARG_FLAG_NUM)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } else { ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } else { ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(185, ZEND_SEND_FUNC_ARG, VAR, NUM) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF); } varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(165, ZEND_SEND_UNPACK, ANY, ANY) { USE_OPLINE zend_free_op free_op1; zval *args; int arg_num; SAVE_OPLINE(); args = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1; ZEND_VM_C_LABEL(send_again): if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) { HashTable *ht = Z_ARRVAL_P(args); zval *arg, *top; zend_string *name; zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht)); if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) { uint32_t i; int separate = 0; /* check if any of arguments are going to be passed by reference */ for (i = 0; i < zend_hash_num_elements(ht); i++) { if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num + i)) { separate = 1; break; } } if (separate) { SEPARATE_ARRAY(args); ht = Z_ARRVAL_P(args); } } ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) { if (name) { zend_throw_error(NULL, "Cannot unpack array with string keys"); FREE_OP1(); HANDLE_EXCEPTION(); } top = ZEND_CALL_ARG(EX(call), arg_num); if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { if (Z_ISREF_P(arg)) { Z_ADDREF_P(arg); ZVAL_REF(top, Z_REF_P(arg)); } else if (OP1_TYPE & (IS_VAR|IS_CV)) { /* array is already separated above */ ZVAL_MAKE_REF_EX(arg, 2); ZVAL_REF(top, Z_REF_P(arg)); } else { Z_TRY_ADDREF_P(arg); ZVAL_NEW_REF(top, arg); } } else { ZVAL_COPY_DEREF(top, arg); } ZEND_CALL_NUM_ARGS(EX(call))++; arg_num++; } ZEND_HASH_FOREACH_END(); } else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) { zend_class_entry *ce = Z_OBJCE_P(args); zend_object_iterator *iter; if (!ce || !ce->get_iterator) { zend_error(E_WARNING, "Only arrays and Traversables can be unpacked"); } else { iter = ce->get_iterator(ce, args, 0); if (UNEXPECTED(!iter)) { FREE_OP1(); if (!EG(exception)) { zend_throw_exception_ex( NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name) ); } HANDLE_EXCEPTION(); } if (iter->funcs->rewind) { iter->funcs->rewind(iter); } for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) { zval *arg, *top; if (UNEXPECTED(EG(exception) != NULL)) { break; } arg = iter->funcs->get_current_data(iter); if (UNEXPECTED(EG(exception) != NULL)) { break; } if (iter->funcs->get_current_key) { zval key; iter->funcs->get_current_key(iter, &key); if (UNEXPECTED(EG(exception) != NULL)) { break; } if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) { zend_throw_error(NULL, (Z_TYPE(key) == IS_STRING) ? "Cannot unpack Traversable with string keys" : "Cannot unpack Traversable with non-integer keys"); zval_ptr_dtor(&key); break; } } if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { zend_error( E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()" " by unpacking a Traversable, passing by-value instead", arg_num, EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "", EX(call)->func->common.scope ? "::" : "", ZSTR_VAL(EX(call)->func->common.function_name) ); } ZVAL_DEREF(arg); Z_TRY_ADDREF_P(arg); zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1); top = ZEND_CALL_ARG(EX(call), arg_num); ZVAL_COPY_VALUE(top, arg); ZEND_CALL_NUM_ARGS(EX(call))++; iter->funcs->move_forward(iter); } zend_iterator_dtor(iter); } } else if (EXPECTED(Z_ISREF_P(args))) { args = Z_REFVAL_P(args); ZEND_VM_C_GOTO(send_again); } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) { GET_OP1_UNDEF_CV(args, BP_VAR_R); } zend_error(E_WARNING, "Only arrays and Traversables can be unpacked"); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(119, ZEND_SEND_ARRAY, ANY, ANY, NUM) { USE_OPLINE zend_free_op free_op1; zval *args; SAVE_OPLINE(); args = GET_OP1_ZVAL_PTR(BP_VAR_R); if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) { args = Z_REFVAL_P(args); if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) { ZEND_VM_C_GOTO(send_array); } } zend_internal_type_error(EX_USES_STRICT_TYPES(), "call_user_func_array() expects parameter 2 to be array, %s given", zend_get_type_by_const(Z_TYPE_P(args))); if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(call)->func)); } if (Z_TYPE(EX(call)->This) == IS_OBJECT) { OBJ_RELEASE(Z_OBJ(EX(call)->This)); } EX(call)->func = (zend_function*)&zend_pass_function; Z_OBJ(EX(call)->This) = NULL; ZEND_SET_CALL_INFO(EX(call), 0, ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS); FREE_UNFETCHED_OP2(); } else { uint32_t arg_num; HashTable *ht; zval *arg, *param; ZEND_VM_C_LABEL(send_array): ht = Z_ARRVAL_P(args); if (OP2_TYPE != IS_UNUSED) { zend_free_op free_op2; zval *op2 = GET_OP2_ZVAL_PTR_DEREF(BP_VAR_R); uint32_t skip = opline->extended_value; uint32_t count = zend_hash_num_elements(ht); zend_long len = zval_get_long(op2); if (len < 0) { len += (zend_long)(count - skip); } if (skip < count && len > 0) { if (len > (zend_long)(count - skip)) { len = (zend_long)(count - skip); } zend_vm_stack_extend_call_frame(&EX(call), 0, len); arg_num = 1; param = ZEND_CALL_ARG(EX(call), 1); ZEND_HASH_FOREACH_VAL(ht, arg) { if (skip > 0) { skip--; continue; } else if ((zend_long)(arg_num - 1) >= len) { break; } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { if (UNEXPECTED(!Z_ISREF_P(arg))) { if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) { /* By-value send is not allowed -- emit a warning, * but still perform the call. */ zend_param_must_be_ref(EX(call)->func, arg_num); } } } else { if (Z_ISREF_P(arg) && !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) { /* don't separate references for __call */ arg = Z_REFVAL_P(arg); } } ZVAL_COPY(param, arg); ZEND_CALL_NUM_ARGS(EX(call))++; arg_num++; param++; } ZEND_HASH_FOREACH_END(); } FREE_OP2(); } else { zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht)); arg_num = 1; param = ZEND_CALL_ARG(EX(call), 1); ZEND_HASH_FOREACH_VAL(ht, arg) { if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { if (UNEXPECTED(!Z_ISREF_P(arg))) { if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) { /* By-value send is not allowed -- emit a warning, * but still perform the call. */ zend_param_must_be_ref(EX(call)->func, arg_num); } } } else { if (Z_ISREF_P(arg) && !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) { /* don't separate references for __call */ arg = Z_REFVAL_P(arg); } } ZVAL_COPY(param, arg); ZEND_CALL_NUM_ARGS(EX(call))++; arg_num++; param++; } ZEND_HASH_FOREACH_END(); } } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(120, ZEND_SEND_USER, CONST|TMP|VAR|CV, NUM) { USE_OPLINE zval *arg, *param; zend_free_op free_op1; SAVE_OPLINE(); arg = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); param = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) { zend_param_must_be_ref(EX(call)->func, opline->op2.num); } ZVAL_COPY(param, arg); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HANDLER(63, ZEND_RECV, NUM, UNUSED|CACHE_SLOT) { USE_OPLINE uint32_t arg_num = opline->op1.num; if (UNEXPECTED(arg_num > EX_NUM_ARGS())) { SAVE_OPLINE(); zend_missing_arg_error(execute_data); HANDLE_EXCEPTION(); } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { zval *param = EX_VAR(opline->result.var); SAVE_OPLINE(); if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(64, ZEND_RECV_INIT, NUM, CONST, CACHE_SLOT) { USE_OPLINE uint32_t arg_num; zval *param; ZEND_VM_REPEATABLE_OPCODE arg_num = opline->op1.num; param = EX_VAR(opline->result.var); if (arg_num > EX_NUM_ARGS()) { zval *default_value = RT_CONSTANT(opline, opline->op2); if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) { zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value)); /* we keep in cache only not refcounted values */ if (Z_TYPE_P(cache_val) != IS_UNDEF) { ZVAL_COPY_VALUE(param, cache_val); } else { SAVE_OPLINE(); ZVAL_COPY(param, default_value); if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) { zval_ptr_dtor_nogc(param); ZVAL_UNDEF(param); HANDLE_EXCEPTION(); } if (!Z_REFCOUNTED_P(param)) { ZVAL_COPY_VALUE(cache_val, param); } } } else { ZVAL_COPY(param, default_value); } } if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { zval *default_value = RT_CONSTANT(opline, opline->op2); SAVE_OPLINE(); if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(164, ZEND_RECV_VARIADIC, NUM, UNUSED|CACHE_SLOT) { USE_OPLINE uint32_t arg_num = opline->op1.num; uint32_t arg_count = EX_NUM_ARGS(); zval *params; SAVE_OPLINE(); params = EX_VAR(opline->result.var); if (arg_num <= arg_count) { zval *param; array_init_size(params, arg_count - arg_num + 1); zend_hash_real_init_packed(Z_ARRVAL_P(params)); ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) { param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T); if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS); do { zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)); if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param); ZEND_HASH_FILL_ADD(param); param++; } while (++arg_num <= arg_count); } else { do { if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param); ZEND_HASH_FILL_ADD(param); param++; } while (++arg_num <= arg_count); } } ZEND_HASH_FILL_END(); } else { ZVAL_EMPTY_ARRAY(params); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(52, ZEND_BOOL, CONST|TMPVAR|CV, ANY) { USE_OPLINE zval *val; zend_free_op free_op1; val = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); if (OP1_TYPE == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(48, ZEND_CASE, TMPVAR, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); FREE_OP2(); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(68, ZEND_NEW, UNUSED|CLASS_FETCH|CONST|VAR, UNUSED|CACHE_SLOT, NUM) { USE_OPLINE zval *result; zend_function *constructor; zend_class_entry *ce; zend_execute_data *call; SAVE_OPLINE(); if (OP1_TYPE == IS_CONST) { ce = CACHED_PTR(opline->op2.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } CACHE_PTR(opline->op2.num, ce); } } else if (OP1_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } result = EX_VAR(opline->result.var); if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) { ZVAL_UNDEF(result); HANDLE_EXCEPTION(); } constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result)); if (constructor == NULL) { if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next * opcode is DO_FCALL in case EXT instructions are used. */ if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) { ZEND_VM_NEXT_OPCODE_EX(1, 2); } /* Perform a dummy function call */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function, opline->extended_value, NULL, NULL); } else { if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) { init_func_run_time_cache(&constructor->op_array); } /* We are not handling overloaded classes right now */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR, constructor, opline->extended_value, ce, Z_OBJ_P(result)); Z_ADDREF_P(result); } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_CONST_HANDLER(110, ZEND_CLONE, CONST|TMPVAR|UNUSED|THIS|CV, ANY) { USE_OPLINE zend_free_op free_op1; zval *obj; zend_class_entry *ce, *scope; zend_function *clone; zend_object_clone_obj_t clone_call; SAVE_OPLINE(); obj = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } do { if (OP1_TYPE == IS_CONST || (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) { obj = Z_REFVAL_P(obj); if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) { break; } } ZVAL_UNDEF(EX_VAR(opline->result.var)); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "__clone method called on non-object"); FREE_OP1(); HANDLE_EXCEPTION(); } } while (0); ce = Z_OBJCE_P(obj); clone = ce->clone; clone_call = Z_OBJ_HT_P(obj)->clone_obj; if (UNEXPECTED(clone_call == NULL)) { zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name)); FREE_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (clone) { if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (!zend_check_private(clone, scope, clone->common.function_name)) { zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); FREE_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) { zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); FREE_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj)); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HANDLER(99, ZEND_FETCH_CONSTANT, UNUSED|CONST_FETCH, CONST, CACHE_SLOT) { USE_OPLINE zend_constant *c; c = CACHED_PTR(opline->extended_value); if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) { ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(181, ZEND_FETCH_CLASS_CONSTANT, VAR|CONST|UNUSED|CLASS_FETCH, CONST, CACHE_SLOT) { zend_class_entry *ce, *scope; zend_class_constant *c; zval *value, *zv; USE_OPLINE SAVE_OPLINE(); do { if (OP1_TYPE == IS_CONST) { if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else if (EXPECTED(CACHED_PTR(opline->extended_value))) { ce = CACHED_PTR(opline->extended_value); } else { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } else { if (OP1_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1); if (EXPECTED(zv != NULL)) { c = Z_PTR_P(zv); scope = EX(func)->op_array.scope; if (!zend_verify_const_access(c, scope)) { zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } value = &c->value; if (Z_TYPE_P(value) == IS_CONSTANT_AST) { zval_update_constant_ex(value, c->ce); if (UNEXPECTED(EG(exception) != NULL)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value); } else { zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } while (0); ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(72, ZEND_ADD_ARRAY_ELEMENT, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, REF) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } FREE_OP1_VAR_PTR(); } else { expr_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); if (OP1_TYPE == IS_TMP_VAR) { /* pass */ } else if (OP1_TYPE == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (OP1_TYPE == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (OP1_TYPE == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (OP2_TYPE != IS_UNUSED) { zend_free_op free_op2; zval *offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); zend_string *str; zend_ulong hval; ZEND_VM_C_LABEL(add_again): if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (OP2_TYPE != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { ZEND_VM_C_GOTO(num_index); } } ZEND_VM_C_LABEL(str_index): zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); ZEND_VM_C_LABEL(num_index): zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); ZEND_VM_C_GOTO(add_again); } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); ZEND_VM_C_GOTO(str_index); } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); ZEND_VM_C_GOTO(num_index); } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; ZEND_VM_C_GOTO(num_index); } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; ZEND_VM_C_GOTO(num_index); } else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); ZEND_VM_C_GOTO(str_index); } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } FREE_OP2(); } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(71, ZEND_INIT_ARRAY, CONST|TMP|VAR|CV, CONST|TMPVAR|UNUSED|NEXT|CV, ARRAY_INIT|REF) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (OP1_TYPE != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_DISPATCH_TO_HANDLER(ZEND_ADD_ARRAY_ELEMENT); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } ZEND_VM_COLD_CONST_HANDLER(21, ZEND_CAST, CONST|TMP|VAR|CV, ANY, TYPE) { USE_OPLINE zend_free_op free_op1; zval *expr; zval *result = EX_VAR(opline->result.var); HashTable *ht; SAVE_OPLINE(); expr = GET_OP1_ZVAL_PTR(BP_VAR_R); switch (opline->extended_value) { case IS_NULL: ZVAL_NULL(result); break; case _IS_BOOL: ZVAL_BOOL(result, zend_is_true(expr)); break; case IS_LONG: ZVAL_LONG(result, zval_get_long(expr)); break; case IS_DOUBLE: ZVAL_DOUBLE(result, zval_get_double(expr)); break; case IS_STRING: ZVAL_STR(result, zval_get_string(expr)); break; default: if (OP1_TYPE & (IS_VAR|IS_CV)) { ZVAL_DEREF(expr); } /* If value is already of correct type, return it directly */ if (Z_TYPE_P(expr) == opline->extended_value) { ZVAL_COPY_VALUE(result, expr); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (OP1_TYPE != IS_TMP_VAR) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } FREE_OP1_IF_VAR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (opline->extended_value == IS_ARRAY) { if (OP1_TYPE == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) { if (Z_TYPE_P(expr) != IS_NULL) { ZVAL_ARR(result, zend_new_array(1)); expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } else { ZVAL_EMPTY_ARRAY(result); } } else if (Z_OBJ_HT_P(expr)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr); if (obj_ht) { /* fast copy */ obj_ht = zend_proptable_to_symtable(obj_ht, (Z_OBJCE_P(expr)->default_properties_count || Z_OBJ_P(expr)->handlers != &std_object_handlers || GC_IS_RECURSIVE(obj_ht))); ZVAL_ARR(result, obj_ht); } else { ZVAL_EMPTY_ARRAY(result); } } else { ZVAL_COPY_VALUE(result, expr); Z_ADDREF_P(result); convert_to_array(result); } } else { ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def)); if (Z_TYPE_P(expr) == IS_ARRAY) { ht = zend_symtable_to_proptable(Z_ARR_P(expr)); if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) { /* TODO: try not to duplicate immutable arrays as well ??? */ ht = zend_array_dup(ht); } Z_OBJ_P(result)->properties = ht; } else if (Z_TYPE_P(expr) != IS_NULL) { Z_OBJ_P(result)->properties = ht = zend_new_array(1); expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } } } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(73, ZEND_INCLUDE_OR_EVAL, CONST|TMPVAR|CV, ANY, EVAL) { USE_OPLINE zend_op_array *new_op_array; zend_free_op free_op1; zval *inc_filename; SAVE_OPLINE(); inc_filename = GET_OP1_ZVAL_PTR(BP_VAR_R); new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); FREE_OP1(); if (UNEXPECTED(EG(exception) != NULL)) { if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (new_op_array == ZEND_FAKE_OP_ARRAY) { if (RETURN_VALUE_USED(opline)) { ZVAL_TRUE(EX_VAR(opline->result.var)); } } else if (EXPECTED(new_op_array != NULL)) { zval *return_value = NULL; zend_execute_data *call; if (RETURN_VALUE_USED(opline)) { return_value = EX_VAR(opline->result.var); ZVAL_NULL(return_value); } new_op_array->scope = EX(func)->op_array.scope; call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, (zend_function*)new_op_array, 0, Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL, Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL); if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) { call->symbol_table = EX(symbol_table); } else { call->symbol_table = zend_rebuild_symbol_table(); } call->prev_execute_data = execute_data; i_init_code_execute_data(call, new_op_array, return_value); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else if (RETURN_VALUE_USED(opline)) { ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(196, ZEND_UNSET_CV, CV, UNUSED) { USE_OPLINE zval *var = EX_VAR(opline->op1.var); if (Z_REFCOUNTED_P(var)) { zend_refcounted *garbage = Z_COUNTED_P(var); ZVAL_UNDEF(var); SAVE_OPLINE(); if (!GC_DELREF(garbage)) { rc_dtor_func(garbage); } else { gc_check_possible_root(garbage); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_UNDEF(var); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(74, ZEND_UNSET_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; zend_free_op free_op1; SAVE_OPLINE(); varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); zend_hash_del_ind(target_symbol_table, name); if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_HANDLER(179, ZEND_UNSET_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; zend_free_op free_op1; SAVE_OPLINE(); if (OP2_TYPE == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); FREE_UNFETCHED_OP1(); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (OP2_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); FREE_UNFETCHED_OP1(); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(75, ZEND_UNSET_DIM, VAR|CV, CONST|TMPVAR|CV) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_PTR_UNDEF(BP_VAR_UNSET); offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; ZEND_VM_C_LABEL(unset_dim_array): SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); ZEND_VM_C_LABEL(offset_again): if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if (OP2_TYPE != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { ZEND_VM_C_GOTO(num_index_dim); } } ZEND_VM_C_LABEL(str_index_dim): if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); ZEND_VM_C_LABEL(num_index_dim): zend_hash_index_del(ht, hval); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); ZEND_VM_C_GOTO(offset_again); } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); ZEND_VM_C_GOTO(num_index_dim); } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); ZEND_VM_C_GOTO(str_index_dim); } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; ZEND_VM_C_GOTO(num_index_dim); } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; ZEND_VM_C_GOTO(num_index_dim); } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); ZEND_VM_C_GOTO(num_index_dim); } else if (OP2_TYPE == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); ZEND_VM_C_GOTO(str_index_dim); } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_GOTO(unset_dim_array); } } if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (OP2_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if (OP2_TYPE == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); FREE_OP2(); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(76, ZEND_UNSET_OBJ, VAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; zval *offset; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_PTR(BP_VAR_UNSET); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } offset = GET_OP2_ZVAL_PTR(BP_VAR_R); do { if (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); FREE_OP2(); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(77, ZEND_FE_RESET_R, CONST|TMP|VAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *array_ptr, *result; SAVE_OPLINE(); array_ptr = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (OP1_TYPE != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(array_ptr); } Z_FE_POS_P(result) = 0; FREE_OP1_IF_VAR(); ZEND_VM_NEXT_OPCODE(); } else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (OP1_TYPE != IS_TMP_VAR) { Z_ADDREF_P(array_ptr); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); FREE_OP1_IF_VAR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC); FREE_OP1(); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; FREE_OP1(); ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } ZEND_VM_COLD_CONST_HANDLER(125, ZEND_FE_RESET_RW, CONST|TMP|VAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *array_ptr, *array_ref; SAVE_OPLINE(); if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) { array_ref = array_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_R); if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } } else { array_ref = array_ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); } if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ref = EX_VAR(opline->result.var); ZVAL_NEW_REF(array_ref, array_ptr); array_ptr = Z_REFVAL_P(array_ref); } if (OP1_TYPE == IS_CONST) { ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr))); } else { SEPARATE_ARRAY(array_ptr); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0); if (OP1_TYPE == IS_VAR) { FREE_OP1_VAR_PTR(); } ZEND_VM_NEXT_OPCODE(); } else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { if (OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ptr = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(array_ptr, array_ref); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); FREE_OP1_VAR_PTR(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC); if (OP1_TYPE == IS_VAR) { FREE_OP1_VAR_PTR(); } else { FREE_OP1(); } if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; if (OP1_TYPE == IS_VAR) { FREE_OP1_VAR_PTR(); } else { FREE_OP1(); } ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY, JMP_ADDR) { USE_OPLINE zval *array; zval *value; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) { fe_ht = Z_ARRVAL_P(array); pos = Z_FE_POS_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_C_LABEL(fe_fetch_r_exit): ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } Z_FE_POS_P(array) = pos + 1; if (RETURN_VALUE_USED(opline)) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } } else { zend_object_iterator *iter; ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT); if ((iter = zend_iterator_unwrap(array)) == NULL) { /* plain object */ fe_ht = Z_OBJPROP_P(array); pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_C_GOTO(fe_fetch_r_exit); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF) && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) { break; } } else { break; } } pos++; p++; } if (RETURN_VALUE_USED(opline)) { if (UNEXPECTED(!p->key)) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else if (ZSTR_VAL(p->key)[0]) { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } else { const char *class_name, *prop_name; size_t prop_name_len; zend_unmangle_property_name_ex( p->key, &class_name, &prop_name, &prop_name_len); ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len); } } EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1; } else { if (EXPECTED(++iter->index > 0)) { /* This could cause an endless loop if index becomes zero again. * In case that ever happens we need an additional flag. */ iter->funcs->move_forward(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) { /* reached end of iteration */ if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } ZEND_VM_C_GOTO(fe_fetch_r_exit); } } value = iter->funcs->get_current_data(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!value) { /* failure in get_current_data */ ZEND_VM_C_GOTO(fe_fetch_r_exit); } if (RETURN_VALUE_USED(opline)) { if (iter->funcs->get_current_key) { iter->funcs->get_current_key(iter, EX_VAR(opline->result.var)); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else { ZVAL_LONG(EX_VAR(opline->result.var), iter->index); } } value_type = Z_TYPE_INFO_P(value); } } if (EXPECTED(OP2_TYPE == IS_CV)) { zval *variable_ptr = EX_VAR(opline->op2.var); zend_assign_to_variable(variable_ptr, value, IS_CV); } else { zval *res = EX_VAR(opline->op2.var); zend_refcounted *gc = Z_COUNTED_P(value); ZVAL_COPY_VALUE_EX(res, value, gc, value_type); if (Z_TYPE_INFO_REFCOUNTED(value_type)) { GC_ADDREF(gc); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY, JMP_ADDR) { USE_OPLINE zval *array; zval *value; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); ZVAL_DEREF(array); if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) { pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array); fe_ht = Z_ARRVAL_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_C_GOTO(fe_fetch_w_exit); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } if (RETURN_VALUE_USED(opline)) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1; } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) { zend_object_iterator *iter; if ((iter = zend_iterator_unwrap(array)) == NULL) { /* plain object */ fe_ht = Z_OBJPROP_P(array); pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_C_GOTO(fe_fetch_w_exit); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF) && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) { break; } } else { break; } } pos++; p++; } if (RETURN_VALUE_USED(opline)) { if (UNEXPECTED(!p->key)) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else if (ZSTR_VAL(p->key)[0]) { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } else { const char *class_name, *prop_name; size_t prop_name_len; zend_unmangle_property_name_ex( p->key, &class_name, &prop_name, &prop_name_len); ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len); } } EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1; } else { if (++iter->index > 0) { /* This could cause an endless loop if index becomes zero again. * In case that ever happens we need an additional flag. */ iter->funcs->move_forward(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) { /* reached end of iteration */ if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } ZEND_VM_C_GOTO(fe_fetch_w_exit); } } value = iter->funcs->get_current_data(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!value) { /* failure in get_current_data */ ZEND_VM_C_GOTO(fe_fetch_w_exit); } if (RETURN_VALUE_USED(opline)) { if (iter->funcs->get_current_key) { iter->funcs->get_current_key(iter, EX_VAR(opline->result.var)); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else { ZVAL_LONG(EX_VAR(opline->result.var), iter->index); } } value_type = Z_TYPE_INFO_P(value); } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); if (UNEXPECTED(EG(exception))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } ZEND_VM_C_LABEL(fe_fetch_w_exit): ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) { zend_refcounted *gc = Z_COUNTED_P(value); zval *ref; ZVAL_NEW_EMPTY_REF(value); ref = Z_REFVAL_P(value); ZVAL_COPY_VALUE_EX(ref, value, gc, value_type); } if (EXPECTED(OP2_TYPE == IS_CV)) { zval *variable_ptr = EX_VAR(opline->op2.var); if (EXPECTED(variable_ptr != value)) { zend_reference *ref; ref = Z_REF_P(value); GC_ADDREF(ref); zval_ptr_dtor(variable_ptr); ZVAL_REF(variable_ptr, ref); } } else { Z_ADDREF_P(value); ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value)); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HANDLER(197, ZEND_ISSET_ISEMPTY_CV, CV, UNUSED, ISSET, SPEC(ISSET)) { USE_OPLINE zval *value; int result; value = EX_VAR(opline->op1.var); if (!(opline->extended_value & ZEND_ISEMPTY)) { result = Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { SAVE_OPLINE(); result = !i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(114, ZEND_ISSET_ISEMPTY_VAR, CONST|TMPVAR|CV, UNUSED, VAR_FETCH|ISSET) { USE_OPLINE zval *value; int result; zend_free_op free_op1; zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = GET_OP1_ZVAL_PTR(BP_VAR_IS); if (OP1_TYPE == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); value = zend_hash_find_ex(target_symbol_table, name, OP1_TYPE == IS_CONST); if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } FREE_OP1(); if (!value) { result = (opline->extended_value & ZEND_ISEMPTY); } else { if (Z_TYPE_P(value) == IS_INDIRECT) { value = Z_INDIRECT_P(value); } if (!(opline->extended_value & ZEND_ISEMPTY)) { if (Z_ISREF_P(value)) { value = Z_REFVAL_P(value); } result = Z_TYPE_P(value) > IS_NULL; } else { result = !i_zend_is_true(value); } } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(180, ZEND_ISSET_ISEMPTY_STATIC_PROP, CONST|TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, ISSET|CACHE_SLOT) { USE_OPLINE zval *value; int result; zend_free_op free_op1; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (OP2_TYPE == IS_CONST) { if (OP1_TYPE == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); ZEND_VM_C_GOTO(is_static_prop_return); } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (OP1_TYPE != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (OP2_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); FREE_UNFETCHED_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (OP1_TYPE == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); ZEND_VM_C_GOTO(is_static_prop_return); } } varname = GET_OP1_ZVAL_PTR(BP_VAR_IS); if (OP1_TYPE == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (OP1_TYPE == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (OP1_TYPE != IS_CONST) { zend_tmp_string_release(tmp_name); } FREE_OP1(); ZEND_VM_C_LABEL(is_static_prop_return): if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONSTCONST_HANDLER(115, ZEND_ISSET_ISEMPTY_DIM_OBJ, CONST|TMPVAR|CV, CONST|TMPVAR|CV, ISSET) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR_UNDEF(BP_VAR_IS); offset = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; ZEND_VM_C_LABEL(isset_dim_obj_array): ht = Z_ARRVAL_P(container); ZEND_VM_C_LABEL(isset_again): if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (OP2_TYPE != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { ZEND_VM_C_GOTO(num_index_prop); } } value = zend_hash_find_ex_ind(ht, str, OP2_TYPE == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); ZEND_VM_C_LABEL(num_index_prop): value = zend_hash_index_find(ht, hval); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); ZEND_VM_C_GOTO(isset_again); } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; ZEND_VM_C_GOTO(isset_dim_obj_exit); } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } ZEND_VM_C_GOTO(isset_dim_obj_exit); } else if ((OP1_TYPE & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_GOTO(isset_dim_obj_array); } } if (OP2_TYPE == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } ZEND_VM_C_LABEL(isset_dim_obj_exit): FREE_OP2(); FREE_OP1(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(148, ZEND_ISSET_ISEMPTY_PROP_OBJ, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR|CV, ISSET|CACHE_SLOT) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; int result; zval *offset; SAVE_OPLINE(); container = GET_OP1_OBJ_ZVAL_PTR(BP_VAR_IS); if (OP1_TYPE == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } offset = GET_OP2_ZVAL_PTR(BP_VAR_R); if (OP1_TYPE == IS_CONST || (OP1_TYPE != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { ZEND_VM_C_GOTO(isset_no_object); } } else { ZEND_VM_C_GOTO(isset_no_object); } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); ZEND_VM_C_LABEL(isset_no_object): result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((OP2_TYPE == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } FREE_OP2(); FREE_OP1(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_HANDLER(79, ZEND_EXIT, CONST|TMPVAR|UNUSED|CV, ANY) { USE_OPLINE SAVE_OPLINE(); if (OP1_TYPE != IS_UNUSED) { zend_free_op free_op1; zval *ptr = GET_OP1_ZVAL_PTR(BP_VAR_R); do { if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) { ptr = Z_REFVAL_P(ptr); if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); break; } } zend_print_zval(ptr, 0); } } while (0); FREE_OP1(); } zend_bailout(); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } ZEND_VM_HANDLER(57, ZEND_BEGIN_SILENCE, ANY, ANY) { USE_OPLINE ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting)); if (EG(error_reporting)) { do { EG(error_reporting) = 0; if (!EG(error_reporting_ini_entry)) { zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1); if (zv) { EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv); } else { break; } } if (!EG(error_reporting_ini_entry)->modified) { if (!EG(modified_ini_directives)) { ALLOC_HASHTABLE(EG(modified_ini_directives)); zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); } if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) { EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value; EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable; EG(error_reporting_ini_entry)->modified = 1; } } } while (0); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(58, ZEND_END_SILENCE, TMP, ANY) { USE_OPLINE if (!EG(error_reporting) && Z_LVAL_P(EX_VAR(opline->op1.var)) != 0) { EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var)); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_CONST_HANDLER(152, ZEND_JMP_SET, CONST|TMP|VAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *value; zval *ref = NULL; int ret; SAVE_OPLINE(); value = GET_OP1_ZVAL_PTR(BP_VAR_R); if ((OP1_TYPE == IS_VAR || OP1_TYPE == IS_CV) && Z_ISREF_P(value)) { if (OP1_TYPE == IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } ret = i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { FREE_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (ret) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (OP1_TYPE == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if (OP1_TYPE == IS_VAR && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } FREE_OP1(); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_CONST_HANDLER(169, ZEND_COALESCE, CONST|TMPVAR|CV, JMP_ADDR) { USE_OPLINE zend_free_op free_op1; zval *value; zval *ref = NULL; SAVE_OPLINE(); value = GET_OP1_ZVAL_PTR(BP_VAR_IS); if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { if (OP1_TYPE & IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } if (Z_TYPE_P(value) > IS_NULL) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (OP1_TYPE == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if ((OP1_TYPE & IS_VAR) && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } FREE_OP1(); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(22, ZEND_QM_ASSIGN, CONST|TMP|VAR|CV, ANY) { USE_OPLINE zend_free_op free_op1; zval *value; zval *result = EX_VAR(opline->result.var); value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZVAL_NULL(result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (OP1_TYPE == IS_CV) { ZVAL_COPY_DEREF(result, value); } else if (OP1_TYPE == IS_VAR) { if (UNEXPECTED(Z_ISREF_P(value))) { ZVAL_COPY_VALUE(result, Z_REFVAL_P(value)); if (UNEXPECTED(Z_DELREF_P(value) == 0)) { efree_size(Z_REF_P(value), sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } else { ZVAL_COPY_VALUE(result, value); } } else { ZVAL_COPY_VALUE(result, value); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) { Z_ADDREF_P(result); } } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_HANDLER(101, ZEND_EXT_STMT, ANY, ANY) { USE_OPLINE if (!EG(no_extensions)) { SAVE_OPLINE(); zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_HANDLER(102, ZEND_EXT_FCALL_BEGIN, ANY, ANY) { USE_OPLINE if (!EG(no_extensions)) { SAVE_OPLINE(); zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_HANDLER(103, ZEND_EXT_FCALL_END, ANY, ANY) { USE_OPLINE if (!EG(no_extensions)) { SAVE_OPLINE(); zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(139, ZEND_DECLARE_CLASS, CONST, ANY) { USE_OPLINE SAVE_OPLINE(); Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(140, ZEND_DECLARE_INHERITED_CLASS, CONST, CONST) { zend_class_entry *parent; USE_OPLINE SAVE_OPLINE(); parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(parent == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), parent, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(145, ZEND_DECLARE_INHERITED_CLASS_DELAYED, CONST, CONST) { USE_OPLINE zval *zce, *orig_zce; zend_class_entry *parent; SAVE_OPLINE(); if ((zce = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1)) == NULL || ((orig_zce = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)+1), 1)) != NULL && Z_CE_P(zce) != Z_CE_P(orig_zce))) { parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(parent == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), parent, 0); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(171, ZEND_DECLARE_ANON_CLASS, ANY, ANY, JMP_ADDR) { zval *zv; zend_class_entry *ce; USE_OPLINE SAVE_OPLINE(); zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1); ZEND_ASSERT(zv != NULL); ce = Z_CE_P(zv); Z_CE_P(EX_VAR(opline->result.var)) = ce; if (ce->ce_flags & ZEND_ACC_ANON_BOUND) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { zend_verify_abstract_class(ce); } ce->ce_flags |= ZEND_ACC_ANON_BOUND; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(172, ZEND_DECLARE_ANON_INHERITED_CLASS, CONST, CONST, JMP_ADDR) { zval *zv; zend_class_entry *ce, *parent; USE_OPLINE SAVE_OPLINE(); zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1); ZEND_ASSERT(zv != NULL); ce = Z_CE_P(zv); Z_CE_P(EX_VAR(opline->result.var)) = ce; if (ce->ce_flags & ZEND_ACC_ANON_BOUND) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(parent == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } zend_do_inheritance(ce, parent); ce->ce_flags |= ZEND_ACC_ANON_BOUND; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(141, ZEND_DECLARE_FUNCTION, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(105, ZEND_TICKS, ANY, ANY, NUM) { USE_OPLINE if ((uint32_t)++EG(ticks_count) >= opline->extended_value) { EG(ticks_count) = 0; if (zend_ticks_function) { SAVE_OPLINE(); zend_ticks_function(opline->extended_value); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(138, ZEND_INSTANCEOF, TMPVAR|CV, UNUSED|CLASS_FETCH|CONST|VAR, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1; zval *expr; zend_bool result; SAVE_OPLINE(); expr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); ZEND_VM_C_LABEL(try_instanceof): if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (OP2_TYPE == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (OP2_TYPE == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); FREE_OP1(); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); ZEND_VM_C_GOTO(try_instanceof); } else { if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } FREE_OP1(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_HANDLER(104, ZEND_EXT_NOP, ANY, ANY) { USE_OPLINE ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_HANDLER(0, ZEND_NOP, ANY, ANY) { USE_OPLINE ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(144, ZEND_ADD_INTERFACE, ANY, CONST, CACHE_SLOT) { USE_OPLINE zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var)); zend_class_entry *iface; SAVE_OPLINE(); iface = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE); if (UNEXPECTED(iface == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (UNEXPECTED((iface->ce_flags & ZEND_ACC_INTERFACE) == 0)) { zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ZSTR_VAL(ce->name), ZSTR_VAL(iface->name)); } zend_do_implement_interface(ce, iface); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(154, ZEND_ADD_TRAIT, ANY, ANY, CACHE_SLOT) { USE_OPLINE zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var)); zend_class_entry *trait; SAVE_OPLINE(); trait = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_TRAIT); if (UNEXPECTED(trait == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (!(trait->ce_flags & ZEND_ACC_TRAIT)) { zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name)); } zend_do_implement_trait(ce, trait); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(155, ZEND_BIND_TRAITS, ANY, ANY) { USE_OPLINE zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var)); SAVE_OPLINE(); zend_do_bind_traits(ce); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HELPER(zend_dispatch_try_catch_finally_helper, ANY, ANY, uint32_t try_catch_offset, uint32_t op_num) { /* May be NULL during generator closing (only finally blocks are executed) */ zend_object *ex = EG(exception); /* Walk try/catch/finally structures upwards, performing the necessary actions */ while (try_catch_offset != (uint32_t) -1) { zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[try_catch_offset]; if (op_num < try_catch->catch_op && ex) { /* Go to catch block */ cleanup_live_vars(execute_data, op_num, try_catch->catch_op); ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0); } else if (op_num < try_catch->finally_op) { /* Go to finally block */ zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var); cleanup_live_vars(execute_data, op_num, try_catch->finally_op); Z_OBJ_P(fast_call) = EG(exception); EG(exception) = NULL; Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1; ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0); } else if (op_num < try_catch->finally_end) { zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var); /* cleanup incomplete RETURN statement */ if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) { zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var); zval_ptr_dtor(return_value); } /* Chain potential exception from wrapping finally block */ if (Z_OBJ_P(fast_call)) { if (ex) { zend_exception_set_previous(ex, Z_OBJ_P(fast_call)); } else { EG(exception) = Z_OBJ_P(fast_call); } ex = Z_OBJ_P(fast_call); } } try_catch_offset--; } /* Uncaught exception */ cleanup_live_vars(execute_data, op_num, 0); if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator_close(generator, 1); ZEND_VM_RETURN(); } else { ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } } ZEND_VM_HANDLER(149, ZEND_HANDLE_EXCEPTION, ANY, ANY) { const zend_op *throw_op = EG(opline_before_exception); uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes; int i, current_try_catch_offset = -1; if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE) && throw_op->extended_value & ZEND_FREE_ON_RETURN) { /* exceptions thrown because of loop var destruction on return/break/... * are logically thrown at the end of the foreach loop, so adjust the * throw_op_num. */ const zend_live_range *range = find_live_range( &EX(func)->op_array, throw_op_num, throw_op->op1.var); throw_op_num = range->end; } /* Find the innermost try/catch/finally the exception was thrown in */ for (i = 0; i < EX(func)->op_array.last_try_catch; i++) { zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i]; if (try_catch->try_op > throw_op_num) { /* further blocks will not be relevant... */ break; } if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) { current_try_catch_offset = i; } } cleanup_unfinished_calls(execute_data, throw_op_num); if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) { switch (throw_op->opcode) { case ZEND_ADD_ARRAY_ELEMENT: case ZEND_ROPE_INIT: case ZEND_ROPE_ADD: break; /* exception while building structures, live range handling will free those */ case ZEND_FETCH_CLASS: case ZEND_DECLARE_CLASS: case ZEND_DECLARE_INHERITED_CLASS: case ZEND_DECLARE_ANON_CLASS: case ZEND_DECLARE_ANON_INHERITED_CLASS: break; /* return value is zend_class_entry pointer */ default: zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var)); } } ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, throw_op_num); } ZEND_VM_HANDLER(146, ZEND_VERIFY_ABSTRACT_CLASS, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var))); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(150, ZEND_USER_OPCODE, ANY, ANY) { USE_OPLINE int ret; SAVE_OPLINE(); ret = zend_user_opcode_handlers[opline->opcode](execute_data); opline = EX(opline); switch (ret) { case ZEND_USER_OPCODE_CONTINUE: ZEND_VM_CONTINUE(); case ZEND_USER_OPCODE_RETURN: if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator_close(generator, 1); ZEND_VM_RETURN(); } else { ZEND_VM_DISPATCH_TO_HELPER(zend_leave_helper); } case ZEND_USER_OPCODE_ENTER: ZEND_VM_ENTER(); case ZEND_USER_OPCODE_LEAVE: ZEND_VM_LEAVE(); case ZEND_USER_OPCODE_DISPATCH: ZEND_VM_DISPATCH(opline->opcode, opline); default: ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline); } } ZEND_VM_HANDLER(143, ZEND_DECLARE_CONST, CONST, CONST) { USE_OPLINE zend_free_op free_op1, free_op2; zval *name; zval *val; zend_constant c; SAVE_OPLINE(); name = GET_OP1_ZVAL_PTR(BP_VAR_R); val = GET_OP2_ZVAL_PTR(BP_VAR_R); ZVAL_COPY(&c.value, val); if (Z_OPT_CONSTANT(c.value)) { if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) { zval_ptr_dtor_nogc(&c.value); FREE_OP1(); FREE_OP2(); HANDLE_EXCEPTION(); } } /* non persistent, case sensitive */ ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT); c.name = zend_string_copy(Z_STR_P(name)); if (zend_register_constant(&c) == FAILURE) { } FREE_OP1(); FREE_OP2(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) { USE_OPLINE zval *zfunc; zval *object; zend_class_entry *called_scope; zend_function *fbc; zfunc = zend_hash_find_ex(EG(function_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1); ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION); if (Z_TYPE(EX(This)) == IS_OBJECT) { called_scope = Z_OBJCE(EX(This)); if (UNEXPECTED((Z_FUNC_P(zfunc)->common.fn_flags & ZEND_ACC_STATIC) || (EX(func)->common.fn_flags & ZEND_ACC_STATIC))) { object = NULL; } else { object = &EX(This); } } else { called_scope = Z_CE(EX(This)); object = NULL; } zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EX(func)->op_array.scope, called_scope, object); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(156, ZEND_SEPARATE, VAR, UNUSED) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (UNEXPECTED(Z_ISREF_P(var_ptr))) { if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) { ZVAL_UNREF(var_ptr); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_HELPER(zend_yield_in_closed_generator_helper, ANY, ANY) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator"); FREE_UNFETCHED_OP2(); FREE_UNFETCHED_OP1(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } ZEND_VM_HANDLER(160, ZEND_YIELD, CONST|TMP|VAR|CV|UNUSED, CONST|TMP|VAR|CV|UNUSED, SRC) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_DISPATCH_TO_HELPER(zend_yield_in_closed_generator_helper); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (OP1_TYPE != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (OP1_TYPE & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = GET_OP1_ZVAL_PTR(BP_VAR_R); ZVAL_COPY_VALUE(&generator->value, value); if (OP1_TYPE == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = GET_OP1_ZVAL_PTR_PTR(BP_VAR_W); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (OP1_TYPE == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } FREE_OP1_VAR_PTR(); } } else { zval *value = GET_OP1_ZVAL_PTR(BP_VAR_R); /* Consts, temporary variables and references need copying */ if (OP1_TYPE == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (OP1_TYPE == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); FREE_OP1_IF_VAR(); } else { ZVAL_COPY_VALUE(&generator->value, value); if (OP1_TYPE == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (OP2_TYPE != IS_UNUSED) { zend_free_op free_op2; zval *key = GET_OP2_ZVAL_PTR(BP_VAR_R); /* Consts, temporary variables and references need copying */ if (OP2_TYPE == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (OP2_TYPE == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((OP2_TYPE & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); FREE_OP2_IF_VAR(); } else { ZVAL_COPY_VALUE(&generator->key, key); if (OP2_TYPE == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } ZEND_VM_HANDLER(142, ZEND_YIELD_FROM, CONST|TMP|VAR|CV, ANY) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zval *val; zend_free_op free_op1; SAVE_OPLINE(); val = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator"); FREE_OP1(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (Z_TYPE_P(val) == IS_ARRAY) { ZVAL_COPY_VALUE(&generator->values, val); if (OP1_TYPE != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) { Z_ADDREF_P(val); } Z_FE_POS(generator->values) = 0; FREE_OP1_IF_VAR(); } else if (OP1_TYPE != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) { zend_class_entry *ce = Z_OBJCE_P(val); if (ce == zend_ce_generator) { zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val); if (OP1_TYPE != IS_TMP_VAR) { Z_ADDREF_P(val); } FREE_OP1_IF_VAR(); if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval); } ZEND_VM_NEXT_OPCODE(); } } else { zend_object_iterator *iter = ce->get_iterator(ce, val, 0); FREE_OP1(); if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) { if (!EG(exception)) { zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } iter->index = 0; if (iter->funcs->rewind) { iter->funcs->rewind(iter); if (UNEXPECTED(EG(exception) != NULL)) { OBJ_RELEASE(&iter->std); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } ZVAL_OBJ(&generator->values, &iter->std); } } else { zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables"); FREE_OP1(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* This is the default return value * when the expression is a Generator, it will be overwritten in zend_generator_resume() */ if (RETURN_VALUE_USED(opline)) { ZVAL_NULL(EX_VAR(opline->result.var)); } /* This generator has no send target (though the generator we delegate to might have one) */ generator->send_target = NULL; /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } ZEND_VM_HANDLER(159, ZEND_DISCARD_EXCEPTION, ANY, ANY) { USE_OPLINE zval *fast_call = EX_VAR(opline->op1.var); SAVE_OPLINE(); /* cleanup incomplete RETURN statement */ if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) { zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var); zval_ptr_dtor(return_value); } /* cleanup delayed exception */ if (Z_OBJ_P(fast_call) != NULL) { /* discard the previously thrown exception */ OBJ_RELEASE(Z_OBJ_P(fast_call)); Z_OBJ_P(fast_call) = NULL; } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(162, ZEND_FAST_CALL, JMP_ADDR, ANY) { USE_OPLINE zval *fast_call = EX_VAR(opline->result.var); Z_OBJ_P(fast_call) = NULL; /* set return address */ Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes; ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0); } ZEND_VM_HANDLER(163, ZEND_FAST_RET, ANY, TRY_CATCH) { USE_OPLINE zval *fast_call = EX_VAR(opline->op1.var); uint32_t current_try_catch_offset, current_op_num; if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) { const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call); ZEND_VM_JMP_EX(fast_ret + 1, 0); } /* special case for unhandled exceptions */ EG(exception) = Z_OBJ_P(fast_call); Z_OBJ_P(fast_call) = NULL; current_try_catch_offset = opline->op2.num; current_op_num = opline - EX(func)->op_array.opcodes; ZEND_VM_DISPATCH_TO_HELPER(zend_dispatch_try_catch_finally_helper, try_catch_offset, current_try_catch_offset, op_num, current_op_num); } ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST, CACHE_SLOT) { USE_OPLINE zend_free_op free_op1, free_op2; zval *varname; zval *value; zval *variable_ptr; uintptr_t idx; zend_reference *ref; ZEND_VM_REPEATABLE_OPCODE varname = GET_OP2_ZVAL_PTR(BP_VAR_R); /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */ idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1; if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(varname)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) { value = (zval*)p; /* value = &p->val; */ ZEND_VM_C_GOTO(check_indirect); } } value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1); if (UNEXPECTED(value == NULL)) { value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval)); idx = (char*)value - (char*)EG(symbol_table).arData; /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */ CACHE_PTR(opline->extended_value, (void*)(idx + 1)); } else { idx = (char*)value - (char*)EG(symbol_table).arData; /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */ CACHE_PTR(opline->extended_value, (void*)(idx + 1)); ZEND_VM_C_LABEL(check_indirect): /* GLOBAL variable may be an INDIRECT pointer to CV */ if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { value = Z_INDIRECT_P(value); if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { ZVAL_NULL(value); } } } if (UNEXPECTED(!Z_ISREF_P(value))) { ZVAL_MAKE_REF_EX(value, 2); ref = Z_REF_P(value); } else { ref = Z_REF_P(value); GC_ADDREF(ref); } variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { zend_refcounted *ref = Z_COUNTED_P(variable_ptr); uint32_t refcnt = GC_DELREF(ref); if (EXPECTED(variable_ptr != value)) { if (refcnt == 0) { SAVE_OPLINE(); rc_dtor_func(ref); if (UNEXPECTED(EG(exception))) { ZVAL_NULL(variable_ptr); HANDLE_EXCEPTION(); } } else { gc_check_possible_root(ref); } } } ZVAL_REF(variable_ptr, ref); ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_CONST_HANDLER(121, ZEND_STRLEN, CONST|TMPVAR|CV, ANY) { USE_OPLINE zval *value; zend_free_op free_op1; value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); FREE_OP1(); ZEND_VM_NEXT_OPCODE(); } else { zend_bool strict; if ((OP1_TYPE & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); FREE_OP1(); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { value = GET_OP1_UNDEF_CV(value, BP_VAR_R); } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { zend_string *str; zval tmp; ZVAL_COPY(&tmp, value); if (zend_parse_arg_str_weak(&tmp, &str)) { ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str)); zval_ptr_dtor(&tmp); break; } zval_ptr_dtor(&tmp); } zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value))); ZVAL_NULL(EX_VAR(opline->result.var)); } while (0); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_NOCONST_HANDLER(123, ZEND_TYPE_CHECK, CONST|TMPVAR|CV, ANY, TYPE_MASK) { USE_OPLINE zval *value; int result = 0; zend_free_op free_op1; value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { ZEND_VM_C_LABEL(type_check_resource): if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE) || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) { result = 1; } } else if ((OP1_TYPE & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { ZEND_VM_C_GOTO(type_check_resource); } } else if (OP1_TYPE == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { result = ((1 << IS_NULL) & opline->extended_value) != 0; SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); FREE_OP1(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } } ZEND_VM_HOT_HANDLER(122, ZEND_DEFINED, CONST, ANY, CACHE_SLOT) { USE_OPLINE zend_constant *c; int result; c = CACHED_PTR(opline->extended_value); do { if (EXPECTED(c != NULL)) { if (!IS_SPECIAL_CACHE_VAL(c)) { result = 1; break; } else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) { result = 0; break; } } if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) { CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants)))); result = 0; } else { result = 1; } } while (0); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(151, ZEND_ASSERT_CHECK, ANY, JMP_ADDR) { USE_OPLINE if (EG(assertions) <= 0) { zend_op *target = OP_JMP_ADDR(opline, opline->op2); if (RETURN_VALUE_USED(opline)) { ZVAL_TRUE(EX_VAR(opline->result.var)); } ZEND_VM_JMP_EX(target, 0); } else { ZEND_VM_NEXT_OPCODE(); } } ZEND_VM_HANDLER(157, ZEND_FETCH_CLASS_NAME, UNUSED|CLASS_FETCH, ANY) { uint32_t fetch_type; zend_class_entry *called_scope, *scope; USE_OPLINE fetch_type = opline->op1.num; scope = EX(func)->op_array.scope; if (UNEXPECTED(scope == NULL)) { SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active", fetch_type == ZEND_FETCH_CLASS_SELF ? "self" : fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static"); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } switch (fetch_type) { case ZEND_FETCH_CLASS_SELF: ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name); break; case ZEND_FETCH_CLASS_PARENT: if (UNEXPECTED(scope->parent == NULL)) { SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use \"parent\" when current class scope has no parent"); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name); break; case ZEND_FETCH_CLASS_STATIC: if (Z_TYPE(EX(This)) == IS_OBJECT) { called_scope = Z_OBJCE(EX(This)); } else { called_scope = Z_CE(EX(This)); } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; EMPTY_SWITCH_DEFAULT_CASE() } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(158, ZEND_CALL_TRAMPOLINE, ANY, ANY) { zend_array *args; zend_function *fbc = EX(func); zval *ret = EX(return_value); uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS); uint32_t num_args = EX_NUM_ARGS(); zend_execute_data *call; SAVE_OPLINE(); if (num_args) { zval *p = ZEND_CALL_ARG(execute_data, 1); zval *end = p + num_args; args = zend_new_array(num_args); zend_hash_real_init_packed(args); ZEND_HASH_FILL_PACKED(args) { do { ZEND_HASH_FILL_ADD(p); p++; } while (p != end); } ZEND_HASH_FILL_END(); } call = execute_data; execute_data = EG(current_execute_data) = EX(prev_execute_data); call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call; ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call)); ZEND_CALL_NUM_ARGS(call) = 2; ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name); if (num_args) { ZVAL_ARR(ZEND_CALL_ARG(call, 2), args); } else { ZVAL_EMPTY_ARRAY(ZEND_CALL_ARG(call, 2)); } zend_free_trampoline(fbc); fbc = call->func; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { if (UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { zend_vm_stack_free_call_frame(call); if (ret) { ZVAL_UNDEF(ret); } ZEND_VM_C_GOTO(call_trampoline_end); } if (ret == NULL) { ZVAL_NULL(&retval); ret = &retval; } if (!zend_execute_internal) { /* saves one function call if zend_execute_internal is not used */ fbc->internal_function.handler(call, ret); } else { zend_execute_internal(call, ret); } #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = call->prev_execute_data; zend_vm_stack_free_args(call); if (ret == &retval) { zval_ptr_dtor(ret); } } ZEND_VM_C_LABEL(call_trampoline_end): execute_data = EG(current_execute_data); if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) { ZEND_VM_RETURN(); } if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(call->This); OBJ_RELEASE(object); } zend_vm_stack_free_call_frame(call); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_OPLINE(); ZEND_VM_INC_OPCODE(); ZEND_VM_LEAVE(); } ZEND_VM_HANDLER(182, ZEND_BIND_LEXICAL, TMP, CV, REF) { USE_OPLINE zend_free_op free_op1, free_op2; zval *closure, *var; closure = GET_OP1_ZVAL_PTR(BP_VAR_R); if (opline->extended_value & ZEND_BIND_REF) { /* By-ref binding */ var = GET_OP2_ZVAL_PTR(BP_VAR_W); if (Z_ISREF_P(var)) { Z_ADDREF_P(var); } else { ZVAL_MAKE_REF_EX(var, 2); } } else { var = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (UNEXPECTED(Z_ISUNDEF_P(var))) { SAVE_OPLINE(); var = GET_OP2_UNDEF_CV(var, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZVAL_DEREF(var); Z_TRY_ADDREF_P(var); } zend_closure_bind_var_ex(closure, (opline->extended_value & ~ZEND_BIND_REF), var); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(183, ZEND_BIND_STATIC, CV, CONST, REF) { USE_OPLINE zend_free_op free_op1; HashTable *ht; zval *value; zval *variable_ptr; variable_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_W); zval_ptr_dtor(variable_ptr); ht = EX(func)->op_array.static_variables; ZEND_ASSERT(ht != NULL); if (GC_REFCOUNT(ht) > 1) { if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { GC_DELREF(ht); } EX(func)->op_array.static_variables = ht = zend_array_dup(ht); } value = (zval*)((char*)ht->arData + (opline->extended_value & ~ZEND_BIND_REF)); if (opline->extended_value & ZEND_BIND_REF) { if (Z_TYPE_P(value) == IS_CONSTANT_AST) { SAVE_OPLINE(); if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) { ZVAL_NULL(variable_ptr); HANDLE_EXCEPTION(); } } if (UNEXPECTED(!Z_ISREF_P(value))) { zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference)); GC_SET_REFCOUNT(ref, 2); GC_TYPE_INFO(ref) = IS_REFERENCE; ZVAL_COPY_VALUE(&ref->val, value); Z_REF_P(value) = ref; Z_TYPE_INFO_P(value) = IS_REFERENCE_EX; ZVAL_REF(variable_ptr, ref); } else { Z_ADDREF_P(value); ZVAL_REF(variable_ptr, Z_REF_P(value)); } } else { ZVAL_COPY(variable_ptr, value); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(184, ZEND_FETCH_THIS, UNUSED, UNUSED) { USE_OPLINE if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { zval *result = EX_VAR(opline->result.var); ZVAL_OBJ(result, Z_OBJ(EX(This))); Z_ADDREF_P(result); ZEND_VM_NEXT_OPCODE(); } else { ZEND_VM_DISPATCH_TO_HELPER(zend_this_not_in_object_context_helper); } } ZEND_VM_HANDLER(186, ZEND_ISSET_ISEMPTY_THIS, UNUSED, UNUSED) { USE_OPLINE ZVAL_BOOL(EX_VAR(opline->result.var), (opline->extended_value & ZEND_ISEMPTY) ^ (Z_TYPE(EX(This)) == IS_OBJECT)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(49, ZEND_CHECK_VAR, CV, UNUSED) { USE_OPLINE zval *op1 = EX_VAR(opline->op1.var); if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(op1, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(51, ZEND_MAKE_REF, VAR|CV, UNUSED) { USE_OPLINE zval *op1 = EX_VAR(opline->op1.var); if (OP1_TYPE == IS_CV) { if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { ZVAL_NEW_EMPTY_REF(op1); Z_SET_REFCOUNT_P(op1, 2); ZVAL_NULL(Z_REFVAL_P(op1)); ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } else { if (Z_ISREF_P(op1)) { Z_ADDREF_P(op1); } else { ZVAL_MAKE_REF_EX(op1, 2); } ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) { op1 = Z_INDIRECT_P(op1); if (EXPECTED(!Z_ISREF_P(op1))) { ZVAL_MAKE_REF_EX(op1, 2); } else { GC_ADDREF(Z_REF_P(op1)); } ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } else { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_CONSTCONST_HANDLER(187, ZEND_SWITCH_LONG, CONST|TMPVARCV, CONST, JMP_ADDR) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op, *jump_zv; HashTable *jumptable; op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R)); if (Z_TYPE_P(op) != IS_LONG) { ZVAL_DEREF(op); if (Z_TYPE_P(op) != IS_LONG) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } } jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op)); if (jump_zv != NULL) { ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv)); ZEND_VM_CONTINUE(); } else { /* default */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } } ZEND_VM_COLD_CONSTCONST_HANDLER(188, ZEND_SWITCH_STRING, CONST|TMPVARCV, CONST, JMP_ADDR) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op, *jump_zv; HashTable *jumptable; op = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); jumptable = Z_ARRVAL_P(GET_OP2_ZVAL_PTR(BP_VAR_R)); if (Z_TYPE_P(op) != IS_STRING) { if (OP1_TYPE == IS_CONST) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } else { ZVAL_DEREF(op); if (Z_TYPE_P(op) != IS_STRING) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } } } jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), OP1_TYPE == IS_CONST); if (jump_zv != NULL) { ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv)); ZEND_VM_CONTINUE(); } else { /* default */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } } ZEND_VM_COLD_CONSTCONST_HANDLER(189, ZEND_IN_ARRAY, CONST|TMP|VAR|CV, CONST, NUM) { USE_OPLINE zend_free_op free_op1; zval *op1; HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); int result; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { result = zend_hash_exists(ht, Z_STR_P(op1)); } else if (opline->extended_value) { if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { result = zend_hash_index_exists(ht, Z_LVAL_P(op1)); } else { result = 0; } } else if (Z_TYPE_P(op1) <= IS_FALSE) { result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC()); } else { zend_string *key; zval key_tmp, result_tmp; result = 0; ZEND_HASH_FOREACH_STR_KEY(ht, key) { ZVAL_STR(&key_tmp, key); compare_function(&result_tmp, op1, &key_tmp); if (Z_LVAL(result_tmp) == 0) { result = 1; break; } } ZEND_HASH_FOREACH_END(); } FREE_OP1(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(190, ZEND_COUNT, CONST|TMP|VAR|CV, UNUSED) { USE_OPLINE zend_free_op free_op1; zval *op1; zend_long count; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); do { if (Z_TYPE_P(op1) == IS_ARRAY) { count = zend_array_count(Z_ARRVAL_P(op1)); break; } else if (Z_TYPE_P(op1) == IS_OBJECT) { /* first, we check if the handler is defined */ if (Z_OBJ_HT_P(op1)->count_elements) { if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) { break; } } /* if not and the object implements Countable we call its count() method */ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) { zval retval; zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval); count = zval_get_long(&retval); zval_ptr_dtor(&retval); break; } /* If There's no handler and it doesn't implement Countable then add a warning */ count = 1; } else if (Z_TYPE_P(op1) == IS_NULL) { count = 0; } else { count = 1; } zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable"); } while (0); ZVAL_LONG(EX_VAR(opline->result.var), count); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_COLD_CONST_HANDLER(191, ZEND_GET_CLASS, UNUSED|CONST|TMP|VAR|CV, UNUSED) { USE_OPLINE if (OP1_TYPE == IS_UNUSED) { if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_class() called without object from outside a class"); ZVAL_FALSE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name); ZEND_VM_NEXT_OPCODE(); } } else { zend_free_op free_op1; zval *op1; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); if (Z_TYPE_P(op1) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name); } else { zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1))); ZVAL_FALSE(EX_VAR(opline->result.var)); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_HANDLER(192, ZEND_GET_CALLED_CLASS, UNUSED, UNUSED) { USE_OPLINE if (Z_TYPE(EX(This)) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name); } else if (Z_CE(EX(This))) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_called_class() called from outside a class"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_COLD_CONST_HANDLER(193, ZEND_GET_TYPE, CONST|TMP|VAR|CV, UNUSED) { USE_OPLINE zend_free_op free_op1; zval *op1; zend_string *type; SAVE_OPLINE(); op1 = GET_OP1_ZVAL_PTR_DEREF(BP_VAR_R); type = zend_zval_get_type(op1); if (EXPECTED(type)) { ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type); } else { ZVAL_STRING(EX_VAR(opline->result.var), "unknown type"); } FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HANDLER(194, ZEND_FUNC_NUM_ARGS, UNUSED, UNUSED) { USE_OPLINE ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS()); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HANDLER(195, ZEND_FUNC_GET_ARGS, UNUSED|CONST, UNUSED) { USE_OPLINE zend_array *ht; uint32_t arg_count, result_size, skip; arg_count = EX_NUM_ARGS(); if (OP1_TYPE == IS_CONST) { skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1)); if (arg_count < skip) { result_size = 0; } else { result_size = arg_count - skip; } } else { skip = 0; result_size = arg_count; } if (result_size) { uint32_t first_extra_arg = EX(func)->op_array.num_args; ht = zend_new_array(result_size); ZVAL_ARR(EX_VAR(opline->result.var), ht); zend_hash_real_init_packed(ht); ZEND_HASH_FILL_PACKED(ht) { zval *p, *q; uint32_t i = skip; p = EX_VAR_NUM(i); if (arg_count > first_extra_arg) { while (i < first_extra_arg) { q = p; if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) { ZVAL_DEREF(q); if (Z_OPT_REFCOUNTED_P(q)) { Z_ADDREF_P(q); } } else { q = &EG(uninitialized_zval); } ZEND_HASH_FILL_ADD(q); p++; i++; } if (skip < first_extra_arg) { skip = 0; } else { skip -= first_extra_arg; } p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip); } while (i < arg_count) { q = p; if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) { ZVAL_DEREF(q); if (Z_OPT_REFCOUNTED_P(q)) { Z_ADDREF_P(q); } } else { q = &EG(uninitialized_zval); } ZEND_HASH_FILL_ADD(q); p++; i++; } } ZEND_HASH_FILL_END(); ht->nNumOfElements = result_size; } else { ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_JMP, (OP_JMP_ADDR(op, op->op1) > op), ZEND_JMP_FORWARD, JMP_ADDR, ANY) { USE_OPLINE OPLINE = OP_JMP_ADDR(opline, opline->op1); ZEND_VM_CONTINUE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_ADD_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_ADD, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_ADD_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_SUB_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SUB, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_SUB_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG_NO_OVERFLOW, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_MUL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2, *result; zend_long overflow; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_MUL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_MUL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2, *result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_NOT_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_NOT_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_NOT_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST,COMMUTATIVE)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG), ZEND_IS_SMALLER_OR_EQUAL_LONG, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_IS_SMALLER_OR_EQUAL, (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE), ZEND_IS_SMALLER_OR_EQUAL_DOUBLE, CONST|TMPVARCV, CONST|TMPVARCV, SPEC(SMART_BRANCH,NO_CONST_CONST)) { USE_OPLINE zval *op1, *op2; int result; op1 = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); op2 = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG_NO_OVERFLOW, CV, ANY, SPEC(RETVAL)) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); Z_LVAL_P(var_ptr)++; if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == MAY_BE_LONG), ZEND_PRE_INC_LONG, CV, ANY, SPEC(RETVAL)) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); fast_long_increment_function(var_ptr); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_PRE_INC_LONG_OR_DOUBLE, CV, ANY, SPEC(RETVAL)) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); } else { Z_DVAL_P(var_ptr)++; } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG_NO_OVERFLOW, CV, ANY, SPEC(RETVAL)) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); Z_LVAL_P(var_ptr)--; if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == MAY_BE_LONG), ZEND_PRE_DEC_LONG, CV, ANY, SPEC(RETVAL)) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); fast_long_decrement_function(var_ptr); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_PRE_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_PRE_DEC_LONG_OR_DOUBLE, CV, ANY, SPEC(RETVAL)) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); } else { Z_DVAL_P(var_ptr)--; } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG_NO_OVERFLOW, CV, ANY) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); Z_LVAL_P(var_ptr)++; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == MAY_BE_LONG), ZEND_POST_INC_LONG, CV, ANY) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_INC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_POST_INC_LONG_OR_DOUBLE, CV, ANY) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); } else { ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)++; } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG_NO_OVERFLOW, CV, ANY) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); Z_LVAL_P(var_ptr)--; ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == MAY_BE_LONG), ZEND_POST_DEC_LONG, CV, ANY) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_POST_DEC, (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)), ZEND_POST_DEC_LONG_OR_DOUBLE, CV, ANY) { USE_OPLINE zval *var_ptr; var_ptr = GET_OP1_ZVAL_PTR_PTR_UNDEF(BP_VAR_RW); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); } else { ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)--; } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, (op1_info == MAY_BE_DOUBLE), ZEND_QM_ASSIGN_DOUBLE, CONST|TMPVARCV, ANY) { USE_OPLINE zend_free_op free_op1; zval *value; value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value)); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_QM_ASSIGN, ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))), ZEND_QM_ASSIGN_NOREF, CONST|TMPVARCV, ANY) { USE_OPLINE zend_free_op free_op1; zval *value; value = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FETCH_DIM_R, (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))), ZEND_FETCH_DIM_R_INDEX, CONST|TMPVAR|CV, CONST|TMPVARCV, SPEC(NO_CONST_CONST)) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *dim, *value; zend_long offset; HashTable *ht; container = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); dim = GET_OP2_ZVAL_PTR_UNDEF(BP_VAR_R); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_LABEL(fetch_dim_r_index_array): if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { offset = Z_LVAL_P(dim); } else { offset = zval_get_long(dim); } ht = Z_ARRVAL_P(container); ZEND_HASH_INDEX_FIND(ht, offset, value, ZEND_VM_C_LABEL(fetch_dim_r_index_undef)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value); if (OP1_TYPE & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } else if (OP1_TYPE != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { ZEND_VM_C_GOTO(fetch_dim_r_index_array); } else { ZEND_VM_C_GOTO(fetch_dim_r_index_slow); } } else { ZEND_VM_C_LABEL(fetch_dim_r_index_slow): SAVE_OPLINE(); if (OP2_TYPE == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_C_LABEL(fetch_dim_r_index_undef): ZVAL_NULL(EX_VAR(opline->result.var)); SAVE_OPLINE(); zend_undefined_offset(offset); FREE_OP1(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAR, (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_SIMPLE, CV|VAR, NUM) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (OP1_TYPE == IS_CV) { ZVAL_COPY(arg, varptr); } else /* if (OP1_TYPE == IS_VAR) */ { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAR_EX, op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0, ZEND_SEND_VAR_EX_SIMPLE, CV|VAR, NUM) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_DISPATCH_TO_HANDLER(ZEND_SEND_REF); } varptr = GET_OP1_ZVAL_PTR_UNDEF(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (OP1_TYPE == IS_CV) { ZVAL_COPY(arg, varptr); } else /* if (OP1_TYPE == IS_VAR) */ { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAL, op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)), ZEND_SEND_VAL_SIMPLE, CONST, NUM) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; value = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_SEND_VAL_EX, op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)), ZEND_SEND_VAL_EX_SIMPLE, CONST, NUM) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_DISPATCH_TO_HELPER(zend_cannot_pass_by_ref_helper); } value = GET_OP1_ZVAL_PTR(BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); ZEND_VM_NEXT_OPCODE(); } ZEND_VM_HOT_TYPE_SPEC_HANDLER(ZEND_FE_FETCH_R, op->op2_type == IS_CV && (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY, ZEND_FE_FETCH_R_SIMPLE, VAR, CV, JMP_ADDR, SPEC(RETVAL)) { USE_OPLINE zval *array; zval *value, *variable_ptr; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); fe_ht = Z_ARRVAL_P(array); pos = Z_FE_POS_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } Z_FE_POS_P(array) = pos + 1; if (RETURN_VALUE_USED(opline)) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } variable_ptr = EX_VAR(opline->op2.var); zend_assign_to_variable(variable_ptr, value, IS_CV); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_DEFINE_OP(137, ZEND_OP_DATA); ZEND_VM_HELPER(zend_interrupt_helper, ANY, ANY) { EG(vm_interrupt) = 0; SAVE_OPLINE(); if (EG(timed_out)) { zend_timeout(0); } else if (zend_interrupt_function) { zend_interrupt_function(execute_data); ZEND_VM_ENTER(); } ZEND_VM_CONTINUE(); } PK!^EZend/zend_build.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stanislav Malyshev | +----------------------------------------------------------------------+ */ #ifndef ZEND_BUILD_H #define ZEND_BUILD_H #define ZEND_TOSTR_(x) #x #define ZEND_TOSTR(x) ZEND_TOSTR_(x) #ifdef ZTS #define ZEND_BUILD_TS ",TS" #else #define ZEND_BUILD_TS ",NTS" #endif #if ZEND_DEBUG #define ZEND_BUILD_DEBUG ",debug" #else #define ZEND_BUILD_DEBUG #endif #if defined(ZEND_WIN32) && defined(PHP_COMPILER_ID) #define ZEND_BUILD_SYSTEM "," PHP_COMPILER_ID #else #define ZEND_BUILD_SYSTEM #endif /* for private applications */ #define ZEND_BUILD_EXTRA #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!-HZend/zend_types.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | | Xinchen Hui | +----------------------------------------------------------------------+ */ #ifndef ZEND_TYPES_H #define ZEND_TYPES_H #include "zend_portability.h" #include "zend_long.h" #ifdef __SSE2__ # include # include #endif #ifdef WORDS_BIGENDIAN # define ZEND_ENDIAN_LOHI(lo, hi) hi; lo; # define ZEND_ENDIAN_LOHI_3(lo, mi, hi) hi; mi; lo; # define ZEND_ENDIAN_LOHI_4(a, b, c, d) d; c; b; a; # define ZEND_ENDIAN_LOHI_C(lo, hi) hi, lo # define ZEND_ENDIAN_LOHI_C_3(lo, mi, hi) hi, mi, lo, # define ZEND_ENDIAN_LOHI_C_4(a, b, c, d) d, c, b, a #else # define ZEND_ENDIAN_LOHI(lo, hi) lo; hi; # define ZEND_ENDIAN_LOHI_3(lo, mi, hi) lo; mi; hi; # define ZEND_ENDIAN_LOHI_4(a, b, c, d) a; b; c; d; # define ZEND_ENDIAN_LOHI_C(lo, hi) lo, hi # define ZEND_ENDIAN_LOHI_C_3(lo, mi, hi) lo, mi, hi, # define ZEND_ENDIAN_LOHI_C_4(a, b, c, d) a, b, c, d #endif typedef unsigned char zend_bool; typedef unsigned char zend_uchar; typedef enum { SUCCESS = 0, FAILURE = -1, /* this MUST stay a negative number, or it may affect functions! */ } ZEND_RESULT_CODE; #ifdef ZEND_ENABLE_ZVAL_LONG64 # ifdef ZEND_WIN32 # define ZEND_SIZE_MAX _UI64_MAX # else # define ZEND_SIZE_MAX SIZE_MAX # endif #else # if defined(ZEND_WIN32) # define ZEND_SIZE_MAX _UI32_MAX # else # define ZEND_SIZE_MAX SIZE_MAX # endif #endif typedef intptr_t zend_intptr_t; typedef uintptr_t zend_uintptr_t; #ifdef ZTS #define ZEND_TLS static TSRM_TLS #define ZEND_EXT_TLS TSRM_TLS #else #define ZEND_TLS static #define ZEND_EXT_TLS #endif typedef struct _zend_object_handlers zend_object_handlers; typedef struct _zend_class_entry zend_class_entry; typedef union _zend_function zend_function; typedef struct _zend_execute_data zend_execute_data; typedef struct _zval_struct zval; typedef struct _zend_refcounted zend_refcounted; typedef struct _zend_string zend_string; typedef struct _zend_array zend_array; typedef struct _zend_object zend_object; typedef struct _zend_resource zend_resource; typedef struct _zend_reference zend_reference; typedef struct _zend_ast_ref zend_ast_ref; typedef struct _zend_ast zend_ast; typedef int (*compare_func_t)(const void *, const void *); typedef void (*swap_func_t)(void *, void *); typedef void (*sort_func_t)(void *, size_t, size_t, compare_func_t, swap_func_t); typedef void (*dtor_func_t)(zval *pDest); typedef void (*copy_ctor_func_t)(zval *pElement); /* * zend_type - is an abstraction layer to represent information about type hint. * It shouldn't be used directly. Only through ZEND_TYPE_* macros. * * ZEND_TYPE_IS_SET() - checks if type-hint exists * ZEND_TYPE_IS_CODE() - checks if type-hint refer to standard type * ZEND_TYPE_IS_CLASS() - checks if type-hint refer to some class * * ZEND_TYPE_NAME() - returns referenced class name * ZEND_TYPE_CE() - returns referenced class entry * ZEND_TYPE_CODE() - returns standard type code (e.g. IS_LONG, _IS_BOOL) * * ZEND_TYPE_ALLOW_NULL() - checks if NULL is allowed * * ZEND_TYPE_ENCODE() and ZEND_TYPE_ENCODE_CLASS() should be used for * construction. */ typedef uintptr_t zend_type; #define ZEND_TYPE_IS_SET(t) \ ((t) > Z_L(1)) #define ZEND_TYPE_IS_CODE(t) \ (((t) > Z_L(1)) && ((t) <= Z_L(0x1ff))) #define ZEND_TYPE_IS_CLASS(t) \ ((t) > Z_L(0x1ff)) #define ZEND_TYPE_NAME(t) \ ((zend_string*)((t) & ~Z_L(0x3))) #define ZEND_TYPE_CE(t) \ ((zend_class_entry*)((t) & ~Z_L(0x3))) #define ZEND_TYPE_CODE(t) \ ((t) >> Z_L(1)) #define ZEND_TYPE_ALLOW_NULL(t) \ (((t) & Z_L(0x1)) != 0) #define ZEND_TYPE_ENCODE(code, allow_null) \ (((code) << Z_L(1)) | ((allow_null) ? Z_L(0x1) : Z_L(0x0))) #define ZEND_TYPE_ENCODE_CLASS(class_name, allow_null) \ (((uintptr_t)(class_name)) | ((allow_null) ? Z_L(0x1) : Z_L(0))) #define ZEND_TYPE_ENCODE_CLASS_CONST_0(class_name) \ ((zend_type) class_name) #define ZEND_TYPE_ENCODE_CLASS_CONST_1(class_name) \ ((zend_type) "?" class_name) #define ZEND_TYPE_ENCODE_CLASS_CONST_Q2(macro, class_name) \ macro(class_name) #define ZEND_TYPE_ENCODE_CLASS_CONST_Q1(allow_null, class_name) \ ZEND_TYPE_ENCODE_CLASS_CONST_Q2(ZEND_TYPE_ENCODE_CLASS_CONST_ ##allow_null, class_name) #define ZEND_TYPE_ENCODE_CLASS_CONST(class_name, allow_null) \ ZEND_TYPE_ENCODE_CLASS_CONST_Q1(allow_null, class_name) typedef union _zend_value { zend_long lval; /* long value */ double dval; /* double value */ zend_refcounted *counted; zend_string *str; zend_array *arr; zend_object *obj; zend_resource *res; zend_reference *ref; zend_ast_ref *ast; zval *zv; void *ptr; zend_class_entry *ce; zend_function *func; struct { uint32_t w1; uint32_t w2; } ww; } zend_value; struct _zval_struct { zend_value value; /* value */ union { struct { ZEND_ENDIAN_LOHI_3( zend_uchar type, /* active type */ zend_uchar type_flags, union { uint16_t call_info; /* call info for EX(This) */ uint16_t extra; /* not further specified */ } u) } v; uint32_t type_info; } u1; union { uint32_t next; /* hash collision chain */ uint32_t cache_slot; /* cache slot (for RECV_INIT) */ uint32_t opline_num; /* opline number (for FAST_CALL) */ uint32_t lineno; /* line number (for ast nodes) */ uint32_t num_args; /* arguments number for EX(This) */ uint32_t fe_pos; /* foreach position */ uint32_t fe_iter_idx; /* foreach iterator index */ uint32_t access_flags; /* class constant access flags */ uint32_t property_guard; /* single property guard */ uint32_t constant_flags; /* constant flags */ uint32_t extra; /* not further specified */ } u2; }; typedef struct _zend_refcounted_h { uint32_t refcount; /* reference counter 32-bit */ union { uint32_t type_info; } u; } zend_refcounted_h; struct _zend_refcounted { zend_refcounted_h gc; }; struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; }; typedef struct _Bucket { zval val; zend_ulong h; /* hash value (or numeric index) */ zend_string *key; /* string key or NULL for numerics */ } Bucket; typedef struct _zend_array HashTable; struct _zend_array { zend_refcounted_h gc; union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar flags, zend_uchar _unused, zend_uchar nIteratorsCount, zend_uchar _unused2) } v; uint32_t flags; } u; uint32_t nTableMask; Bucket *arData; uint32_t nNumUsed; uint32_t nNumOfElements; uint32_t nTableSize; uint32_t nInternalPointer; zend_long nNextFreeElement; dtor_func_t pDestructor; }; /* * HashTable Data Layout * ===================== * * +=============================+ * | HT_HASH(ht, ht->nTableMask) | * | ... | * | HT_HASH(ht, -1) | * +-----------------------------+ * ht->arData ---> | Bucket[0] | * | ... | * | Bucket[ht->nTableSize-1] | * +=============================+ */ #define HT_INVALID_IDX ((uint32_t) -1) #define HT_MIN_MASK ((uint32_t) -2) #define HT_MIN_SIZE 8 #if SIZEOF_SIZE_T == 4 # define HT_MAX_SIZE 0x04000000 /* small enough to avoid overflow checks */ # define HT_HASH_TO_BUCKET_EX(data, idx) \ ((Bucket*)((char*)(data) + (idx))) # define HT_IDX_TO_HASH(idx) \ ((idx) * sizeof(Bucket)) # define HT_HASH_TO_IDX(idx) \ ((idx) / sizeof(Bucket)) #elif SIZEOF_SIZE_T == 8 # define HT_MAX_SIZE 0x80000000 # define HT_HASH_TO_BUCKET_EX(data, idx) \ ((data) + (idx)) # define HT_IDX_TO_HASH(idx) \ (idx) # define HT_HASH_TO_IDX(idx) \ (idx) #else # error "Unknown SIZEOF_SIZE_T" #endif #define HT_HASH_EX(data, idx) \ ((uint32_t*)(data))[(int32_t)(idx)] #define HT_HASH(ht, idx) \ HT_HASH_EX((ht)->arData, idx) #define HT_SIZE_TO_MASK(nTableSize) \ ((uint32_t)(-((nTableSize) + (nTableSize)))) #define HT_HASH_SIZE(nTableMask) \ (((size_t)(uint32_t)-(int32_t)(nTableMask)) * sizeof(uint32_t)) #define HT_DATA_SIZE(nTableSize) \ ((size_t)(nTableSize) * sizeof(Bucket)) #define HT_SIZE_EX(nTableSize, nTableMask) \ (HT_DATA_SIZE((nTableSize)) + HT_HASH_SIZE((nTableMask))) #define HT_SIZE(ht) \ HT_SIZE_EX((ht)->nTableSize, (ht)->nTableMask) #define HT_USED_SIZE(ht) \ (HT_HASH_SIZE((ht)->nTableMask) + ((size_t)(ht)->nNumUsed * sizeof(Bucket))) #ifdef __SSE2__ # define HT_HASH_RESET(ht) do { \ char *p = (char*)&HT_HASH(ht, (ht)->nTableMask); \ size_t size = HT_HASH_SIZE((ht)->nTableMask); \ __m128i xmm0 = _mm_setzero_si128(); \ xmm0 = _mm_cmpeq_epi8(xmm0, xmm0); \ ZEND_ASSERT(size >= 64 && ((size & 0x3f) == 0)); \ do { \ _mm_storeu_si128((__m128i*)p, xmm0); \ _mm_storeu_si128((__m128i*)(p+16), xmm0); \ _mm_storeu_si128((__m128i*)(p+32), xmm0); \ _mm_storeu_si128((__m128i*)(p+48), xmm0); \ p += 64; \ size -= 64; \ } while (size != 0); \ } while (0) #else # define HT_HASH_RESET(ht) \ memset(&HT_HASH(ht, (ht)->nTableMask), HT_INVALID_IDX, HT_HASH_SIZE((ht)->nTableMask)) #endif #define HT_HASH_RESET_PACKED(ht) do { \ HT_HASH(ht, -2) = HT_INVALID_IDX; \ HT_HASH(ht, -1) = HT_INVALID_IDX; \ } while (0) #define HT_HASH_TO_BUCKET(ht, idx) \ HT_HASH_TO_BUCKET_EX((ht)->arData, idx) #define HT_SET_DATA_ADDR(ht, ptr) do { \ (ht)->arData = (Bucket*)(((char*)(ptr)) + HT_HASH_SIZE((ht)->nTableMask)); \ } while (0) #define HT_GET_DATA_ADDR(ht) \ ((char*)((ht)->arData) - HT_HASH_SIZE((ht)->nTableMask)) typedef uint32_t HashPosition; typedef struct _HashTableIterator { HashTable *ht; HashPosition pos; } HashTableIterator; struct _zend_object { zend_refcounted_h gc; uint32_t handle; // TODO: may be removed ??? zend_class_entry *ce; const zend_object_handlers *handlers; HashTable *properties; zval properties_table[1]; }; struct _zend_resource { zend_refcounted_h gc; int handle; // TODO: may be removed ??? int type; void *ptr; }; struct _zend_reference { zend_refcounted_h gc; zval val; }; struct _zend_ast_ref { zend_refcounted_h gc; /*zend_ast ast; zend_ast follows the zend_ast_ref structure */ }; /* regular data types */ #define IS_UNDEF 0 #define IS_NULL 1 #define IS_FALSE 2 #define IS_TRUE 3 #define IS_LONG 4 #define IS_DOUBLE 5 #define IS_STRING 6 #define IS_ARRAY 7 #define IS_OBJECT 8 #define IS_RESOURCE 9 #define IS_REFERENCE 10 /* constant expressions */ #define IS_CONSTANT_AST 11 /* internal types */ #define IS_INDIRECT 13 #define IS_PTR 14 #define _IS_ERROR 15 /* fake types used only for type hinting (Z_TYPE(zv) can not use them) */ #define _IS_BOOL 16 #define IS_CALLABLE 17 #define IS_ITERABLE 18 #define IS_VOID 19 #define _IS_NUMBER 20 static zend_always_inline zend_uchar zval_get_type(const zval* pz) { return pz->u1.v.type; } #define ZEND_SAME_FAKE_TYPE(faketype, realtype) ( \ (faketype) == (realtype) \ || ((faketype) == _IS_BOOL && ((realtype) == IS_TRUE || (realtype) == IS_FALSE)) \ ) /* we should never set just Z_TYPE, we should set Z_TYPE_INFO */ #define Z_TYPE(zval) zval_get_type(&(zval)) #define Z_TYPE_P(zval_p) Z_TYPE(*(zval_p)) #define Z_TYPE_FLAGS(zval) (zval).u1.v.type_flags #define Z_TYPE_FLAGS_P(zval_p) Z_TYPE_FLAGS(*(zval_p)) #define Z_TYPE_INFO(zval) (zval).u1.type_info #define Z_TYPE_INFO_P(zval_p) Z_TYPE_INFO(*(zval_p)) #define Z_NEXT(zval) (zval).u2.next #define Z_NEXT_P(zval_p) Z_NEXT(*(zval_p)) #define Z_CACHE_SLOT(zval) (zval).u2.cache_slot #define Z_CACHE_SLOT_P(zval_p) Z_CACHE_SLOT(*(zval_p)) #define Z_LINENO(zval) (zval).u2.lineno #define Z_LINENO_P(zval_p) Z_LINENO(*(zval_p)) #define Z_OPLINE_NUM(zval) (zval).u2.opline_num #define Z_OPLINE_NUM_P(zval_p) Z_OPLINE_NUM(*(zval_p)) #define Z_FE_POS(zval) (zval).u2.fe_pos #define Z_FE_POS_P(zval_p) Z_FE_POS(*(zval_p)) #define Z_FE_ITER(zval) (zval).u2.fe_iter_idx #define Z_FE_ITER_P(zval_p) Z_FE_ITER(*(zval_p)) #define Z_ACCESS_FLAGS(zval) (zval).u2.access_flags #define Z_ACCESS_FLAGS_P(zval_p) Z_ACCESS_FLAGS(*(zval_p)) #define Z_PROPERTY_GUARD(zval) (zval).u2.property_guard #define Z_PROPERTY_GUARD_P(zval_p) Z_PROPERTY_GUARD(*(zval_p)) #define Z_CONSTANT_FLAGS(zval) (zval).u2.constant_flags #define Z_CONSTANT_FLAGS_P(zval_p) Z_CONSTANT_FLAGS(*(zval_p)) #define Z_EXTRA(zval) (zval).u2.extra #define Z_EXTRA_P(zval_p) Z_EXTRA(*(zval_p)) #define Z_COUNTED(zval) (zval).value.counted #define Z_COUNTED_P(zval_p) Z_COUNTED(*(zval_p)) #define Z_TYPE_MASK 0xff #define Z_TYPE_FLAGS_MASK 0xff00 #define Z_TYPE_FLAGS_SHIFT 8 #define GC_REFCOUNT(p) zend_gc_refcount(&(p)->gc) #define GC_SET_REFCOUNT(p, rc) zend_gc_set_refcount(&(p)->gc, rc) #define GC_ADDREF(p) zend_gc_addref(&(p)->gc) #define GC_DELREF(p) zend_gc_delref(&(p)->gc) #define GC_ADDREF_EX(p, rc) zend_gc_addref_ex(&(p)->gc, rc) #define GC_DELREF_EX(p, rc) zend_gc_delref_ex(&(p)->gc, rc) #define GC_TYPE_MASK 0x0000000f #define GC_FLAGS_MASK 0x000003f0 #define GC_INFO_MASK 0xfffffc00 #define GC_FLAGS_SHIFT 0 #define GC_INFO_SHIFT 10 static zend_always_inline zend_uchar zval_gc_type(uint32_t gc_type_info) { return (gc_type_info & GC_TYPE_MASK); } static zend_always_inline uint32_t zval_gc_flags(uint32_t gc_type_info) { return (gc_type_info >> GC_FLAGS_SHIFT) & (GC_FLAGS_MASK >> GC_FLAGS_SHIFT); } static zend_always_inline uint32_t zval_gc_info(uint32_t gc_type_info) { return (gc_type_info >> GC_INFO_SHIFT); } #define GC_TYPE_INFO(p) (p)->gc.u.type_info #define GC_TYPE(p) zval_gc_type(GC_TYPE_INFO(p)) #define GC_FLAGS(p) zval_gc_flags(GC_TYPE_INFO(p)) #define GC_INFO(p) zval_gc_info(GC_TYPE_INFO(p)) #define GC_ADD_FLAGS(p, flags) do { \ GC_TYPE_INFO(p) |= (flags) << GC_FLAGS_SHIFT; \ } while (0) #define GC_DEL_FLAGS(p, flags) do { \ GC_TYPE_INFO(p) &= ~((flags) << GC_FLAGS_SHIFT); \ } while (0) #define Z_GC_TYPE(zval) GC_TYPE(Z_COUNTED(zval)) #define Z_GC_TYPE_P(zval_p) Z_GC_TYPE(*(zval_p)) #define Z_GC_FLAGS(zval) GC_FLAGS(Z_COUNTED(zval)) #define Z_GC_FLAGS_P(zval_p) Z_GC_FLAGS(*(zval_p)) #define Z_GC_INFO(zval) GC_INFO(Z_COUNTED(zval)) #define Z_GC_INFO_P(zval_p) Z_GC_INFO(*(zval_p)) #define Z_GC_TYPE_INFO(zval) GC_TYPE_INFO(Z_COUNTED(zval)) #define Z_GC_TYPE_INFO_P(zval_p) Z_GC_TYPE_INFO(*(zval_p)) /* zval_gc_flags(zval.value->gc.u.type_info) (common flags) */ #define GC_COLLECTABLE (1<<4) #define GC_PROTECTED (1<<5) /* used for recursion detection */ #define GC_IMMUTABLE (1<<6) /* can't be canged in place */ #define GC_PERSISTENT (1<<7) /* allocated using malloc */ #define GC_PERSISTENT_LOCAL (1<<8) /* persistent, but thread-local */ #define GC_ARRAY (IS_ARRAY | (GC_COLLECTABLE << GC_FLAGS_SHIFT)) #define GC_OBJECT (IS_OBJECT | (GC_COLLECTABLE << GC_FLAGS_SHIFT)) /* zval.u1.v.type_flags */ #define IS_TYPE_REFCOUNTED (1<<0) #if 1 /* This optimized version assumes that we have a single "type_flag" */ # define Z_TYPE_INFO_REFCOUNTED(t) (((t) & Z_TYPE_FLAGS_MASK) != 0) #else # define Z_TYPE_INFO_REFCOUNTED(t) (((t) & (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) != 0) #endif /* extended types */ #define IS_INTERNED_STRING_EX IS_STRING #define IS_STRING_EX (IS_STRING | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) #define IS_ARRAY_EX (IS_ARRAY | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) #define IS_OBJECT_EX (IS_OBJECT | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) #define IS_RESOURCE_EX (IS_RESOURCE | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) #define IS_REFERENCE_EX (IS_REFERENCE | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) #define IS_CONSTANT_AST_EX (IS_CONSTANT_AST | (IS_TYPE_REFCOUNTED << Z_TYPE_FLAGS_SHIFT)) /* string flags (zval.value->gc.u.flags) */ #define IS_STR_INTERNED GC_IMMUTABLE /* interned string */ #define IS_STR_PERSISTENT GC_PERSISTENT /* allocated using malloc */ #define IS_STR_PERMANENT (1<<8) /* relives request boundary */ /* array flags */ #define IS_ARRAY_IMMUTABLE GC_IMMUTABLE #define IS_ARRAY_PERSISTENT GC_PERSISTENT /* object flags (zval.value->gc.u.flags) */ #define IS_OBJ_DESTRUCTOR_CALLED (1<<8) #define IS_OBJ_FREE_CALLED (1<<9) #define OBJ_FLAGS(obj) GC_FLAGS(obj) /* Recursion protection macros must be used only for arrays and objects */ #define GC_IS_RECURSIVE(p) \ (GC_FLAGS(p) & GC_PROTECTED) #define GC_PROTECT_RECURSION(p) do { \ GC_ADD_FLAGS(p, GC_PROTECTED); \ } while (0) #define GC_UNPROTECT_RECURSION(p) do { \ GC_DEL_FLAGS(p, GC_PROTECTED); \ } while (0) #define GC_TRY_PROTECT_RECURSION(p) do { \ if (!(GC_FLAGS(p) & GC_IMMUTABLE)) GC_PROTECT_RECURSION(p); \ } while (0) #define GC_TRY_UNPROTECT_RECURSION(p) do { \ if (!(GC_FLAGS(p) & GC_IMMUTABLE)) GC_UNPROTECT_RECURSION(p); \ } while (0) #define Z_IS_RECURSIVE(zval) GC_IS_RECURSIVE(Z_COUNTED(zval)) #define Z_PROTECT_RECURSION(zval) GC_PROTECT_RECURSION(Z_COUNTED(zval)) #define Z_UNPROTECT_RECURSION(zval) GC_UNPROTECT_RECURSION(Z_COUNTED(zval)) #define Z_IS_RECURSIVE_P(zv) Z_IS_RECURSIVE(*(zv)) #define Z_PROTECT_RECURSION_P(zv) Z_PROTECT_RECURSION(*(zv)) #define Z_UNPROTECT_RECURSION_P(zv) Z_UNPROTECT_RECURSION(*(zv)) /* All data types < IS_STRING have their constructor/destructors skipped */ #define Z_CONSTANT(zval) (Z_TYPE(zval) == IS_CONSTANT_AST) #define Z_CONSTANT_P(zval_p) Z_CONSTANT(*(zval_p)) #if 1 /* This optimized version assumes that we have a single "type_flag" */ #define Z_REFCOUNTED(zval) (Z_TYPE_FLAGS(zval) != 0) #else #define Z_REFCOUNTED(zval) ((Z_TYPE_FLAGS(zval) & IS_TYPE_REFCOUNTED) != 0) #endif #define Z_REFCOUNTED_P(zval_p) Z_REFCOUNTED(*(zval_p)) /* deprecated: (COPYABLE is the same as IS_ARRAY) */ #define Z_COPYABLE(zval) (Z_TYPE(zval) == IS_ARRAY) #define Z_COPYABLE_P(zval_p) Z_COPYABLE(*(zval_p)) /* deprecated: (IMMUTABLE is the same as IS_ARRAY && !REFCOUNTED) */ #define Z_IMMUTABLE(zval) (Z_TYPE_INFO(zval) == IS_ARRAY) #define Z_IMMUTABLE_P(zval_p) Z_IMMUTABLE(*(zval_p)) #define Z_OPT_IMMUTABLE(zval) Z_IMMUTABLE(zval_p) #define Z_OPT_IMMUTABLE_P(zval_p) Z_IMMUTABLE(*(zval_p)) /* the following Z_OPT_* macros make better code when Z_TYPE_INFO accessed before */ #define Z_OPT_TYPE(zval) (Z_TYPE_INFO(zval) & Z_TYPE_MASK) #define Z_OPT_TYPE_P(zval_p) Z_OPT_TYPE(*(zval_p)) #define Z_OPT_CONSTANT(zval) (Z_OPT_TYPE(zval) == IS_CONSTANT_AST) #define Z_OPT_CONSTANT_P(zval_p) Z_OPT_CONSTANT(*(zval_p)) #define Z_OPT_REFCOUNTED(zval) Z_TYPE_INFO_REFCOUNTED(Z_TYPE_INFO(zval)) #define Z_OPT_REFCOUNTED_P(zval_p) Z_OPT_REFCOUNTED(*(zval_p)) /* deprecated: (COPYABLE is the same as IS_ARRAY) */ #define Z_OPT_COPYABLE(zval) (Z_OPT_TYPE(zval) == IS_ARRAY) #define Z_OPT_COPYABLE_P(zval_p) Z_OPT_COPYABLE(*(zval_p)) #define Z_OPT_ISREF(zval) (Z_OPT_TYPE(zval) == IS_REFERENCE) #define Z_OPT_ISREF_P(zval_p) Z_OPT_ISREF(*(zval_p)) #define Z_ISREF(zval) (Z_TYPE(zval) == IS_REFERENCE) #define Z_ISREF_P(zval_p) Z_ISREF(*(zval_p)) #define Z_ISUNDEF(zval) (Z_TYPE(zval) == IS_UNDEF) #define Z_ISUNDEF_P(zval_p) Z_ISUNDEF(*(zval_p)) #define Z_ISNULL(zval) (Z_TYPE(zval) == IS_NULL) #define Z_ISNULL_P(zval_p) Z_ISNULL(*(zval_p)) #define Z_ISERROR(zval) (Z_TYPE(zval) == _IS_ERROR) #define Z_ISERROR_P(zval_p) Z_ISERROR(*(zval_p)) #define Z_LVAL(zval) (zval).value.lval #define Z_LVAL_P(zval_p) Z_LVAL(*(zval_p)) #define Z_DVAL(zval) (zval).value.dval #define Z_DVAL_P(zval_p) Z_DVAL(*(zval_p)) #define Z_STR(zval) (zval).value.str #define Z_STR_P(zval_p) Z_STR(*(zval_p)) #define Z_STRVAL(zval) ZSTR_VAL(Z_STR(zval)) #define Z_STRVAL_P(zval_p) Z_STRVAL(*(zval_p)) #define Z_STRLEN(zval) ZSTR_LEN(Z_STR(zval)) #define Z_STRLEN_P(zval_p) Z_STRLEN(*(zval_p)) #define Z_STRHASH(zval) ZSTR_HASH(Z_STR(zval)) #define Z_STRHASH_P(zval_p) Z_STRHASH(*(zval_p)) #define Z_ARR(zval) (zval).value.arr #define Z_ARR_P(zval_p) Z_ARR(*(zval_p)) #define Z_ARRVAL(zval) Z_ARR(zval) #define Z_ARRVAL_P(zval_p) Z_ARRVAL(*(zval_p)) #define Z_OBJ(zval) (zval).value.obj #define Z_OBJ_P(zval_p) Z_OBJ(*(zval_p)) #define Z_OBJ_HT(zval) Z_OBJ(zval)->handlers #define Z_OBJ_HT_P(zval_p) Z_OBJ_HT(*(zval_p)) #define Z_OBJ_HANDLER(zval, hf) Z_OBJ_HT((zval))->hf #define Z_OBJ_HANDLER_P(zv_p, hf) Z_OBJ_HANDLER(*(zv_p), hf) #define Z_OBJ_HANDLE(zval) (Z_OBJ((zval)))->handle #define Z_OBJ_HANDLE_P(zval_p) Z_OBJ_HANDLE(*(zval_p)) #define Z_OBJCE(zval) (Z_OBJ(zval)->ce) #define Z_OBJCE_P(zval_p) Z_OBJCE(*(zval_p)) #define Z_OBJPROP(zval) Z_OBJ_HT((zval))->get_properties(&(zval)) #define Z_OBJPROP_P(zval_p) Z_OBJPROP(*(zval_p)) #define Z_OBJDEBUG(zval,tmp) (Z_OBJ_HANDLER((zval),get_debug_info)?Z_OBJ_HANDLER((zval),get_debug_info)(&(zval),&tmp):(tmp=0,Z_OBJ_HANDLER((zval),get_properties)?Z_OBJPROP(zval):NULL)) #define Z_OBJDEBUG_P(zval_p,tmp) Z_OBJDEBUG(*(zval_p), tmp) #define Z_RES(zval) (zval).value.res #define Z_RES_P(zval_p) Z_RES(*zval_p) #define Z_RES_HANDLE(zval) Z_RES(zval)->handle #define Z_RES_HANDLE_P(zval_p) Z_RES_HANDLE(*zval_p) #define Z_RES_TYPE(zval) Z_RES(zval)->type #define Z_RES_TYPE_P(zval_p) Z_RES_TYPE(*zval_p) #define Z_RES_VAL(zval) Z_RES(zval)->ptr #define Z_RES_VAL_P(zval_p) Z_RES_VAL(*zval_p) #define Z_REF(zval) (zval).value.ref #define Z_REF_P(zval_p) Z_REF(*(zval_p)) #define Z_REFVAL(zval) &Z_REF(zval)->val #define Z_REFVAL_P(zval_p) Z_REFVAL(*(zval_p)) #define Z_AST(zval) (zval).value.ast #define Z_AST_P(zval_p) Z_AST(*(zval_p)) #define GC_AST(p) ((zend_ast*)(((char*)p) + sizeof(zend_ast_ref))) #define Z_ASTVAL(zval) GC_AST(Z_AST(zval)) #define Z_ASTVAL_P(zval_p) Z_ASTVAL(*(zval_p)) #define Z_INDIRECT(zval) (zval).value.zv #define Z_INDIRECT_P(zval_p) Z_INDIRECT(*(zval_p)) #define Z_CE(zval) (zval).value.ce #define Z_CE_P(zval_p) Z_CE(*(zval_p)) #define Z_FUNC(zval) (zval).value.func #define Z_FUNC_P(zval_p) Z_FUNC(*(zval_p)) #define Z_PTR(zval) (zval).value.ptr #define Z_PTR_P(zval_p) Z_PTR(*(zval_p)) #define ZVAL_UNDEF(z) do { \ Z_TYPE_INFO_P(z) = IS_UNDEF; \ } while (0) #define ZVAL_NULL(z) do { \ Z_TYPE_INFO_P(z) = IS_NULL; \ } while (0) #define ZVAL_FALSE(z) do { \ Z_TYPE_INFO_P(z) = IS_FALSE; \ } while (0) #define ZVAL_TRUE(z) do { \ Z_TYPE_INFO_P(z) = IS_TRUE; \ } while (0) #define ZVAL_BOOL(z, b) do { \ Z_TYPE_INFO_P(z) = \ (b) ? IS_TRUE : IS_FALSE; \ } while (0) #define ZVAL_LONG(z, l) { \ zval *__z = (z); \ Z_LVAL_P(__z) = l; \ Z_TYPE_INFO_P(__z) = IS_LONG; \ } #define ZVAL_DOUBLE(z, d) { \ zval *__z = (z); \ Z_DVAL_P(__z) = d; \ Z_TYPE_INFO_P(__z) = IS_DOUBLE; \ } #define ZVAL_STR(z, s) do { \ zval *__z = (z); \ zend_string *__s = (s); \ Z_STR_P(__z) = __s; \ /* interned strings support */ \ Z_TYPE_INFO_P(__z) = ZSTR_IS_INTERNED(__s) ? \ IS_INTERNED_STRING_EX : \ IS_STRING_EX; \ } while (0) #define ZVAL_INTERNED_STR(z, s) do { \ zval *__z = (z); \ zend_string *__s = (s); \ Z_STR_P(__z) = __s; \ Z_TYPE_INFO_P(__z) = IS_INTERNED_STRING_EX; \ } while (0) #define ZVAL_NEW_STR(z, s) do { \ zval *__z = (z); \ zend_string *__s = (s); \ Z_STR_P(__z) = __s; \ Z_TYPE_INFO_P(__z) = IS_STRING_EX; \ } while (0) #define ZVAL_STR_COPY(z, s) do { \ zval *__z = (z); \ zend_string *__s = (s); \ Z_STR_P(__z) = __s; \ /* interned strings support */ \ if (ZSTR_IS_INTERNED(__s)) { \ Z_TYPE_INFO_P(__z) = IS_INTERNED_STRING_EX; \ } else { \ GC_ADDREF(__s); \ Z_TYPE_INFO_P(__z) = IS_STRING_EX; \ } \ } while (0) #define ZVAL_ARR(z, a) do { \ zend_array *__arr = (a); \ zval *__z = (z); \ Z_ARR_P(__z) = __arr; \ Z_TYPE_INFO_P(__z) = IS_ARRAY_EX; \ } while (0) #define ZVAL_NEW_ARR(z) do { \ zval *__z = (z); \ zend_array *_arr = \ (zend_array *) emalloc(sizeof(zend_array)); \ Z_ARR_P(__z) = _arr; \ Z_TYPE_INFO_P(__z) = IS_ARRAY_EX; \ } while (0) #define ZVAL_NEW_PERSISTENT_ARR(z) do { \ zval *__z = (z); \ zend_array *_arr = \ (zend_array *) malloc(sizeof(zend_array)); \ Z_ARR_P(__z) = _arr; \ Z_TYPE_INFO_P(__z) = IS_ARRAY_EX; \ } while (0) #define ZVAL_OBJ(z, o) do { \ zval *__z = (z); \ Z_OBJ_P(__z) = (o); \ Z_TYPE_INFO_P(__z) = IS_OBJECT_EX; \ } while (0) #define ZVAL_RES(z, r) do { \ zval *__z = (z); \ Z_RES_P(__z) = (r); \ Z_TYPE_INFO_P(__z) = IS_RESOURCE_EX; \ } while (0) #define ZVAL_NEW_RES(z, h, p, t) do { \ zend_resource *_res = \ (zend_resource *) emalloc(sizeof(zend_resource)); \ zval *__z; \ GC_SET_REFCOUNT(_res, 1); \ GC_TYPE_INFO(_res) = IS_RESOURCE; \ _res->handle = (h); \ _res->type = (t); \ _res->ptr = (p); \ __z = (z); \ Z_RES_P(__z) = _res; \ Z_TYPE_INFO_P(__z) = IS_RESOURCE_EX; \ } while (0) #define ZVAL_NEW_PERSISTENT_RES(z, h, p, t) do { \ zend_resource *_res = \ (zend_resource *) malloc(sizeof(zend_resource)); \ zval *__z; \ GC_SET_REFCOUNT(_res, 1); \ GC_TYPE_INFO(_res) = IS_RESOURCE | \ (GC_PERSISTENT << GC_FLAGS_SHIFT); \ _res->handle = (h); \ _res->type = (t); \ _res->ptr = (p); \ __z = (z); \ Z_RES_P(__z) = _res; \ Z_TYPE_INFO_P(__z) = IS_RESOURCE_EX; \ } while (0) #define ZVAL_REF(z, r) do { \ zval *__z = (z); \ Z_REF_P(__z) = (r); \ Z_TYPE_INFO_P(__z) = IS_REFERENCE_EX; \ } while (0) #define ZVAL_NEW_EMPTY_REF(z) do { \ zend_reference *_ref = \ (zend_reference *) emalloc(sizeof(zend_reference)); \ GC_SET_REFCOUNT(_ref, 1); \ GC_TYPE_INFO(_ref) = IS_REFERENCE; \ Z_REF_P(z) = _ref; \ Z_TYPE_INFO_P(z) = IS_REFERENCE_EX; \ } while (0) #define ZVAL_NEW_REF(z, r) do { \ zend_reference *_ref = \ (zend_reference *) emalloc(sizeof(zend_reference)); \ GC_SET_REFCOUNT(_ref, 1); \ GC_TYPE_INFO(_ref) = IS_REFERENCE; \ ZVAL_COPY_VALUE(&_ref->val, r); \ Z_REF_P(z) = _ref; \ Z_TYPE_INFO_P(z) = IS_REFERENCE_EX; \ } while (0) #define ZVAL_MAKE_REF_EX(z, refcount) do { \ zval *_z = (z); \ zend_reference *_ref = \ (zend_reference *) emalloc(sizeof(zend_reference)); \ GC_SET_REFCOUNT(_ref, (refcount)); \ GC_TYPE_INFO(_ref) = IS_REFERENCE; \ ZVAL_COPY_VALUE(&_ref->val, _z); \ Z_REF_P(_z) = _ref; \ Z_TYPE_INFO_P(_z) = IS_REFERENCE_EX; \ } while (0) #define ZVAL_NEW_PERSISTENT_REF(z, r) do { \ zend_reference *_ref = \ (zend_reference *) malloc(sizeof(zend_reference)); \ GC_SET_REFCOUNT(_ref, 1); \ GC_TYPE_INFO(_ref) = IS_REFERENCE | \ (GC_PERSISTENT << GC_FLAGS_SHIFT); \ ZVAL_COPY_VALUE(&_ref->val, r); \ Z_REF_P(z) = _ref; \ Z_TYPE_INFO_P(z) = IS_REFERENCE_EX; \ } while (0) #define ZVAL_AST(z, ast) do { \ zval *__z = (z); \ Z_AST_P(__z) = ast; \ Z_TYPE_INFO_P(__z) = IS_CONSTANT_AST_EX; \ } while (0) #define ZVAL_INDIRECT(z, v) do { \ Z_INDIRECT_P(z) = (v); \ Z_TYPE_INFO_P(z) = IS_INDIRECT; \ } while (0) #define ZVAL_PTR(z, p) do { \ Z_PTR_P(z) = (p); \ Z_TYPE_INFO_P(z) = IS_PTR; \ } while (0) #define ZVAL_FUNC(z, f) do { \ Z_FUNC_P(z) = (f); \ Z_TYPE_INFO_P(z) = IS_PTR; \ } while (0) #define ZVAL_CE(z, c) do { \ Z_CE_P(z) = (c); \ Z_TYPE_INFO_P(z) = IS_PTR; \ } while (0) #define ZVAL_ERROR(z) do { \ Z_TYPE_INFO_P(z) = _IS_ERROR; \ } while (0) #define Z_REFCOUNT_P(pz) zval_refcount_p(pz) #define Z_SET_REFCOUNT_P(pz, rc) zval_set_refcount_p(pz, rc) #define Z_ADDREF_P(pz) zval_addref_p(pz) #define Z_DELREF_P(pz) zval_delref_p(pz) #define Z_REFCOUNT(z) Z_REFCOUNT_P(&(z)) #define Z_SET_REFCOUNT(z, rc) Z_SET_REFCOUNT_P(&(z), rc) #define Z_ADDREF(z) Z_ADDREF_P(&(z)) #define Z_DELREF(z) Z_DELREF_P(&(z)) #define Z_TRY_ADDREF_P(pz) do { \ if (Z_REFCOUNTED_P((pz))) { \ Z_ADDREF_P((pz)); \ } \ } while (0) #define Z_TRY_DELREF_P(pz) do { \ if (Z_REFCOUNTED_P((pz))) { \ Z_DELREF_P((pz)); \ } \ } while (0) #define Z_TRY_ADDREF(z) Z_TRY_ADDREF_P(&(z)) #define Z_TRY_DELREF(z) Z_TRY_DELREF_P(&(z)) #ifndef ZEND_RC_DEBUG # define ZEND_RC_DEBUG 0 #endif #if ZEND_RC_DEBUG extern ZEND_API zend_bool zend_rc_debug; # define ZEND_RC_MOD_CHECK(p) do { \ if (zend_rc_debug) { \ ZEND_ASSERT(!(zval_gc_flags((p)->u.type_info) & GC_IMMUTABLE)); \ ZEND_ASSERT((zval_gc_flags((p)->u.type_info) & (GC_PERSISTENT|GC_PERSISTENT_LOCAL)) != GC_PERSISTENT); \ } \ } while (0) # define GC_MAKE_PERSISTENT_LOCAL(p) do { \ GC_ADD_FLAGS(p, GC_PERSISTENT_LOCAL); \ } while (0) #else # define ZEND_RC_MOD_CHECK(p) \ do { } while (0) # define GC_MAKE_PERSISTENT_LOCAL(p) \ do { } while (0) #endif static zend_always_inline uint32_t zend_gc_refcount(const zend_refcounted_h *p) { return p->refcount; } static zend_always_inline uint32_t zend_gc_set_refcount(zend_refcounted_h *p, uint32_t rc) { p->refcount = rc; return p->refcount; } static zend_always_inline uint32_t zend_gc_addref(zend_refcounted_h *p) { ZEND_RC_MOD_CHECK(p); return ++(p->refcount); } static zend_always_inline uint32_t zend_gc_delref(zend_refcounted_h *p) { ZEND_RC_MOD_CHECK(p); return --(p->refcount); } static zend_always_inline uint32_t zend_gc_addref_ex(zend_refcounted_h *p, uint32_t rc) { ZEND_RC_MOD_CHECK(p); p->refcount += rc; return p->refcount; } static zend_always_inline uint32_t zend_gc_delref_ex(zend_refcounted_h *p, uint32_t rc) { ZEND_RC_MOD_CHECK(p); p->refcount -= rc; return p->refcount; } static zend_always_inline uint32_t zval_refcount_p(const zval* pz) { #if ZEND_DEBUG ZEND_ASSERT(Z_REFCOUNTED_P(pz) || Z_TYPE_P(pz) == IS_ARRAY); #endif return GC_REFCOUNT(Z_COUNTED_P(pz)); } static zend_always_inline uint32_t zval_set_refcount_p(zval* pz, uint32_t rc) { ZEND_ASSERT(Z_REFCOUNTED_P(pz)); return GC_SET_REFCOUNT(Z_COUNTED_P(pz), rc); } static zend_always_inline uint32_t zval_addref_p(zval* pz) { ZEND_ASSERT(Z_REFCOUNTED_P(pz)); return GC_ADDREF(Z_COUNTED_P(pz)); } static zend_always_inline uint32_t zval_delref_p(zval* pz) { ZEND_ASSERT(Z_REFCOUNTED_P(pz)); return GC_DELREF(Z_COUNTED_P(pz)); } #if SIZEOF_SIZE_T == 4 # define ZVAL_COPY_VALUE_EX(z, v, gc, t) \ do { \ uint32_t _w2 = v->value.ww.w2; \ Z_COUNTED_P(z) = gc; \ z->value.ww.w2 = _w2; \ Z_TYPE_INFO_P(z) = t; \ } while (0) #elif SIZEOF_SIZE_T == 8 # define ZVAL_COPY_VALUE_EX(z, v, gc, t) \ do { \ Z_COUNTED_P(z) = gc; \ Z_TYPE_INFO_P(z) = t; \ } while (0) #else # error "Unknown SIZEOF_SIZE_T" #endif #define ZVAL_COPY_VALUE(z, v) \ do { \ zval *_z1 = (z); \ const zval *_z2 = (v); \ zend_refcounted *_gc = Z_COUNTED_P(_z2); \ uint32_t _t = Z_TYPE_INFO_P(_z2); \ ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t); \ } while (0) #define ZVAL_COPY(z, v) \ do { \ zval *_z1 = (z); \ const zval *_z2 = (v); \ zend_refcounted *_gc = Z_COUNTED_P(_z2); \ uint32_t _t = Z_TYPE_INFO_P(_z2); \ ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t); \ if (Z_TYPE_INFO_REFCOUNTED(_t)) { \ GC_ADDREF(_gc); \ } \ } while (0) #define ZVAL_DUP(z, v) \ do { \ zval *_z1 = (z); \ const zval *_z2 = (v); \ zend_refcounted *_gc = Z_COUNTED_P(_z2); \ uint32_t _t = Z_TYPE_INFO_P(_z2); \ if ((_t & Z_TYPE_MASK) == IS_ARRAY) { \ ZVAL_ARR(_z1, zend_array_dup((zend_array*)_gc));\ } else { \ if (Z_TYPE_INFO_REFCOUNTED(_t)) { \ GC_ADDREF(_gc); \ } \ ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t); \ } \ } while (0) /* ZVAL_COPY_OR_DUP() should be used instead of ZVAL_COPY() and ZVAL_DUP() * in all places where the source may be a persistent zval. */ #define ZVAL_COPY_OR_DUP(z, v) \ do { \ zval *_z1 = (z); \ const zval *_z2 = (v); \ zend_refcounted *_gc = Z_COUNTED_P(_z2); \ uint32_t _t = Z_TYPE_INFO_P(_z2); \ ZVAL_COPY_VALUE_EX(_z1, _z2, _gc, _t); \ if (Z_TYPE_INFO_REFCOUNTED(_t)) { \ if (EXPECTED(!(GC_FLAGS(_gc) & GC_PERSISTENT))) { \ GC_ADDREF(_gc); \ } else { \ zval_copy_ctor_func(_z1); \ } \ } \ } while (0) #define ZVAL_DEREF(z) do { \ if (UNEXPECTED(Z_ISREF_P(z))) { \ (z) = Z_REFVAL_P(z); \ } \ } while (0) #define ZVAL_DEINDIRECT(z) do { \ if (Z_TYPE_P(z) == IS_INDIRECT) { \ (z) = Z_INDIRECT_P(z); \ } \ } while (0) #define ZVAL_OPT_DEREF(z) do { \ if (UNEXPECTED(Z_OPT_ISREF_P(z))) { \ (z) = Z_REFVAL_P(z); \ } \ } while (0) #define ZVAL_MAKE_REF(zv) do { \ zval *__zv = (zv); \ if (!Z_ISREF_P(__zv)) { \ ZVAL_NEW_REF(__zv, __zv); \ } \ } while (0) #define ZVAL_UNREF(z) do { \ zval *_z = (z); \ zend_reference *ref; \ ZEND_ASSERT(Z_ISREF_P(_z)); \ ref = Z_REF_P(_z); \ ZVAL_COPY_VALUE(_z, &ref->val); \ efree_size(ref, sizeof(zend_reference)); \ } while (0) #define ZVAL_COPY_DEREF(z, v) do { \ zval *_z3 = (v); \ if (Z_OPT_REFCOUNTED_P(_z3)) { \ if (UNEXPECTED(Z_OPT_ISREF_P(_z3))) { \ _z3 = Z_REFVAL_P(_z3); \ if (Z_OPT_REFCOUNTED_P(_z3)) { \ Z_ADDREF_P(_z3); \ } \ } else { \ Z_ADDREF_P(_z3); \ } \ } \ ZVAL_COPY_VALUE(z, _z3); \ } while (0) #define SEPARATE_STRING(zv) do { \ zval *_zv = (zv); \ if (Z_REFCOUNT_P(_zv) > 1) { \ zend_string *_str = Z_STR_P(_zv); \ ZEND_ASSERT(Z_REFCOUNTED_P(_zv)); \ ZEND_ASSERT(!ZSTR_IS_INTERNED(_str)); \ Z_DELREF_P(_zv); \ ZVAL_NEW_STR(_zv, zend_string_init( \ ZSTR_VAL(_str), ZSTR_LEN(_str), 0)); \ } \ } while (0) #define SEPARATE_ARRAY(zv) do { \ zval *_zv = (zv); \ zend_array *_arr = Z_ARR_P(_zv); \ if (UNEXPECTED(GC_REFCOUNT(_arr) > 1)) { \ if (Z_REFCOUNTED_P(_zv)) { \ GC_DELREF(_arr); \ } \ ZVAL_ARR(_zv, zend_array_dup(_arr)); \ } \ } while (0) #define SEPARATE_ZVAL_IF_NOT_REF(zv) do { \ zval *__zv = (zv); \ if (Z_TYPE_P(__zv) == IS_ARRAY) { \ if (Z_REFCOUNT_P(__zv) > 1) { \ if (Z_REFCOUNTED_P(__zv)) { \ Z_DELREF_P(__zv); \ } \ ZVAL_ARR(__zv, zend_array_dup(Z_ARR_P(__zv)));\ } \ } \ } while (0) #define SEPARATE_ZVAL_NOREF(zv) do { \ zval *_zv = (zv); \ ZEND_ASSERT(Z_TYPE_P(_zv) != IS_REFERENCE); \ SEPARATE_ZVAL_IF_NOT_REF(_zv); \ } while (0) #define SEPARATE_ZVAL(zv) do { \ zval *_zv = (zv); \ if (Z_ISREF_P(_zv)) { \ zend_reference *_r = Z_REF_P(_zv); \ ZVAL_COPY_VALUE(_zv, &_r->val); \ if (GC_DELREF(_r) == 0) { \ efree_size(_r, sizeof(zend_reference)); \ } else if (Z_OPT_TYPE_P(_zv) == IS_ARRAY) { \ ZVAL_ARR(_zv, zend_array_dup(Z_ARR_P(_zv)));\ break; \ } else if (Z_OPT_REFCOUNTED_P(_zv)) { \ Z_ADDREF_P(_zv); \ break; \ } \ } \ SEPARATE_ZVAL_IF_NOT_REF(_zv); \ } while (0) #define SEPARATE_ARG_IF_REF(varptr) do { \ ZVAL_DEREF(varptr); \ if (Z_REFCOUNTED_P(varptr)) { \ Z_ADDREF_P(varptr); \ } \ } while (0) #endif /* ZEND_TYPES_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!tZend/zend_smart_string_public.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | | Xinchen Hui | +----------------------------------------------------------------------+ */ #ifndef PHP_SMART_STRING_PUBLIC_H #define PHP_SMART_STRING_PUBLIC_H #include typedef struct { char *c; size_t len; size_t a; } smart_string; #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!F,,Zend/zend_object_handlers.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_OBJECT_HANDLERS_H #define ZEND_OBJECT_HANDLERS_H struct _zend_property_info; #define ZEND_WRONG_PROPERTY_INFO \ ((struct _zend_property_info*)((intptr_t)-1)) #define ZEND_DYNAMIC_PROPERTY_OFFSET ((uintptr_t)(intptr_t)(-1)) #define IS_VALID_PROPERTY_OFFSET(offset) ((intptr_t)(offset) > 0) #define IS_WRONG_PROPERTY_OFFSET(offset) ((intptr_t)(offset) == 0) #define IS_DYNAMIC_PROPERTY_OFFSET(offset) ((intptr_t)(offset) < 0) #define IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(offset) (offset == ZEND_DYNAMIC_PROPERTY_OFFSET) #define ZEND_DECODE_DYN_PROP_OFFSET(offset) ((uintptr_t)(-(intptr_t)(offset) - 2)) #define ZEND_ENCODE_DYN_PROP_OFFSET(offset) ((uintptr_t)(-((intptr_t)(offset) + 2))) /* The following rule applies to read_property() and read_dimension() implementations: If you return a zval which is not otherwise referenced by the extension or the engine's symbol table, its reference count should be 0. */ /* Used to fetch property from the object, read-only */ typedef zval *(*zend_object_read_property_t)(zval *object, zval *member, int type, void **cache_slot, zval *rv); /* Used to fetch dimension from the object, read-only */ typedef zval *(*zend_object_read_dimension_t)(zval *object, zval *offset, int type, zval *rv); /* The following rule applies to write_property() and write_dimension() implementations: If you receive a value zval in write_property/write_dimension, you may only modify it if its reference count is 1. Otherwise, you must create a copy of that zval before making any changes. You should NOT modify the reference count of the value passed to you. */ /* Used to set property of the object */ typedef void (*zend_object_write_property_t)(zval *object, zval *member, zval *value, void **cache_slot); /* Used to set dimension of the object */ typedef void (*zend_object_write_dimension_t)(zval *object, zval *offset, zval *value); /* Used to create pointer to the property of the object, for future direct r/w access */ typedef zval *(*zend_object_get_property_ptr_ptr_t)(zval *object, zval *member, int type, void **cache_slot); /* Used to set object value. Can be used to override assignments and scalar write ops (like ++, +=) on the object */ typedef void (*zend_object_set_t)(zval *object, zval *value); /* Used to get object value. Can be used when converting object value to * one of the basic types and when using scalar ops (like ++, +=) on the object */ typedef zval* (*zend_object_get_t)(zval *object, zval *rv); /* Used to check if a property of the object exists */ /* param has_set_exists: * 0 (has) whether property exists and is not NULL * 1 (set) whether property exists and is true * 2 (exists) whether property exists */ typedef int (*zend_object_has_property_t)(zval *object, zval *member, int has_set_exists, void **cache_slot); /* Used to check if a dimension of the object exists */ typedef int (*zend_object_has_dimension_t)(zval *object, zval *member, int check_empty); /* Used to remove a property of the object */ typedef void (*zend_object_unset_property_t)(zval *object, zval *member, void **cache_slot); /* Used to remove a dimension of the object */ typedef void (*zend_object_unset_dimension_t)(zval *object, zval *offset); /* Used to get hash of the properties of the object, as hash of zval's */ typedef HashTable *(*zend_object_get_properties_t)(zval *object); typedef HashTable *(*zend_object_get_debug_info_t)(zval *object, int *is_temp); /* Used to call methods */ /* args on stack! */ /* Andi - EX(fbc) (function being called) needs to be initialized already in the INIT fcall opcode so that the parameters can be parsed the right way. We need to add another callback for this. */ typedef int (*zend_object_call_method_t)(zend_string *method, zend_object *object, INTERNAL_FUNCTION_PARAMETERS); typedef zend_function *(*zend_object_get_method_t)(zend_object **object, zend_string *method, const zval *key); typedef zend_function *(*zend_object_get_constructor_t)(zend_object *object); /* Object maintenance/destruction */ typedef void (*zend_object_dtor_obj_t)(zend_object *object); typedef void (*zend_object_free_obj_t)(zend_object *object); typedef zend_object* (*zend_object_clone_obj_t)(zval *object); /* Get class name for display in var_dump and other debugging functions. * Must be defined and must return a non-NULL value. */ typedef zend_string *(*zend_object_get_class_name_t)(const zend_object *object); typedef int (*zend_object_compare_t)(zval *object1, zval *object2); typedef int (*zend_object_compare_zvals_t)(zval *resul, zval *op1, zval *op2); /* Cast an object to some other type. * readobj and retval must point to distinct zvals. */ typedef int (*zend_object_cast_t)(zval *readobj, zval *retval, int type); /* updates *count to hold the number of elements present and returns SUCCESS. * Returns FAILURE if the object does not have any sense of overloaded dimensions */ typedef int (*zend_object_count_elements_t)(zval *object, zend_long *count); typedef int (*zend_object_get_closure_t)(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr); typedef HashTable *(*zend_object_get_gc_t)(zval *object, zval **table, int *n); typedef int (*zend_object_do_operation_t)(zend_uchar opcode, zval *result, zval *op1, zval *op2); struct _zend_object_handlers { /* offset of real object header (usually zero) */ int offset; /* general object functions */ zend_object_free_obj_t free_obj; zend_object_dtor_obj_t dtor_obj; zend_object_clone_obj_t clone_obj; /* individual object functions */ zend_object_read_property_t read_property; zend_object_write_property_t write_property; zend_object_read_dimension_t read_dimension; zend_object_write_dimension_t write_dimension; zend_object_get_property_ptr_ptr_t get_property_ptr_ptr; zend_object_get_t get; zend_object_set_t set; zend_object_has_property_t has_property; zend_object_unset_property_t unset_property; zend_object_has_dimension_t has_dimension; zend_object_unset_dimension_t unset_dimension; zend_object_get_properties_t get_properties; zend_object_get_method_t get_method; zend_object_call_method_t call_method; zend_object_get_constructor_t get_constructor; zend_object_get_class_name_t get_class_name; zend_object_compare_t compare_objects; zend_object_cast_t cast_object; zend_object_count_elements_t count_elements; zend_object_get_debug_info_t get_debug_info; zend_object_get_closure_t get_closure; zend_object_get_gc_t get_gc; zend_object_do_operation_t do_operation; zend_object_compare_zvals_t compare; }; BEGIN_EXTERN_C() extern const ZEND_API zend_object_handlers std_object_handlers; #define zend_get_std_object_handlers() \ (&std_object_handlers) #define zend_get_function_root_class(fbc) \ ((fbc)->common.prototype ? (fbc)->common.prototype->common.scope : (fbc)->common.scope) #define ZEND_PROPERTY_ISSET 0x0 /* Property exists and is not NULL */ #define ZEND_PROPERTY_NOT_EMPTY ZEND_ISEMPTY /* Property is not empty */ #define ZEND_PROPERTY_EXISTS 0x2 /* Property exists */ ZEND_API void zend_class_init_statics(zend_class_entry *ce); ZEND_API zend_function *zend_std_get_static_method(zend_class_entry *ce, zend_string *function_name_strval, const zval *key); ZEND_API zval *zend_std_get_static_property(zend_class_entry *ce, zend_string *property_name, zend_bool silent); ZEND_API ZEND_COLD zend_bool zend_std_unset_static_property(zend_class_entry *ce, zend_string *property_name); ZEND_API zend_function *zend_std_get_constructor(zend_object *object); ZEND_API struct _zend_property_info *zend_get_property_info(zend_class_entry *ce, zend_string *member, int silent); ZEND_API HashTable *zend_std_get_properties(zval *object); ZEND_API HashTable *zend_std_get_gc(zval *object, zval **table, int *n); ZEND_API HashTable *zend_std_get_debug_info(zval *object, int *is_temp); ZEND_API int zend_std_cast_object_tostring(zval *readobj, zval *writeobj, int type); ZEND_API zval *zend_std_get_property_ptr_ptr(zval *object, zval *member, int type, void **cache_slot); ZEND_API zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_slot, zval *rv); ZEND_API void zend_std_write_property(zval *object, zval *member, zval *value, void **cache_slot); ZEND_API int zend_std_has_property(zval *object, zval *member, int has_set_exists, void **cache_slot); ZEND_API void zend_std_unset_property(zval *object, zval *member, void **cache_slot); ZEND_API zval *zend_std_read_dimension(zval *object, zval *offset, int type, zval *rv); ZEND_API void zend_std_write_dimension(zval *object, zval *offset, zval *value); ZEND_API int zend_std_has_dimension(zval *object, zval *offset, int check_empty); ZEND_API void zend_std_unset_dimension(zval *object, zval *offset); ZEND_API zend_function *zend_std_get_method(zend_object **obj_ptr, zend_string *method_name, const zval *key); ZEND_API zend_string *zend_std_get_class_name(const zend_object *zobj); ZEND_API int zend_std_compare_objects(zval *o1, zval *o2); ZEND_API int zend_std_get_closure(zval *obj, zend_class_entry **ce_ptr, zend_function **fptr_ptr, zend_object **obj_ptr); ZEND_API void rebuild_object_properties(zend_object *zobj); ZEND_API int zend_check_private(zend_function *fbc, zend_class_entry *ce, zend_string *function_name); ZEND_API int zend_check_protected(zend_class_entry *ce, zend_class_entry *scope); ZEND_API int zend_check_property_access(zend_object *zobj, zend_string *prop_info_name); ZEND_API zend_function *zend_get_call_trampoline_func(zend_class_entry *ce, zend_string *method_name, int is_static); ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *member); #define zend_free_trampoline(func) do { \ if ((func) == &EG(trampoline)) { \ EG(trampoline).common.function_name = NULL; \ } else { \ efree(func); \ } \ } while (0) END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!m\r r Zend/zend_highlight.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_HIGHLIGHT_H #define ZEND_HIGHLIGHT_H #define HL_COMMENT_COLOR "#FF8000" /* orange */ #define HL_DEFAULT_COLOR "#0000BB" /* blue */ #define HL_HTML_COLOR "#000000" /* black */ #define HL_STRING_COLOR "#DD0000" /* red */ #define HL_KEYWORD_COLOR "#007700" /* green */ typedef struct _zend_syntax_highlighter_ini { char *highlight_html; char *highlight_comment; char *highlight_default; char *highlight_string; char *highlight_keyword; } zend_syntax_highlighter_ini; BEGIN_EXTERN_C() ZEND_API void zend_highlight(zend_syntax_highlighter_ini *syntax_highlighter_ini); ZEND_API void zend_strip(void); ZEND_API int highlight_file(char *filename, zend_syntax_highlighter_ini *syntax_highlighter_ini); ZEND_API int highlight_string(zval *str, zend_syntax_highlighter_ini *syntax_highlighter_ini, char *str_name); ZEND_API void zend_html_putc(char c); ZEND_API void zend_html_puts(const char *s, size_t len); END_EXTERN_C() extern zend_syntax_highlighter_ini syntax_highlighter_ini; #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!7o3o3Zend/zend_vm_opcodes.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_VM_OPCODES_H #define ZEND_VM_OPCODES_H #define ZEND_VM_SPEC 1 #define ZEND_VM_LINES 0 #define ZEND_VM_KIND_CALL 1 #define ZEND_VM_KIND_SWITCH 2 #define ZEND_VM_KIND_GOTO 3 #define ZEND_VM_KIND_HYBRID 4 /* HYBRID requires support for computed GOTO and global register variables*/ #if (defined(__GNUC__) && defined(HAVE_GCC_GLOBAL_REGS)) # define ZEND_VM_KIND ZEND_VM_KIND_HYBRID #else # define ZEND_VM_KIND ZEND_VM_KIND_CALL #endif #define ZEND_VM_OP_SPEC 0x00000001 #define ZEND_VM_OP_CONST 0x00000002 #define ZEND_VM_OP_TMPVAR 0x00000004 #define ZEND_VM_OP_TMPVARCV 0x00000008 #define ZEND_VM_OP_MASK 0x000000f0 #define ZEND_VM_OP_NUM 0x00000010 #define ZEND_VM_OP_JMP_ADDR 0x00000020 #define ZEND_VM_OP_TRY_CATCH 0x00000030 #define ZEND_VM_OP_THIS 0x00000050 #define ZEND_VM_OP_NEXT 0x00000060 #define ZEND_VM_OP_CLASS_FETCH 0x00000070 #define ZEND_VM_OP_CONSTRUCTOR 0x00000080 #define ZEND_VM_OP_CONST_FETCH 0x00000090 #define ZEND_VM_OP_CACHE_SLOT 0x000000a0 #define ZEND_VM_EXT_VAR_FETCH 0x00010000 #define ZEND_VM_EXT_ISSET 0x00020000 #define ZEND_VM_EXT_CACHE_SLOT 0x00040000 #define ZEND_VM_EXT_ARRAY_INIT 0x00080000 #define ZEND_VM_EXT_REF 0x00100000 #define ZEND_VM_EXT_MASK 0x0f000000 #define ZEND_VM_EXT_NUM 0x01000000 #define ZEND_VM_EXT_LAST_CATCH 0x02000000 #define ZEND_VM_EXT_JMP_ADDR 0x03000000 #define ZEND_VM_EXT_DIM_OBJ 0x04000000 #define ZEND_VM_EXT_TYPE 0x07000000 #define ZEND_VM_EXT_EVAL 0x08000000 #define ZEND_VM_EXT_TYPE_MASK 0x09000000 #define ZEND_VM_EXT_SRC 0x0b000000 #define ZEND_VM_NO_CONST_CONST 0x40000000 #define ZEND_VM_COMMUTATIVE 0x80000000 #define ZEND_VM_OP1_FLAGS(flags) (flags & 0xff) #define ZEND_VM_OP2_FLAGS(flags) ((flags >> 8) & 0xff) BEGIN_EXTERN_C() ZEND_API const char* ZEND_FASTCALL zend_get_opcode_name(zend_uchar opcode); ZEND_API uint32_t ZEND_FASTCALL zend_get_opcode_flags(zend_uchar opcode); END_EXTERN_C() #define ZEND_NOP 0 #define ZEND_ADD 1 #define ZEND_SUB 2 #define ZEND_MUL 3 #define ZEND_DIV 4 #define ZEND_MOD 5 #define ZEND_SL 6 #define ZEND_SR 7 #define ZEND_CONCAT 8 #define ZEND_BW_OR 9 #define ZEND_BW_AND 10 #define ZEND_BW_XOR 11 #define ZEND_BW_NOT 12 #define ZEND_BOOL_NOT 13 #define ZEND_BOOL_XOR 14 #define ZEND_IS_IDENTICAL 15 #define ZEND_IS_NOT_IDENTICAL 16 #define ZEND_IS_EQUAL 17 #define ZEND_IS_NOT_EQUAL 18 #define ZEND_IS_SMALLER 19 #define ZEND_IS_SMALLER_OR_EQUAL 20 #define ZEND_CAST 21 #define ZEND_QM_ASSIGN 22 #define ZEND_ASSIGN_ADD 23 #define ZEND_ASSIGN_SUB 24 #define ZEND_ASSIGN_MUL 25 #define ZEND_ASSIGN_DIV 26 #define ZEND_ASSIGN_MOD 27 #define ZEND_ASSIGN_SL 28 #define ZEND_ASSIGN_SR 29 #define ZEND_ASSIGN_CONCAT 30 #define ZEND_ASSIGN_BW_OR 31 #define ZEND_ASSIGN_BW_AND 32 #define ZEND_ASSIGN_BW_XOR 33 #define ZEND_PRE_INC 34 #define ZEND_PRE_DEC 35 #define ZEND_POST_INC 36 #define ZEND_POST_DEC 37 #define ZEND_ASSIGN 38 #define ZEND_ASSIGN_REF 39 #define ZEND_ECHO 40 #define ZEND_GENERATOR_CREATE 41 #define ZEND_JMP 42 #define ZEND_JMPZ 43 #define ZEND_JMPNZ 44 #define ZEND_JMPZNZ 45 #define ZEND_JMPZ_EX 46 #define ZEND_JMPNZ_EX 47 #define ZEND_CASE 48 #define ZEND_CHECK_VAR 49 #define ZEND_SEND_VAR_NO_REF_EX 50 #define ZEND_MAKE_REF 51 #define ZEND_BOOL 52 #define ZEND_FAST_CONCAT 53 #define ZEND_ROPE_INIT 54 #define ZEND_ROPE_ADD 55 #define ZEND_ROPE_END 56 #define ZEND_BEGIN_SILENCE 57 #define ZEND_END_SILENCE 58 #define ZEND_INIT_FCALL_BY_NAME 59 #define ZEND_DO_FCALL 60 #define ZEND_INIT_FCALL 61 #define ZEND_RETURN 62 #define ZEND_RECV 63 #define ZEND_RECV_INIT 64 #define ZEND_SEND_VAL 65 #define ZEND_SEND_VAR_EX 66 #define ZEND_SEND_REF 67 #define ZEND_NEW 68 #define ZEND_INIT_NS_FCALL_BY_NAME 69 #define ZEND_FREE 70 #define ZEND_INIT_ARRAY 71 #define ZEND_ADD_ARRAY_ELEMENT 72 #define ZEND_INCLUDE_OR_EVAL 73 #define ZEND_UNSET_VAR 74 #define ZEND_UNSET_DIM 75 #define ZEND_UNSET_OBJ 76 #define ZEND_FE_RESET_R 77 #define ZEND_FE_FETCH_R 78 #define ZEND_EXIT 79 #define ZEND_FETCH_R 80 #define ZEND_FETCH_DIM_R 81 #define ZEND_FETCH_OBJ_R 82 #define ZEND_FETCH_W 83 #define ZEND_FETCH_DIM_W 84 #define ZEND_FETCH_OBJ_W 85 #define ZEND_FETCH_RW 86 #define ZEND_FETCH_DIM_RW 87 #define ZEND_FETCH_OBJ_RW 88 #define ZEND_FETCH_IS 89 #define ZEND_FETCH_DIM_IS 90 #define ZEND_FETCH_OBJ_IS 91 #define ZEND_FETCH_FUNC_ARG 92 #define ZEND_FETCH_DIM_FUNC_ARG 93 #define ZEND_FETCH_OBJ_FUNC_ARG 94 #define ZEND_FETCH_UNSET 95 #define ZEND_FETCH_DIM_UNSET 96 #define ZEND_FETCH_OBJ_UNSET 97 #define ZEND_FETCH_LIST_R 98 #define ZEND_FETCH_CONSTANT 99 #define ZEND_CHECK_FUNC_ARG 100 #define ZEND_EXT_STMT 101 #define ZEND_EXT_FCALL_BEGIN 102 #define ZEND_EXT_FCALL_END 103 #define ZEND_EXT_NOP 104 #define ZEND_TICKS 105 #define ZEND_SEND_VAR_NO_REF 106 #define ZEND_CATCH 107 #define ZEND_THROW 108 #define ZEND_FETCH_CLASS 109 #define ZEND_CLONE 110 #define ZEND_RETURN_BY_REF 111 #define ZEND_INIT_METHOD_CALL 112 #define ZEND_INIT_STATIC_METHOD_CALL 113 #define ZEND_ISSET_ISEMPTY_VAR 114 #define ZEND_ISSET_ISEMPTY_DIM_OBJ 115 #define ZEND_SEND_VAL_EX 116 #define ZEND_SEND_VAR 117 #define ZEND_INIT_USER_CALL 118 #define ZEND_SEND_ARRAY 119 #define ZEND_SEND_USER 120 #define ZEND_STRLEN 121 #define ZEND_DEFINED 122 #define ZEND_TYPE_CHECK 123 #define ZEND_VERIFY_RETURN_TYPE 124 #define ZEND_FE_RESET_RW 125 #define ZEND_FE_FETCH_RW 126 #define ZEND_FE_FREE 127 #define ZEND_INIT_DYNAMIC_CALL 128 #define ZEND_DO_ICALL 129 #define ZEND_DO_UCALL 130 #define ZEND_DO_FCALL_BY_NAME 131 #define ZEND_PRE_INC_OBJ 132 #define ZEND_PRE_DEC_OBJ 133 #define ZEND_POST_INC_OBJ 134 #define ZEND_POST_DEC_OBJ 135 #define ZEND_ASSIGN_OBJ 136 #define ZEND_OP_DATA 137 #define ZEND_INSTANCEOF 138 #define ZEND_DECLARE_CLASS 139 #define ZEND_DECLARE_INHERITED_CLASS 140 #define ZEND_DECLARE_FUNCTION 141 #define ZEND_YIELD_FROM 142 #define ZEND_DECLARE_CONST 143 #define ZEND_ADD_INTERFACE 144 #define ZEND_DECLARE_INHERITED_CLASS_DELAYED 145 #define ZEND_VERIFY_ABSTRACT_CLASS 146 #define ZEND_ASSIGN_DIM 147 #define ZEND_ISSET_ISEMPTY_PROP_OBJ 148 #define ZEND_HANDLE_EXCEPTION 149 #define ZEND_USER_OPCODE 150 #define ZEND_ASSERT_CHECK 151 #define ZEND_JMP_SET 152 #define ZEND_DECLARE_LAMBDA_FUNCTION 153 #define ZEND_ADD_TRAIT 154 #define ZEND_BIND_TRAITS 155 #define ZEND_SEPARATE 156 #define ZEND_FETCH_CLASS_NAME 157 #define ZEND_CALL_TRAMPOLINE 158 #define ZEND_DISCARD_EXCEPTION 159 #define ZEND_YIELD 160 #define ZEND_GENERATOR_RETURN 161 #define ZEND_FAST_CALL 162 #define ZEND_FAST_RET 163 #define ZEND_RECV_VARIADIC 164 #define ZEND_SEND_UNPACK 165 #define ZEND_POW 166 #define ZEND_ASSIGN_POW 167 #define ZEND_BIND_GLOBAL 168 #define ZEND_COALESCE 169 #define ZEND_SPACESHIP 170 #define ZEND_DECLARE_ANON_CLASS 171 #define ZEND_DECLARE_ANON_INHERITED_CLASS 172 #define ZEND_FETCH_STATIC_PROP_R 173 #define ZEND_FETCH_STATIC_PROP_W 174 #define ZEND_FETCH_STATIC_PROP_RW 175 #define ZEND_FETCH_STATIC_PROP_IS 176 #define ZEND_FETCH_STATIC_PROP_FUNC_ARG 177 #define ZEND_FETCH_STATIC_PROP_UNSET 178 #define ZEND_UNSET_STATIC_PROP 179 #define ZEND_ISSET_ISEMPTY_STATIC_PROP 180 #define ZEND_FETCH_CLASS_CONSTANT 181 #define ZEND_BIND_LEXICAL 182 #define ZEND_BIND_STATIC 183 #define ZEND_FETCH_THIS 184 #define ZEND_SEND_FUNC_ARG 185 #define ZEND_ISSET_ISEMPTY_THIS 186 #define ZEND_SWITCH_LONG 187 #define ZEND_SWITCH_STRING 188 #define ZEND_IN_ARRAY 189 #define ZEND_COUNT 190 #define ZEND_GET_CLASS 191 #define ZEND_GET_CALLED_CLASS 192 #define ZEND_GET_TYPE 193 #define ZEND_FUNC_NUM_ARGS 194 #define ZEND_FUNC_GET_ARGS 195 #define ZEND_UNSET_CV 196 #define ZEND_ISSET_ISEMPTY_CV 197 #define ZEND_FETCH_LIST_W 198 #define ZEND_VM_LAST_OPCODE 198 #endif PK!]6@6@Zend/zend_string.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_STRING_H #define ZEND_STRING_H #include "zend.h" BEGIN_EXTERN_C() typedef void (*zend_string_copy_storage_func_t)(void); typedef zend_string *(ZEND_FASTCALL *zend_new_interned_string_func_t)(zend_string *str); typedef zend_string *(ZEND_FASTCALL *zend_string_init_interned_func_t)(const char *str, size_t size, int permanent); ZEND_API extern zend_new_interned_string_func_t zend_new_interned_string; ZEND_API extern zend_string_init_interned_func_t zend_string_init_interned; ZEND_API zend_ulong ZEND_FASTCALL zend_string_hash_func(zend_string *str); ZEND_API zend_ulong ZEND_FASTCALL zend_hash_func(const char *str, size_t len); ZEND_API zend_string* ZEND_FASTCALL zend_interned_string_find_permanent(zend_string *str); ZEND_API void zend_interned_strings_init(void); ZEND_API void zend_interned_strings_dtor(void); ZEND_API void zend_interned_strings_activate(void); ZEND_API void zend_interned_strings_deactivate(void); ZEND_API void zend_interned_strings_set_request_storage_handlers(zend_new_interned_string_func_t handler, zend_string_init_interned_func_t init_handler); ZEND_API void zend_interned_strings_set_permanent_storage_copy_handlers(zend_string_copy_storage_func_t copy_handler, zend_string_copy_storage_func_t restore_handler); ZEND_API void zend_interned_strings_switch_storage(zend_bool request); ZEND_API zend_string *zend_string_concat3( const char *str1, size_t str1_len, const char *str2, size_t str2_len, const char *str3, size_t str3_len); ZEND_API extern zend_string *zend_empty_string; ZEND_API extern zend_string *zend_one_char_string[256]; ZEND_API extern zend_string **zend_known_strings; END_EXTERN_C() /* Shortcuts */ #define ZSTR_VAL(zstr) (zstr)->val #define ZSTR_LEN(zstr) (zstr)->len #define ZSTR_MAX_OVERHEAD (ZEND_MM_ALIGNED_SIZE(_ZSTR_HEADER_SIZE + 1)) #define ZSTR_MAX_LEN (SIZE_MAX - ZSTR_MAX_OVERHEAD) #define ZSTR_H(zstr) (zstr)->h #define ZSTR_HASH(zstr) zend_string_hash_val(zstr) /* Compatibility macros */ #define IS_INTERNED(s) ZSTR_IS_INTERNED(s) #define STR_EMPTY_ALLOC() ZSTR_EMPTY_ALLOC() #define _STR_HEADER_SIZE _ZSTR_HEADER_SIZE #define STR_ALLOCA_ALLOC(str, _len, use_heap) ZSTR_ALLOCA_ALLOC(str, _len, use_heap) #define STR_ALLOCA_INIT(str, s, len, use_heap) ZSTR_ALLOCA_INIT(str, s, len, use_heap) #define STR_ALLOCA_FREE(str, use_heap) ZSTR_ALLOCA_FREE(str, use_heap) /*---*/ #define ZSTR_IS_INTERNED(s) (GC_FLAGS(s) & IS_STR_INTERNED) #define ZSTR_EMPTY_ALLOC() zend_empty_string #define ZSTR_CHAR(c) zend_one_char_string[c] #define ZSTR_KNOWN(idx) zend_known_strings[idx] #define _ZSTR_HEADER_SIZE XtOffsetOf(zend_string, val) #define _ZSTR_STRUCT_SIZE(len) (_ZSTR_HEADER_SIZE + len + 1) #define ZSTR_ALLOCA_ALLOC(str, _len, use_heap) do { \ (str) = (zend_string *)do_alloca(ZEND_MM_ALIGNED_SIZE_EX(_ZSTR_STRUCT_SIZE(_len), 8), (use_heap)); \ GC_SET_REFCOUNT(str, 1); \ GC_TYPE_INFO(str) = IS_STRING; \ zend_string_forget_hash_val(str); \ ZSTR_LEN(str) = _len; \ } while (0) #define ZSTR_ALLOCA_INIT(str, s, len, use_heap) do { \ ZSTR_ALLOCA_ALLOC(str, len, use_heap); \ memcpy(ZSTR_VAL(str), (s), (len)); \ ZSTR_VAL(str)[(len)] = '\0'; \ } while (0) #define ZSTR_ALLOCA_FREE(str, use_heap) free_alloca(str, use_heap) #define ZSTR_INIT_LITERAL(s, persistent) (zend_string_init((s), strlen(s), (persistent))) /*---*/ static zend_always_inline zend_ulong zend_string_hash_val(zend_string *s) { return ZSTR_H(s) ? ZSTR_H(s) : zend_string_hash_func(s); } static zend_always_inline void zend_string_forget_hash_val(zend_string *s) { ZSTR_H(s) = 0; } static zend_always_inline uint32_t zend_string_refcount(const zend_string *s) { if (!ZSTR_IS_INTERNED(s)) { return GC_REFCOUNT(s); } return 1; } static zend_always_inline uint32_t zend_string_addref(zend_string *s) { if (!ZSTR_IS_INTERNED(s)) { return GC_ADDREF(s); } return 1; } static zend_always_inline uint32_t zend_string_delref(zend_string *s) { if (!ZSTR_IS_INTERNED(s)) { return GC_DELREF(s); } return 1; } static zend_always_inline zend_string *zend_string_alloc(size_t len, int persistent) { zend_string *ret = (zend_string *)pemalloc(ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent); GC_SET_REFCOUNT(ret, 1); GC_TYPE_INFO(ret) = IS_STRING | ((persistent ? IS_STR_PERSISTENT : 0) << GC_FLAGS_SHIFT); zend_string_forget_hash_val(ret); ZSTR_LEN(ret) = len; return ret; } static zend_always_inline zend_string *zend_string_safe_alloc(size_t n, size_t m, size_t l, int persistent) { zend_string *ret = (zend_string *)safe_pemalloc(n, m, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(l)), persistent); GC_SET_REFCOUNT(ret, 1); GC_TYPE_INFO(ret) = IS_STRING | ((persistent ? IS_STR_PERSISTENT : 0) << GC_FLAGS_SHIFT); zend_string_forget_hash_val(ret); ZSTR_LEN(ret) = (n * m) + l; return ret; } static zend_always_inline zend_string *zend_string_init(const char *str, size_t len, int persistent) { zend_string *ret = zend_string_alloc(len, persistent); memcpy(ZSTR_VAL(ret), str, len); ZSTR_VAL(ret)[len] = '\0'; return ret; } static zend_always_inline zend_string *zend_string_copy(zend_string *s) { if (!ZSTR_IS_INTERNED(s)) { GC_ADDREF(s); } return s; } static zend_always_inline zend_string *zend_string_dup(zend_string *s, int persistent) { if (ZSTR_IS_INTERNED(s)) { return s; } else { return zend_string_init(ZSTR_VAL(s), ZSTR_LEN(s), persistent); } } static zend_always_inline zend_string *zend_string_realloc(zend_string *s, size_t len, int persistent) { zend_string *ret; if (!ZSTR_IS_INTERNED(s)) { if (EXPECTED(GC_REFCOUNT(s) == 1)) { ret = (zend_string *)perealloc(s, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent); ZSTR_LEN(ret) = len; zend_string_forget_hash_val(ret); return ret; } } ret = zend_string_alloc(len, persistent); memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), MIN(len, ZSTR_LEN(s)) + 1); if (!ZSTR_IS_INTERNED(s)) { GC_DELREF(s); } return ret; } static zend_always_inline zend_string *zend_string_extend(zend_string *s, size_t len, int persistent) { zend_string *ret; ZEND_ASSERT(len >= ZSTR_LEN(s)); if (!ZSTR_IS_INTERNED(s)) { if (EXPECTED(GC_REFCOUNT(s) == 1)) { ret = (zend_string *)perealloc(s, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent); ZSTR_LEN(ret) = len; zend_string_forget_hash_val(ret); return ret; } } ret = zend_string_alloc(len, persistent); memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), ZSTR_LEN(s) + 1); if (!ZSTR_IS_INTERNED(s)) { GC_DELREF(s); } return ret; } static zend_always_inline zend_string *zend_string_truncate(zend_string *s, size_t len, int persistent) { zend_string *ret; ZEND_ASSERT(len <= ZSTR_LEN(s)); if (!ZSTR_IS_INTERNED(s)) { if (EXPECTED(GC_REFCOUNT(s) == 1)) { ret = (zend_string *)perealloc(s, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(len)), persistent); ZSTR_LEN(ret) = len; zend_string_forget_hash_val(ret); return ret; } } ret = zend_string_alloc(len, persistent); memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), len + 1); if (!ZSTR_IS_INTERNED(s)) { GC_DELREF(s); } return ret; } static zend_always_inline zend_string *zend_string_safe_realloc(zend_string *s, size_t n, size_t m, size_t l, int persistent) { zend_string *ret; if (!ZSTR_IS_INTERNED(s)) { if (GC_REFCOUNT(s) == 1) { ret = (zend_string *)safe_perealloc(s, n, m, ZEND_MM_ALIGNED_SIZE(_ZSTR_STRUCT_SIZE(l)), persistent); ZSTR_LEN(ret) = (n * m) + l; zend_string_forget_hash_val(ret); return ret; } } ret = zend_string_safe_alloc(n, m, l, persistent); memcpy(ZSTR_VAL(ret), ZSTR_VAL(s), MIN((n * m) + l, ZSTR_LEN(s)) + 1); if (!ZSTR_IS_INTERNED(s)) { GC_DELREF(s); } return ret; } static zend_always_inline void zend_string_free(zend_string *s) { if (!ZSTR_IS_INTERNED(s)) { ZEND_ASSERT(GC_REFCOUNT(s) <= 1); pefree(s, GC_FLAGS(s) & IS_STR_PERSISTENT); } } static zend_always_inline void zend_string_efree(zend_string *s) { ZEND_ASSERT(!ZSTR_IS_INTERNED(s)); ZEND_ASSERT(GC_REFCOUNT(s) <= 1); ZEND_ASSERT(!(GC_FLAGS(s) & IS_STR_PERSISTENT)); efree(s); } static zend_always_inline void zend_string_release(zend_string *s) { if (!ZSTR_IS_INTERNED(s)) { if (GC_DELREF(s) == 0) { pefree(s, GC_FLAGS(s) & IS_STR_PERSISTENT); } } } static zend_always_inline void zend_string_release_ex(zend_string *s, int persistent) { if (!ZSTR_IS_INTERNED(s)) { if (GC_DELREF(s) == 0) { if (persistent) { ZEND_ASSERT(GC_FLAGS(s) & IS_STR_PERSISTENT); free(s); } else { ZEND_ASSERT(!(GC_FLAGS(s) & IS_STR_PERSISTENT)); efree(s); } } } } #if defined(__GNUC__) && (defined(__i386__) || (defined(__x86_64__) && !defined(__ILP32__))) BEGIN_EXTERN_C() ZEND_API zend_bool ZEND_FASTCALL zend_string_equal_val(zend_string *s1, zend_string *s2); END_EXTERN_C() #else static zend_always_inline zend_bool zend_string_equal_val(zend_string *s1, zend_string *s2) { return !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1)); } #endif static zend_always_inline zend_bool zend_string_equal_content(zend_string *s1, zend_string *s2) { return ZSTR_LEN(s1) == ZSTR_LEN(s2) && zend_string_equal_val(s1, s2); } static zend_always_inline zend_bool zend_string_equals(zend_string *s1, zend_string *s2) { return s1 == s2 || zend_string_equal_content(s1, s2); } #define zend_string_equals_ci(s1, s2) \ (ZSTR_LEN(s1) == ZSTR_LEN(s2) && !zend_binary_strcasecmp(ZSTR_VAL(s1), ZSTR_LEN(s1), ZSTR_VAL(s2), ZSTR_LEN(s2))) #define zend_string_equals_literal_ci(str, c) \ (ZSTR_LEN(str) == sizeof(c) - 1 && !zend_binary_strcasecmp(ZSTR_VAL(str), ZSTR_LEN(str), (c), sizeof(c) - 1)) #define zend_string_equals_literal(str, literal) \ (ZSTR_LEN(str) == sizeof(literal)-1 && !memcmp(ZSTR_VAL(str), literal, sizeof(literal) - 1)) /* * DJBX33A (Daniel J. Bernstein, Times 33 with Addition) * * This is Daniel J. Bernstein's popular `times 33' hash function as * posted by him years ago on comp.lang.c. It basically uses a function * like ``hash(i) = hash(i-1) * 33 + str[i]''. This is one of the best * known hash functions for strings. Because it is both computed very * fast and distributes very well. * * The magic of number 33, i.e. why it works better than many other * constants, prime or not, has never been adequately explained by * anyone. So I try an explanation: if one experimentally tests all * multipliers between 1 and 256 (as RSE did now) one detects that even * numbers are not useable at all. The remaining 128 odd numbers * (except for the number 1) work more or less all equally well. They * all distribute in an acceptable way and this way fill a hash table * with an average percent of approx. 86%. * * If one compares the Chi^2 values of the variants, the number 33 not * even has the best value. But the number 33 and a few other equally * good numbers like 17, 31, 63, 127 and 129 have nevertheless a great * advantage to the remaining numbers in the large set of possible * multipliers: their multiply operation can be replaced by a faster * operation based on just one shift plus either a single addition * or subtraction operation. And because a hash function has to both * distribute good _and_ has to be very fast to compute, those few * numbers should be preferred and seems to be the reason why Daniel J. * Bernstein also preferred it. * * * -- Ralf S. Engelschall */ static zend_always_inline zend_ulong zend_inline_hash_func(const char *str, size_t len) { zend_ulong hash = Z_UL(5381); /* variant with the hash unrolled eight times */ for (; len >= 8; len -= 8) { hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; hash = ((hash << 5) + hash) + *str++; } switch (len) { case 7: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 6: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 5: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 4: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 3: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 2: hash = ((hash << 5) + hash) + *str++; /* fallthrough... */ case 1: hash = ((hash << 5) + hash) + *str++; break; case 0: break; EMPTY_SWITCH_DEFAULT_CASE() } /* Hash value can't be zero, so we always set the high bit */ #if SIZEOF_ZEND_LONG == 8 return hash | Z_UL(0x8000000000000000); #elif SIZEOF_ZEND_LONG == 4 return hash | Z_UL(0x80000000); #else # error "Unknown SIZEOF_ZEND_LONG" #endif } #define ZEND_KNOWN_STRINGS(_) \ _(ZEND_STR_FILE, "file") \ _(ZEND_STR_LINE, "line") \ _(ZEND_STR_FUNCTION, "function") \ _(ZEND_STR_CLASS, "class") \ _(ZEND_STR_OBJECT, "object") \ _(ZEND_STR_TYPE, "type") \ _(ZEND_STR_OBJECT_OPERATOR, "->") \ _(ZEND_STR_PAAMAYIM_NEKUDOTAYIM, "::") \ _(ZEND_STR_ARGS, "args") \ _(ZEND_STR_UNKNOWN, "unknown") \ _(ZEND_STR_EVAL, "eval") \ _(ZEND_STR_INCLUDE, "include") \ _(ZEND_STR_REQUIRE, "require") \ _(ZEND_STR_INCLUDE_ONCE, "include_once") \ _(ZEND_STR_REQUIRE_ONCE, "require_once") \ _(ZEND_STR_SCALAR, "scalar") \ _(ZEND_STR_ERROR_REPORTING, "error_reporting") \ _(ZEND_STR_STATIC, "static") \ _(ZEND_STR_THIS, "this") \ _(ZEND_STR_VALUE, "value") \ _(ZEND_STR_KEY, "key") \ _(ZEND_STR_MAGIC_AUTOLOAD, "__autoload") \ _(ZEND_STR_MAGIC_INVOKE, "__invoke") \ _(ZEND_STR_PREVIOUS, "previous") \ _(ZEND_STR_CODE, "code") \ _(ZEND_STR_MESSAGE, "message") \ _(ZEND_STR_SEVERITY, "severity") \ _(ZEND_STR_STRING, "string") \ _(ZEND_STR_TRACE, "trace") \ _(ZEND_STR_SCHEME, "scheme") \ _(ZEND_STR_HOST, "host") \ _(ZEND_STR_PORT, "port") \ _(ZEND_STR_USER, "user") \ _(ZEND_STR_PASS, "pass") \ _(ZEND_STR_PATH, "path") \ _(ZEND_STR_QUERY, "query") \ _(ZEND_STR_FRAGMENT, "fragment") \ _(ZEND_STR_NULL, "NULL") \ _(ZEND_STR_BOOLEAN, "boolean") \ _(ZEND_STR_INTEGER, "integer") \ _(ZEND_STR_DOUBLE, "double") \ _(ZEND_STR_ARRAY, "array") \ _(ZEND_STR_RESOURCE, "resource") \ _(ZEND_STR_CLOSED_RESOURCE, "resource (closed)") \ _(ZEND_STR_NAME, "name") \ _(ZEND_STR_ARGV, "argv") \ _(ZEND_STR_ARGC, "argc") \ typedef enum _zend_known_string_id { #define _ZEND_STR_ID(id, str) id, ZEND_KNOWN_STRINGS(_ZEND_STR_ID) #undef _ZEND_STR_ID ZEND_STR_LAST_KNOWN } zend_known_string_id; #endif /* ZEND_STRING_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!hzzZend/zend_operators.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_OPERATORS_H #define ZEND_OPERATORS_H #include #include #include #ifdef __GNUC__ #include #endif #ifdef HAVE_IEEEFP_H #include #endif #include "zend_portability.h" #include "zend_strtod.h" #include "zend_multiply.h" #include "zend_object_handlers.h" #define LONG_SIGN_MASK (((zend_long)1) << (8*sizeof(zend_long)-1)) BEGIN_EXTERN_C() ZEND_API int ZEND_FASTCALL add_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL sub_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL mul_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL pow_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL div_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL mod_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL boolean_xor_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL boolean_not_function(zval *result, zval *op1); ZEND_API int ZEND_FASTCALL bitwise_not_function(zval *result, zval *op1); ZEND_API int ZEND_FASTCALL bitwise_or_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL bitwise_and_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL bitwise_xor_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL shift_left_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL shift_right_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL concat_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL zend_is_identical(zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_equal_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_identical_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_not_identical_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_not_equal_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_smaller_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL is_smaller_or_equal_function(zval *result, zval *op1, zval *op2); ZEND_API zend_bool ZEND_FASTCALL instanceof_function_ex(const zend_class_entry *instance_ce, const zend_class_entry *ce, zend_bool interfaces_only); ZEND_API zend_bool ZEND_FASTCALL instanceof_function(const zend_class_entry *instance_ce, const zend_class_entry *ce); /** * Checks whether the string "str" with length "length" is numeric. The value * of allow_errors determines whether it's required to be entirely numeric, or * just its prefix. Leading whitespace is allowed. * * The function returns 0 if the string did not contain a valid number; IS_LONG * if it contained a number that fits within the range of a long; or IS_DOUBLE * if the number was out of long range or contained a decimal point/exponent. * The number's value is returned into the respective pointer, *lval or *dval, * if that pointer is not NULL. * * This variant also gives information if a string that represents an integer * could not be represented as such due to overflow. It writes 1 to oflow_info * if the integer is larger than ZEND_LONG_MAX and -1 if it's smaller than ZEND_LONG_MIN. */ ZEND_API zend_uchar ZEND_FASTCALL _is_numeric_string_ex(const char *str, size_t length, zend_long *lval, double *dval, int allow_errors, int *oflow_info); ZEND_API const char* ZEND_FASTCALL zend_memnstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end); ZEND_API const char* ZEND_FASTCALL zend_memnrstr_ex(const char *haystack, const char *needle, size_t needle_len, const char *end); #if SIZEOF_ZEND_LONG == 4 # define ZEND_DOUBLE_FITS_LONG(d) (!((d) > (double)ZEND_LONG_MAX || (d) < (double)ZEND_LONG_MIN)) #else /* >= as (double)ZEND_LONG_MAX is outside signed range */ # define ZEND_DOUBLE_FITS_LONG(d) (!((d) >= (double)ZEND_LONG_MAX || (d) < (double)ZEND_LONG_MIN)) #endif #if ZEND_DVAL_TO_LVAL_CAST_OK static zend_always_inline zend_long zend_dval_to_lval(double d) { if (EXPECTED(zend_finite(d)) && EXPECTED(!zend_isnan(d))) { return (zend_long)d; } else { return 0; } } #else ZEND_API zend_long ZEND_FASTCALL zend_dval_to_lval_slow(double d); static zend_always_inline zend_long zend_dval_to_lval(double d) { if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) { return 0; } else if (!ZEND_DOUBLE_FITS_LONG(d)) { return zend_dval_to_lval_slow(d); } return (zend_long)d; } #endif static zend_always_inline zend_long zend_dval_to_lval_cap(double d) { if (UNEXPECTED(!zend_finite(d)) || UNEXPECTED(zend_isnan(d))) { return 0; } else if (!ZEND_DOUBLE_FITS_LONG(d)) { return (d > 0 ? ZEND_LONG_MAX : ZEND_LONG_MIN); } return (zend_long)d; } /* }}} */ #define ZEND_IS_DIGIT(c) ((c) >= '0' && (c) <= '9') #define ZEND_IS_XDIGIT(c) (((c) >= 'A' && (c) <= 'F') || ((c) >= 'a' && (c) <= 'f')) static zend_always_inline zend_uchar is_numeric_string_ex(const char *str, size_t length, zend_long *lval, double *dval, int allow_errors, int *oflow_info) { if (*str > '9') { return 0; } return _is_numeric_string_ex(str, length, lval, dval, allow_errors, oflow_info); } static zend_always_inline zend_uchar is_numeric_string(const char *str, size_t length, zend_long *lval, double *dval, int allow_errors) { return is_numeric_string_ex(str, length, lval, dval, allow_errors, NULL); } ZEND_API zend_uchar ZEND_FASTCALL is_numeric_str_function(const zend_string *str, zend_long *lval, double *dval); static zend_always_inline const char * zend_memnstr(const char *haystack, const char *needle, size_t needle_len, const char *end) { const char *p = haystack; const char ne = needle[needle_len-1]; ptrdiff_t off_p; size_t off_s; if (needle_len == 1) { return (const char *)memchr(p, *needle, (end-p)); } off_p = end - haystack; off_s = (off_p > 0) ? (size_t)off_p : 0; if (needle_len > off_s) { return NULL; } if (EXPECTED(off_s < 1024 || needle_len < 9)) { /* glibc memchr is faster when needle is too short */ end -= needle_len; while (p <= end) { if ((p = (const char *)memchr(p, *needle, (end-p+1))) && ne == p[needle_len-1]) { if (!memcmp(needle+1, p+1, needle_len-2)) { return p; } } if (p == NULL) { return NULL; } p++; } return NULL; } else { return zend_memnstr_ex(haystack, needle, needle_len, end); } } static zend_always_inline const void *zend_memrchr(const void *s, int c, size_t n) { const unsigned char *e; if (0 == n) { return NULL; } for (e = (const unsigned char *)s + n - 1; e >= (const unsigned char *)s; e--) { if (*e == (const unsigned char)c) { return (const void *)e; } } return NULL; } static zend_always_inline const char * zend_memnrstr(const char *haystack, const char *needle, size_t needle_len, const char *end) { const char *p = end; const char ne = needle[needle_len-1]; ptrdiff_t off_p; size_t off_s; if (needle_len == 1) { return (const char *)zend_memrchr(haystack, *needle, (p - haystack)); } off_p = end - haystack; off_s = (off_p > 0) ? (size_t)off_p : 0; if (needle_len > off_s) { return NULL; } if (EXPECTED(off_s < 1024 || needle_len < 3)) { p -= needle_len; do { if ((p = (const char *)zend_memrchr(haystack, *needle, (p - haystack) + 1)) && ne == p[needle_len-1]) { if (!memcmp(needle + 1, p + 1, needle_len - 2)) { return p; } } } while (p-- >= haystack); return NULL; } else { return zend_memnrstr_ex(haystack, needle, needle_len, end); } } ZEND_API int ZEND_FASTCALL increment_function(zval *op1); ZEND_API int ZEND_FASTCALL decrement_function(zval *op2); ZEND_API void ZEND_FASTCALL convert_scalar_to_number(zval *op); ZEND_API void ZEND_FASTCALL _convert_to_cstring(zval *op); ZEND_API void ZEND_FASTCALL _convert_to_string(zval *op); ZEND_API void ZEND_FASTCALL convert_to_long(zval *op); ZEND_API void ZEND_FASTCALL convert_to_double(zval *op); ZEND_API void ZEND_FASTCALL convert_to_long_base(zval *op, int base); ZEND_API void ZEND_FASTCALL convert_to_null(zval *op); ZEND_API void ZEND_FASTCALL convert_to_boolean(zval *op); ZEND_API void ZEND_FASTCALL convert_to_array(zval *op); ZEND_API void ZEND_FASTCALL convert_to_object(zval *op); ZEND_API void multi_convert_to_long_ex(int argc, ...); ZEND_API void multi_convert_to_double_ex(int argc, ...); ZEND_API void multi_convert_to_string_ex(int argc, ...); ZEND_API zend_long ZEND_FASTCALL zval_get_long_func(zval *op); ZEND_API double ZEND_FASTCALL zval_get_double_func(zval *op); ZEND_API zend_string* ZEND_FASTCALL zval_get_string_func(zval *op); static zend_always_inline zend_long zval_get_long(zval *op) { return EXPECTED(Z_TYPE_P(op) == IS_LONG) ? Z_LVAL_P(op) : zval_get_long_func(op); } static zend_always_inline double zval_get_double(zval *op) { return EXPECTED(Z_TYPE_P(op) == IS_DOUBLE) ? Z_DVAL_P(op) : zval_get_double_func(op); } static zend_always_inline zend_string *zval_get_string(zval *op) { return EXPECTED(Z_TYPE_P(op) == IS_STRING) ? zend_string_copy(Z_STR_P(op)) : zval_get_string_func(op); } static zend_always_inline zend_string *zval_get_tmp_string(zval *op, zend_string **tmp) { if (EXPECTED(Z_TYPE_P(op) == IS_STRING)) { *tmp = NULL; return Z_STR_P(op); } else { return *tmp = zval_get_string_func(op); } } static zend_always_inline void zend_tmp_string_release(zend_string *tmp) { if (UNEXPECTED(tmp)) { zend_string_release_ex(tmp, 0); } } /* Compatibility macros for 7.2 and below */ #define _zval_get_long(op) zval_get_long(op) #define _zval_get_double(op) zval_get_double(op) #define _zval_get_string(op) zval_get_string(op) #define _zval_get_long_func(op) zval_get_long_func(op) #define _zval_get_double_func(op) zval_get_double_func(op) #define _zval_get_string_func(op) zval_get_string_func(op) #define convert_to_cstring(op) if (Z_TYPE_P(op) != IS_STRING) { _convert_to_cstring((op)); } #define convert_to_string(op) if (Z_TYPE_P(op) != IS_STRING) { _convert_to_string((op)); } ZEND_API int ZEND_FASTCALL zend_is_true(zval *op); ZEND_API int ZEND_FASTCALL zend_object_is_true(zval *op); #define zval_is_true(op) \ zend_is_true(op) static zend_always_inline int i_zend_is_true(zval *op) { int result = 0; again: switch (Z_TYPE_P(op)) { case IS_TRUE: result = 1; break; case IS_LONG: if (Z_LVAL_P(op)) { result = 1; } break; case IS_DOUBLE: if (Z_DVAL_P(op)) { result = 1; } break; case IS_STRING: if (Z_STRLEN_P(op) > 1 || (Z_STRLEN_P(op) && Z_STRVAL_P(op)[0] != '0')) { result = 1; } break; case IS_ARRAY: if (zend_hash_num_elements(Z_ARRVAL_P(op))) { result = 1; } break; case IS_OBJECT: if (EXPECTED(Z_OBJ_HT_P(op)->cast_object == zend_std_cast_object_tostring)) { result = 1; } else { result = zend_object_is_true(op); } break; case IS_RESOURCE: if (EXPECTED(Z_RES_HANDLE_P(op))) { result = 1; } break; case IS_REFERENCE: op = Z_REFVAL_P(op); goto again; break; default: break; } return result; } ZEND_API int ZEND_FASTCALL compare_function(zval *result, zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL numeric_compare_function(zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL string_compare_function_ex(zval *op1, zval *op2, zend_bool case_insensitive); ZEND_API int ZEND_FASTCALL string_compare_function(zval *op1, zval *op2); ZEND_API int ZEND_FASTCALL string_case_compare_function(zval *op1, zval *op2); #if HAVE_STRCOLL ZEND_API int ZEND_FASTCALL string_locale_compare_function(zval *op1, zval *op2); #endif ZEND_API void ZEND_FASTCALL zend_str_tolower(char *str, size_t length); ZEND_API char* ZEND_FASTCALL zend_str_tolower_copy(char *dest, const char *source, size_t length); ZEND_API char* ZEND_FASTCALL zend_str_tolower_dup(const char *source, size_t length); ZEND_API char* ZEND_FASTCALL zend_str_tolower_dup_ex(const char *source, size_t length); ZEND_API zend_string* ZEND_FASTCALL zend_string_tolower_ex(zend_string *str, int persistent); #define zend_string_tolower(str) zend_string_tolower_ex(str, 0) ZEND_API int ZEND_FASTCALL zend_binary_zval_strcmp(zval *s1, zval *s2); ZEND_API int ZEND_FASTCALL zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3); ZEND_API int ZEND_FASTCALL zend_binary_zval_strcasecmp(zval *s1, zval *s2); ZEND_API int ZEND_FASTCALL zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3); ZEND_API int ZEND_FASTCALL zend_binary_strcmp(const char *s1, size_t len1, const char *s2, size_t len2); ZEND_API int ZEND_FASTCALL zend_binary_strncmp(const char *s1, size_t len1, const char *s2, size_t len2, size_t length); ZEND_API int ZEND_FASTCALL zend_binary_strcasecmp(const char *s1, size_t len1, const char *s2, size_t len2); ZEND_API int ZEND_FASTCALL zend_binary_strncasecmp(const char *s1, size_t len1, const char *s2, size_t len2, size_t length); ZEND_API int ZEND_FASTCALL zend_binary_strcasecmp_l(const char *s1, size_t len1, const char *s2, size_t len2); ZEND_API int ZEND_FASTCALL zend_binary_strncasecmp_l(const char *s1, size_t len1, const char *s2, size_t len2, size_t length); ZEND_API int ZEND_FASTCALL zendi_smart_streq(zend_string *s1, zend_string *s2); ZEND_API int ZEND_FASTCALL zendi_smart_strcmp(zend_string *s1, zend_string *s2); ZEND_API int ZEND_FASTCALL zend_compare_symbol_tables(HashTable *ht1, HashTable *ht2); ZEND_API int ZEND_FASTCALL zend_compare_arrays(zval *a1, zval *a2); ZEND_API int ZEND_FASTCALL zend_compare_objects(zval *o1, zval *o2); ZEND_API int ZEND_FASTCALL zend_atoi(const char *str, size_t str_len); ZEND_API zend_long ZEND_FASTCALL zend_atol(const char *str, size_t str_len); ZEND_API void ZEND_FASTCALL zend_locale_sprintf_double(zval *op ZEND_FILE_LINE_DC); #define convert_to_ex_master(pzv, lower_type, upper_type) \ if (Z_TYPE_P(pzv)!=upper_type) { \ convert_to_##lower_type(pzv); \ } #define convert_to_explicit_type(pzv, type) \ do { \ switch (type) { \ case IS_NULL: \ convert_to_null(pzv); \ break; \ case IS_LONG: \ convert_to_long(pzv); \ break; \ case IS_DOUBLE: \ convert_to_double(pzv); \ break; \ case _IS_BOOL: \ convert_to_boolean(pzv); \ break; \ case IS_ARRAY: \ convert_to_array(pzv); \ break; \ case IS_OBJECT: \ convert_to_object(pzv); \ break; \ case IS_STRING: \ convert_to_string(pzv); \ break; \ default: \ assert(0); \ break; \ } \ } while (0); #define convert_to_explicit_type_ex(pzv, str_type) \ if (Z_TYPE_P(pzv) != str_type) { \ convert_to_explicit_type(pzv, str_type); \ } #define convert_to_boolean_ex(pzv) do { \ if (Z_TYPE_INFO_P(pzv) > IS_TRUE) { \ convert_to_boolean(pzv); \ } else if (Z_TYPE_INFO_P(pzv) < IS_FALSE) { \ ZVAL_FALSE(pzv); \ } \ } while (0) #define convert_to_long_ex(pzv) convert_to_ex_master(pzv, long, IS_LONG) #define convert_to_double_ex(pzv) convert_to_ex_master(pzv, double, IS_DOUBLE) #define convert_to_string_ex(pzv) convert_to_ex_master(pzv, string, IS_STRING) #define convert_to_array_ex(pzv) convert_to_ex_master(pzv, array, IS_ARRAY) #define convert_to_object_ex(pzv) convert_to_ex_master(pzv, object, IS_OBJECT) #define convert_to_null_ex(pzv) convert_to_ex_master(pzv, null, IS_NULL) #define convert_scalar_to_number_ex(pzv) \ if (Z_TYPE_P(pzv)!=IS_LONG && Z_TYPE_P(pzv)!=IS_DOUBLE) { \ convert_scalar_to_number(pzv); \ } #if HAVE_SETLOCALE && defined(ZEND_WIN32) && !defined(ZTS) && defined(_MSC_VER) /* This performance improvement of tolower() on Windows gives 10-18% on bench.php */ #define ZEND_USE_TOLOWER_L 1 #endif #ifdef ZEND_USE_TOLOWER_L ZEND_API void zend_update_current_locale(void); #else #define zend_update_current_locale() #endif /* The offset in bytes between the value and type fields of a zval */ #define ZVAL_OFFSETOF_TYPE \ (offsetof(zval, u1.type_info) - offsetof(zval, value)) static zend_always_inline void fast_long_increment_function(zval *op1) { #if defined(HAVE_ASM_GOTO) && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__) __asm__ goto( "addl $1,(%0)\n\t" "jo %l1\n" : : "r"(&op1->value) : "cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); #elif defined(HAVE_ASM_GOTO) && defined(__x86_64__) __asm__ goto( "addq $1,(%0)\n\t" "jo %l1\n" : : "r"(&op1->value) : "cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); #elif PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), 1, &lresult))) { /* switch to double */ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); } else { Z_LVAL_P(op1) = lresult; } #elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), 1, &llresult))) { /* switch to double */ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); } else { Z_LVAL_P(op1) = llresult; } #else if (UNEXPECTED(Z_LVAL_P(op1) == ZEND_LONG_MAX)) { /* switch to double */ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MAX + 1.0); } else { Z_LVAL_P(op1)++; } #endif } static zend_always_inline void fast_long_decrement_function(zval *op1) { #if defined(HAVE_ASM_GOTO) && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__) __asm__ goto( "subl $1,(%0)\n\t" "jo %l1\n" : : "r"(&op1->value) : "cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); #elif defined(HAVE_ASM_GOTO) && defined(__x86_64__) __asm__ goto( "subq $1,(%0)\n\t" "jo %l1\n" : : "r"(&op1->value) : "cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); #elif PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), 1, &lresult))) { /* switch to double */ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); } else { Z_LVAL_P(op1) = lresult; } #elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), 1, &llresult))) { /* switch to double */ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); } else { Z_LVAL_P(op1) = llresult; } #else if (UNEXPECTED(Z_LVAL_P(op1) == ZEND_LONG_MIN)) { /* switch to double */ ZVAL_DOUBLE(op1, (double)ZEND_LONG_MIN - 1.0); } else { Z_LVAL_P(op1)--; } #endif } static zend_always_inline void fast_long_add_function(zval *result, zval *op1, zval *op2) { #if defined(HAVE_ASM_GOTO) && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__) __asm__ goto( "movl (%1), %%eax\n\t" "addl (%2), %%eax\n\t" "jo %l5\n\t" "movl %%eax, (%0)\n\t" "movl %3, %c4(%0)\n" : : "r"(&result->value), "r"(&op1->value), "r"(&op2->value), "n"(IS_LONG), "n"(ZVAL_OFFSETOF_TYPE) : "eax","cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); #elif defined(HAVE_ASM_GOTO) && defined(__x86_64__) __asm__ goto( "movq (%1), %%rax\n\t" "addq (%2), %%rax\n\t" "jo %l5\n\t" "movq %%rax, (%0)\n\t" "movl %3, %c4(%0)\n" : : "r"(&result->value), "r"(&op1->value), "r"(&op2->value), "n"(IS_LONG), "n"(ZVAL_OFFSETOF_TYPE) : "rax","cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); #elif PHP_HAVE_BUILTIN_SADDL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_saddl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, lresult); } #elif PHP_HAVE_BUILTIN_SADDLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_saddll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, llresult); } #else /* * 'result' may alias with op1 or op2, so we need to * ensure that 'result' is not updated until after we * have read the values of op1 and op2. */ if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) == (Z_LVAL_P(op2) & LONG_SIGN_MASK) && (Z_LVAL_P(op1) & LONG_SIGN_MASK) != ((Z_LVAL_P(op1) + Z_LVAL_P(op2)) & LONG_SIGN_MASK))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) + (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2)); } #endif } static zend_always_inline int fast_add_function(zval *result, zval *op1, zval *op2) { if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { fast_long_add_function(result, op1, op2); return SUCCESS; } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); return SUCCESS; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); return SUCCESS; } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); return SUCCESS; } } return add_function(result, op1, op2); } static zend_always_inline void fast_long_sub_function(zval *result, zval *op1, zval *op2) { #if defined(HAVE_ASM_GOTO) && defined(__i386__) && !(4 == __GNUC__ && 8 == __GNUC_MINOR__) __asm__ goto( "movl (%1), %%eax\n\t" "subl (%2), %%eax\n\t" "jo %l5\n\t" "movl %%eax, (%0)\n\t" "movl %3, %c4(%0)\n" : : "r"(&result->value), "r"(&op1->value), "r"(&op2->value), "n"(IS_LONG), "n"(ZVAL_OFFSETOF_TYPE) : "eax","cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); #elif defined(HAVE_ASM_GOTO) && defined(__x86_64__) __asm__ goto( "movq (%1), %%rax\n\t" "subq (%2), %%rax\n\t" "jo %l5\n\t" "movq %%rax, (%0)\n\t" "movl %3, %c4(%0)\n" : : "r"(&result->value), "r"(&op1->value), "r"(&op2->value), "n"(IS_LONG), "n"(ZVAL_OFFSETOF_TYPE) : "rax","cc", "memory" : overflow); return; overflow: ZEND_ATTRIBUTE_COLD_LABEL ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); #elif PHP_HAVE_BUILTIN_SSUBL_OVERFLOW && SIZEOF_LONG == SIZEOF_ZEND_LONG long lresult; if (UNEXPECTED(__builtin_ssubl_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &lresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, lresult); } #elif PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW && SIZEOF_LONG_LONG == SIZEOF_ZEND_LONG long long llresult; if (UNEXPECTED(__builtin_ssubll_overflow(Z_LVAL_P(op1), Z_LVAL_P(op2), &llresult))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); } else { ZVAL_LONG(result, llresult); } #else ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2)); if (UNEXPECTED((Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(op2) & LONG_SIGN_MASK) && (Z_LVAL_P(op1) & LONG_SIGN_MASK) != (Z_LVAL_P(result) & LONG_SIGN_MASK))) { ZVAL_DOUBLE(result, (double) Z_LVAL_P(op1) - (double) Z_LVAL_P(op2)); } #endif } static zend_always_inline int fast_div_function(zval *result, zval *op1, zval *op2) { return div_function(result, op1, op2); } static zend_always_inline int zend_fast_equal_strings(zend_string *s1, zend_string *s2) { if (s1 == s2) { return 1; } else if (ZSTR_VAL(s1)[0] > '9' || ZSTR_VAL(s2)[0] > '9') { return zend_string_equal_content(s1, s2); } else { return zendi_smart_streq(s1, s2); } } static zend_always_inline int fast_equal_check_function(zval *op1, zval *op2) { zval result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { return Z_LVAL_P(op1) == Z_LVAL_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { return ((double)Z_LVAL_P(op1)) == Z_DVAL_P(op2); } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { return Z_DVAL_P(op1) == Z_DVAL_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { return Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2)); } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { return zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } } compare_function(&result, op1, op2); return Z_LVAL(result) == 0; } static zend_always_inline int fast_equal_check_long(zval *op1, zval *op2) { zval result; if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { return Z_LVAL_P(op1) == Z_LVAL_P(op2); } compare_function(&result, op1, op2); return Z_LVAL(result) == 0; } static zend_always_inline int fast_equal_check_string(zval *op1, zval *op2) { zval result; if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { return zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } compare_function(&result, op1, op2); return Z_LVAL(result) == 0; } static zend_always_inline int fast_is_identical_function(zval *op1, zval *op2) { if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) { return 0; } else if (Z_TYPE_P(op1) <= IS_TRUE) { return 1; } return zend_is_identical(op1, op2); } static zend_always_inline int fast_is_not_identical_function(zval *op1, zval *op2) { if (Z_TYPE_P(op1) != Z_TYPE_P(op2)) { return 1; } else if (Z_TYPE_P(op1) <= IS_TRUE) { return 0; } return !zend_is_identical(op1, op2); } #define ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \ if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \ && op1 == result \ && UNEXPECTED(Z_OBJ_HANDLER_P(op1, get)) \ && EXPECTED(Z_OBJ_HANDLER_P(op1, set))) { \ int ret; \ zval rv; \ zval *objval = Z_OBJ_HANDLER_P(op1, get)(op1, &rv); \ Z_TRY_ADDREF_P(objval); \ ret = binary_op(objval, objval, op2); \ Z_OBJ_HANDLER_P(op1, set)(op1, objval); \ zval_ptr_dtor(objval); \ return ret; \ } else if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \ && UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation))) { \ if (EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, op2))) { \ return SUCCESS; \ } \ } #define ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode) \ if (UNEXPECTED(Z_TYPE_P(op2) == IS_OBJECT) \ && UNEXPECTED(Z_OBJ_HANDLER_P(op2, do_operation)) \ && EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op2, do_operation)(opcode, result, op1, op2))) { \ return SUCCESS; \ } #define ZEND_TRY_BINARY_OBJECT_OPERATION(opcode, binary_op) \ ZEND_TRY_BINARY_OP1_OBJECT_OPERATION(opcode, binary_op) \ else \ ZEND_TRY_BINARY_OP2_OBJECT_OPERATION(opcode) #define ZEND_TRY_UNARY_OBJECT_OPERATION(opcode) \ if (UNEXPECTED(Z_TYPE_P(op1) == IS_OBJECT) \ && UNEXPECTED(Z_OBJ_HANDLER_P(op1, do_operation)) \ && EXPECTED(SUCCESS == Z_OBJ_HANDLER_P(op1, do_operation)(opcode, result, op1, NULL))) { \ return SUCCESS; \ } /* buf points to the END of the buffer */ static zend_always_inline char *zend_print_ulong_to_buf(char *buf, zend_ulong num) { *buf = '\0'; do { *--buf = (char) (num % 10) + '0'; num /= 10; } while (num > 0); return buf; } /* buf points to the END of the buffer */ static zend_always_inline char *zend_print_long_to_buf(char *buf, zend_long num) { if (num < 0) { char *result = zend_print_ulong_to_buf(buf, ~((zend_ulong) num) + 1); *--result = '-'; return result; } else { return zend_print_ulong_to_buf(buf, num); } } ZEND_API zend_string* ZEND_FASTCALL zend_long_to_str(zend_long num); static zend_always_inline void zend_unwrap_reference(zval *op) /* {{{ */ { if (Z_REFCOUNT_P(op) == 1) { ZVAL_UNREF(op); } else { Z_DELREF_P(op); ZVAL_COPY(op, Z_REFVAL_P(op)); } } /* }}} */ END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!O6Zend/zend_inheritance.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_INHERITANCE_H #define ZEND_INHERITANCE_H #include "zend.h" BEGIN_EXTERN_C() ZEND_API void zend_do_inherit_interfaces(zend_class_entry *ce, const zend_class_entry *iface); ZEND_API void zend_do_implement_interface(zend_class_entry *ce, zend_class_entry *iface); ZEND_API void zend_do_implement_trait(zend_class_entry *ce, zend_class_entry *trait); ZEND_API void zend_do_bind_traits(zend_class_entry *ce); ZEND_API void zend_do_inheritance(zend_class_entry *ce, zend_class_entry *parent_ce); void zend_do_early_binding(void); void zend_check_deprecated_constructor(const zend_class_entry *ce); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!I 4 4 Zend/zend.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_H #define ZEND_H #define ZEND_VERSION "3.3.33" #define ZEND_ENGINE_3 #include "zend_types.h" #include "zend_errors.h" #include "zend_alloc.h" #include "zend_llist.h" #include "zend_string.h" #include "zend_hash.h" #include "zend_ast.h" #include "zend_gc.h" #include "zend_variables.h" #include "zend_iterators.h" #include "zend_stream.h" #include "zend_smart_str_public.h" #include "zend_smart_string_public.h" #include "zend_signal.h" #define HANDLE_BLOCK_INTERRUPTIONS() ZEND_SIGNAL_BLOCK_INTERRUPTIONS() #define HANDLE_UNBLOCK_INTERRUPTIONS() ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() #define INTERNAL_FUNCTION_PARAMETERS zend_execute_data *execute_data, zval *return_value #define INTERNAL_FUNCTION_PARAM_PASSTHRU execute_data, return_value #define USED_RET() \ (!EX(prev_execute_data) || \ !ZEND_USER_CODE(EX(prev_execute_data)->func->common.type) || \ (EX(prev_execute_data)->opline->result_type != IS_UNUSED)) #ifdef ZEND_ENABLE_STATIC_TSRMLS_CACHE #define ZEND_TSRMG TSRMG_STATIC #define ZEND_TSRMLS_CACHE_EXTERN() TSRMLS_CACHE_EXTERN() #define ZEND_TSRMLS_CACHE_DEFINE() TSRMLS_CACHE_DEFINE() #define ZEND_TSRMLS_CACHE_UPDATE() TSRMLS_CACHE_UPDATE() #define ZEND_TSRMLS_CACHE TSRMLS_CACHE #else #define ZEND_TSRMG TSRMG #define ZEND_TSRMLS_CACHE_EXTERN() #define ZEND_TSRMLS_CACHE_DEFINE() #define ZEND_TSRMLS_CACHE_UPDATE() #define ZEND_TSRMLS_CACHE #endif ZEND_TSRMLS_CACHE_EXTERN() #ifdef HAVE_NORETURN # ifdef ZEND_NORETURN_ALIAS ZEND_COLD void zend_error_noreturn(int type, const char *format, ...) ZEND_NORETURN ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); # else ZEND_API ZEND_COLD ZEND_NORETURN void zend_error_noreturn(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); # endif #else # define zend_error_noreturn zend_error #endif struct _zend_serialize_data; struct _zend_unserialize_data; typedef struct _zend_serialize_data zend_serialize_data; typedef struct _zend_unserialize_data zend_unserialize_data; typedef struct _zend_trait_method_reference { zend_string *method_name; zend_string *class_name; } zend_trait_method_reference; typedef struct _zend_trait_precedence { zend_trait_method_reference trait_method; uint32_t num_excludes; zend_string *exclude_class_names[1]; } zend_trait_precedence; typedef struct _zend_trait_alias { zend_trait_method_reference trait_method; /** * name for method to be added */ zend_string *alias; /** * modifiers to be set on trait method */ uint32_t modifiers; } zend_trait_alias; struct _zend_class_entry { char type; zend_string *name; struct _zend_class_entry *parent; int refcount; uint32_t ce_flags; int default_properties_count; int default_static_members_count; zval *default_properties_table; zval *default_static_members_table; zval *static_members_table; HashTable function_table; HashTable properties_info; HashTable constants_table; union _zend_function *constructor; union _zend_function *destructor; union _zend_function *clone; union _zend_function *__get; union _zend_function *__set; union _zend_function *__unset; union _zend_function *__isset; union _zend_function *__call; union _zend_function *__callstatic; union _zend_function *__tostring; union _zend_function *__debugInfo; union _zend_function *serialize_func; union _zend_function *unserialize_func; /* allocated only if class implements Iterator or IteratorAggregate interface */ zend_class_iterator_funcs *iterator_funcs_ptr; /* handlers */ union { zend_object* (*create_object)(zend_class_entry *class_type); int (*interface_gets_implemented)(zend_class_entry *iface, zend_class_entry *class_type); /* a class implements this interface */ }; zend_object_iterator *(*get_iterator)(zend_class_entry *ce, zval *object, int by_ref); union _zend_function *(*get_static_method)(zend_class_entry *ce, zend_string* method); /* serializer callbacks */ int (*serialize)(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data); int (*unserialize)(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data); uint32_t num_interfaces; uint32_t num_traits; zend_class_entry **interfaces; zend_class_entry **traits; zend_trait_alias **trait_aliases; zend_trait_precedence **trait_precedences; union { struct { zend_string *filename; uint32_t line_start; uint32_t line_end; zend_string *doc_comment; } user; struct { const struct _zend_function_entry *builtin_functions; struct _zend_module_entry *module; } internal; } info; }; typedef struct _zend_utility_functions { void (*error_function)(int type, const char *error_filename, const uint32_t error_lineno, const char *format, va_list args) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0); size_t (*printf_function)(const char *format, ...) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 1, 2); size_t (*write_function)(const char *str, size_t str_length); FILE *(*fopen_function)(const char *filename, zend_string **opened_path); void (*message_handler)(zend_long message, const void *data); zval *(*get_configuration_directive)(zend_string *name); void (*ticks_function)(int ticks); void (*on_timeout)(int seconds); int (*stream_open_function)(const char *filename, zend_file_handle *handle); void (*printf_to_smart_string_function)(smart_string *buf, const char *format, va_list ap); void (*printf_to_smart_str_function)(smart_str *buf, const char *format, va_list ap); char *(*getenv_function)(char *name, size_t name_len); zend_string *(*resolve_path_function)(const char *filename, size_t filename_len); } zend_utility_functions; typedef struct _zend_utility_values { char *import_use_extension; uint32_t import_use_extension_length; zend_bool html_errors; } zend_utility_values; typedef int (*zend_write_func_t)(const char *str, size_t str_length); #define zend_bailout() _zend_bailout(__FILE__, __LINE__) #define zend_try \ { \ JMP_BUF *__orig_bailout = EG(bailout); \ JMP_BUF __bailout; \ \ EG(bailout) = &__bailout; \ if (SETJMP(__bailout)==0) { #define zend_catch \ } else { \ EG(bailout) = __orig_bailout; #define zend_end_try() \ } \ EG(bailout) = __orig_bailout; \ } #define zend_first_try EG(bailout)=NULL; zend_try BEGIN_EXTERN_C() int zend_startup(zend_utility_functions *utility_functions, char **extensions); void zend_shutdown(void); void zend_register_standard_ini_entries(void); int zend_post_startup(void); void zend_set_utility_values(zend_utility_values *utility_values); ZEND_API ZEND_COLD void _zend_bailout(const char *filename, uint32_t lineno); ZEND_API size_t zend_vspprintf(char **pbuf, size_t max_len, const char *format, va_list ap); ZEND_API size_t zend_spprintf(char **message, size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4); ZEND_API zend_string *zend_vstrpprintf(size_t max_len, const char *format, va_list ap); ZEND_API zend_string *zend_strpprintf(size_t max_len, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); /* Same as zend_spprintf and zend_strpprintf, without checking of format validity. * For use with custom printf specifiers such as %H. */ ZEND_API size_t zend_spprintf_unchecked(char **message, size_t max_len, const char *format, ...); ZEND_API zend_string *zend_strpprintf_unchecked(size_t max_len, const char *format, ...); ZEND_API char *get_zend_version(void); ZEND_API int zend_make_printable_zval(zval *expr, zval *expr_copy); ZEND_API size_t zend_print_zval(zval *expr, int indent); ZEND_API void zend_print_zval_r(zval *expr, int indent); ZEND_API zend_string *zend_print_zval_r_to_str(zval *expr, int indent); ZEND_API void zend_print_flat_zval_r(zval *expr); #define zend_print_variable(var) \ zend_print_zval((var), 0) ZEND_API ZEND_COLD void zend_output_debug_string(zend_bool trigger_break, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); ZEND_API void zend_activate(void); ZEND_API void zend_deactivate(void); ZEND_API void zend_call_destructors(void); ZEND_API void zend_activate_modules(void); ZEND_API void zend_deactivate_modules(void); ZEND_API void zend_post_deactivate_modules(void); ZEND_API void free_estring(char **str_p); END_EXTERN_C() /* output support */ #define ZEND_WRITE(str, str_len) zend_write((str), (str_len)) #define ZEND_WRITE_EX(str, str_len) write_func((str), (str_len)) #define ZEND_PUTS(str) zend_write((str), strlen((str))) #define ZEND_PUTS_EX(str) write_func((str), strlen((str))) #define ZEND_PUTC(c) zend_write(&(c), 1) BEGIN_EXTERN_C() extern ZEND_API size_t (*zend_printf)(const char *format, ...) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 1, 2); extern ZEND_API zend_write_func_t zend_write; extern ZEND_API FILE *(*zend_fopen)(const char *filename, zend_string **opened_path); extern ZEND_API void (*zend_ticks_function)(int ticks); extern ZEND_API void (*zend_interrupt_function)(zend_execute_data *execute_data); extern ZEND_API void (*zend_error_cb)(int type, const char *error_filename, const uint32_t error_lineno, const char *format, va_list args) ZEND_ATTRIBUTE_PTR_FORMAT(printf, 4, 0); extern ZEND_API void (*zend_on_timeout)(int seconds); extern ZEND_API int (*zend_stream_open_function)(const char *filename, zend_file_handle *handle); extern void (*zend_printf_to_smart_string)(smart_string *buf, const char *format, va_list ap); extern void (*zend_printf_to_smart_str)(smart_str *buf, const char *format, va_list ap); extern ZEND_API char *(*zend_getenv)(char *name, size_t name_len); extern ZEND_API zend_string *(*zend_resolve_path)(const char *filename, size_t filename_len); extern ZEND_API int (*zend_post_startup_cb)(void); ZEND_API ZEND_COLD void zend_error(int type, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); ZEND_API ZEND_COLD void zend_type_error(const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 1, 2); ZEND_API ZEND_COLD void zend_internal_type_error(zend_bool throw_exception, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); ZEND_API ZEND_COLD void zend_internal_argument_count_error(zend_bool throw_exception, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); ZEND_COLD void zenderror(const char *error); /* The following #define is used for code duality in PHP for Engine 1 & 2 */ #define ZEND_STANDARD_CLASS_DEF_PTR zend_standard_class_def extern ZEND_API zend_class_entry *zend_standard_class_def; extern ZEND_API zend_utility_values zend_uv; /* If DTrace is available and enabled */ extern ZEND_API zend_bool zend_dtrace_enabled; END_EXTERN_C() #define ZEND_UV(name) (zend_uv.name) BEGIN_EXTERN_C() ZEND_API void zend_message_dispatcher(zend_long message, const void *data); ZEND_API zval *zend_get_configuration_directive(zend_string *name); END_EXTERN_C() /* Messages for applications of Zend */ #define ZMSG_FAILED_INCLUDE_FOPEN 1L #define ZMSG_FAILED_REQUIRE_FOPEN 2L #define ZMSG_FAILED_HIGHLIGHT_FOPEN 3L #define ZMSG_MEMORY_LEAK_DETECTED 4L #define ZMSG_MEMORY_LEAK_REPEATED 5L #define ZMSG_LOG_SCRIPT_NAME 6L #define ZMSG_MEMORY_LEAKS_GRAND_TOTAL 7L typedef enum { EH_NORMAL = 0, EH_THROW } zend_error_handling_t; typedef struct { zend_error_handling_t handling; zend_class_entry *exception; zval user_handler; } zend_error_handling; ZEND_API void zend_save_error_handling(zend_error_handling *current); ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current); ZEND_API void zend_restore_error_handling(zend_error_handling *saved); #define DEBUG_BACKTRACE_PROVIDE_OBJECT (1<<0) #define DEBUG_BACKTRACE_IGNORE_ARGS (1<<1) #include "zend_object_handlers.h" #include "zend_operators.h" #endif /* ZEND_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!buZend/zend_smart_str_public.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef ZEND_SMART_STR_PUBLIC_H #define ZEND_SMART_STR_PUBLIC_H typedef struct { zend_string *s; size_t a; } smart_str; #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!44Zend/zend_constants.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_CONSTANTS_H #define ZEND_CONSTANTS_H #include "zend_globals.h" #define CONST_CS (1<<0) /* Case Sensitive */ #define CONST_PERSISTENT (1<<1) /* Persistent */ #define CONST_CT_SUBST (1<<2) /* Allow compile-time substitution */ #define CONST_NO_FILE_CACHE (1<<3) /* Can't be saved in file cache */ #define PHP_USER_CONSTANT 0x7fffff /* a constant defined in user space */ /* Flag for zend_get_constant_ex(). Must not class with ZEND_FETCH_CLASS_* flags. */ #define ZEND_GET_CONSTANT_NO_DEPRECATION_CHECK 0x1000 typedef struct _zend_constant { zval value; zend_string *name; } zend_constant; #define ZEND_CONSTANT_FLAGS(c) \ (Z_CONSTANT_FLAGS((c)->value) & 0xff) #define ZEND_CONSTANT_MODULE_NUMBER(c) \ (Z_CONSTANT_FLAGS((c)->value) >> 8) #define ZEND_CONSTANT_SET_FLAGS(c, _flags, _module_number) do { \ Z_CONSTANT_FLAGS((c)->value) = \ ((_flags) & 0xff) | ((_module_number) << 8); \ } while (0) #define REGISTER_NULL_CONSTANT(name, flags) zend_register_null_constant((name), sizeof(name)-1, (flags), module_number) #define REGISTER_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name)-1, (bval), (flags), module_number) #define REGISTER_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), module_number) #define REGISTER_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name)-1, (dval), (flags), module_number) #define REGISTER_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name)-1, (str), (flags), module_number) #define REGISTER_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name)-1, (str), (len), (flags), module_number) #define REGISTER_NS_NULL_CONSTANT(ns, name, flags) zend_register_null_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (flags), module_number) #define REGISTER_NS_BOOL_CONSTANT(ns, name, bval, flags) zend_register_bool_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (bval), (flags), module_number) #define REGISTER_NS_LONG_CONSTANT(ns, name, lval, flags) zend_register_long_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (lval), (flags), module_number) #define REGISTER_NS_DOUBLE_CONSTANT(ns, name, dval, flags) zend_register_double_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (dval), (flags), module_number) #define REGISTER_NS_STRING_CONSTANT(ns, name, str, flags) zend_register_string_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (str), (flags), module_number) #define REGISTER_NS_STRINGL_CONSTANT(ns, name, str, len, flags) zend_register_stringl_constant(ZEND_NS_NAME(ns, name), sizeof(ZEND_NS_NAME(ns, name))-1, (str), (len), (flags), module_number) #define REGISTER_MAIN_NULL_CONSTANT(name, flags) zend_register_null_constant((name), sizeof(name)-1, (flags), 0) #define REGISTER_MAIN_BOOL_CONSTANT(name, bval, flags) zend_register_bool_constant((name), sizeof(name)-1, (bval), (flags), 0) #define REGISTER_MAIN_LONG_CONSTANT(name, lval, flags) zend_register_long_constant((name), sizeof(name)-1, (lval), (flags), 0) #define REGISTER_MAIN_DOUBLE_CONSTANT(name, dval, flags) zend_register_double_constant((name), sizeof(name)-1, (dval), (flags), 0) #define REGISTER_MAIN_STRING_CONSTANT(name, str, flags) zend_register_string_constant((name), sizeof(name)-1, (str), (flags), 0) #define REGISTER_MAIN_STRINGL_CONSTANT(name, str, len, flags) zend_register_stringl_constant((name), sizeof(name)-1, (str), (len), (flags), 0) BEGIN_EXTERN_C() void clean_module_constants(int module_number); void free_zend_constant(zval *zv); int zend_startup_constants(void); int zend_shutdown_constants(void); void zend_register_standard_constants(void); ZEND_API int zend_verify_const_access(zend_class_constant *c, zend_class_entry *ce); ZEND_API zval *zend_get_constant(zend_string *name); ZEND_API zval *zend_get_constant_str(const char *name, size_t name_len); ZEND_API zval *zend_get_constant_ex(zend_string *name, zend_class_entry *scope, uint32_t flags); ZEND_API void zend_register_bool_constant(const char *name, size_t name_len, zend_bool bval, int flags, int module_number); ZEND_API void zend_register_null_constant(const char *name, size_t name_len, int flags, int module_number); ZEND_API void zend_register_long_constant(const char *name, size_t name_len, zend_long lval, int flags, int module_number); ZEND_API void zend_register_double_constant(const char *name, size_t name_len, double dval, int flags, int module_number); ZEND_API void zend_register_string_constant(const char *name, size_t name_len, char *strval, int flags, int module_number); ZEND_API void zend_register_stringl_constant(const char *name, size_t name_len, char *strval, size_t strlen, int flags, int module_number); ZEND_API int zend_register_constant(zend_constant *c); #ifdef ZTS void zend_copy_constants(HashTable *target, HashTable *sourc); #endif END_EXTERN_C() #define ZEND_CONSTANT_DTOR free_zend_constant #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!b1!!Zend/zend_vm_execute.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifdef ZEND_WIN32 # pragma warning(disable : 4101) # pragma warning(once : 6235) # pragma warning(once : 6237) # pragma warning(once : 6239) # pragma warning(once : 6240) # pragma warning(once : 6285) # pragma warning(once : 6286) # pragma warning(once : 6326) #endif static user_opcode_handler_t zend_user_opcode_handlers[256] = { (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL, (user_opcode_handler_t)NULL }; static zend_uchar zend_user_opcodes[256] = {0, 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, 17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32, 33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48, 49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64, 65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96, 97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112, 113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128, 129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144, 145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160, 161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176, 177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192, 193,194,195,196,197,198,199,200,201,202,203,204,205,206,207,208, 209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224, 225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240, 241,242,243,244,245,246,247,248,249,250,251,252,253,254,255 }; #define SPEC_START_MASK 0x0000ffff #define SPEC_EXTRA_MASK 0xfffc0000 #define SPEC_RULE_OP1 0x00010000 #define SPEC_RULE_OP2 0x00020000 #define SPEC_RULE_OP_DATA 0x00040000 #define SPEC_RULE_RETVAL 0x00080000 #define SPEC_RULE_QUICK_ARG 0x00100000 #define SPEC_RULE_SMART_BRANCH 0x00200000 #define SPEC_RULE_DIM_OBJ 0x00400000 #define SPEC_RULE_COMMUTATIVE 0x00800000 #define SPEC_RULE_ISSET 0x01000000 static const uint32_t *zend_spec_handlers; static const void * const *zend_opcode_handlers; static int zend_handlers_count; #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) static const void * const * zend_opcode_handler_funcs; static zend_op hybrid_halt_op; #endif #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op); #endif #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op); #else # define zend_vm_get_opcode_handler_func zend_vm_get_opcode_handler #endif #ifndef VM_TRACE # define VM_TRACE(op) #endif #ifndef VM_TRACE_START # define VM_TRACE_START() #endif #ifndef VM_TRACE_END # define VM_TRACE_END() #endif #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) #define HYBRID_NEXT() goto *(void**)(OPLINE->handler) #define HYBRID_SWITCH() HYBRID_NEXT(); #define HYBRID_CASE(op) op ## _LABEL #define HYBRID_BREAK() HYBRID_NEXT() #define HYBRID_DEFAULT ZEND_NULL_LABEL #endif #ifdef ZEND_VM_FP_GLOBAL_REG # define ZEND_OPCODE_HANDLER_ARGS void # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU # define ZEND_OPCODE_HANDLER_ARGS_DC # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC #else # define ZEND_OPCODE_HANDLER_ARGS zend_execute_data *execute_data # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU execute_data # define ZEND_OPCODE_HANDLER_ARGS_DC , ZEND_OPCODE_HANDLER_ARGS # define ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC , ZEND_OPCODE_HANDLER_ARGS_PASSTHRU #endif #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG) # define ZEND_OPCODE_HANDLER_RET void # define ZEND_VM_TAIL_CALL(call) call; return # ifdef ZEND_VM_TAIL_CALL_DISPATCH # define ZEND_VM_CONTINUE() ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); return # else # define ZEND_VM_CONTINUE() return # endif # if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) # define ZEND_VM_RETURN() opline = &hybrid_halt_op; return # define ZEND_VM_HOT zend_always_inline ZEND_COLD ZEND_OPT_SIZE # define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE # else # define ZEND_VM_RETURN() opline = NULL; return # define ZEND_VM_HOT # define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE # endif #else # define ZEND_OPCODE_HANDLER_RET int # define ZEND_VM_TAIL_CALL(call) return call # define ZEND_VM_CONTINUE() return 0 # define ZEND_VM_RETURN() return -1 # define ZEND_VM_HOT # define ZEND_VM_COLD ZEND_COLD ZEND_OPT_SIZE #endif typedef ZEND_OPCODE_HANDLER_RET (ZEND_FASTCALL *opcode_handler_t) (ZEND_OPCODE_HANDLER_ARGS); #undef OPLINE #undef DCL_OPLINE #undef USE_OPLINE #undef LOAD_OPLINE #undef LOAD_OPLINE_EX #undef SAVE_OPLINE #define DCL_OPLINE #ifdef ZEND_VM_IP_GLOBAL_REG # define OPLINE opline # define USE_OPLINE # define LOAD_OPLINE() opline = EX(opline) # define LOAD_NEXT_OPLINE() opline = EX(opline) + 1 # define SAVE_OPLINE() EX(opline) = opline #else # define OPLINE EX(opline) # define USE_OPLINE const zend_op *opline = EX(opline); # define LOAD_OPLINE() # define LOAD_NEXT_OPLINE() ZEND_VM_INC_OPCODE() # define SAVE_OPLINE() #endif #undef HANDLE_EXCEPTION #undef HANDLE_EXCEPTION_LEAVE #define HANDLE_EXCEPTION() LOAD_OPLINE(); ZEND_VM_CONTINUE() #define HANDLE_EXCEPTION_LEAVE() LOAD_OPLINE(); ZEND_VM_LEAVE() #if defined(ZEND_VM_FP_GLOBAL_REG) # define ZEND_VM_ENTER_EX() ZEND_VM_INTERRUPT_CHECK(); ZEND_VM_CONTINUE() # define ZEND_VM_ENTER() execute_data = EG(current_execute_data); LOAD_OPLINE(); ZEND_VM_ENTER_EX() # define ZEND_VM_LEAVE() ZEND_VM_CONTINUE() #elif defined(ZEND_VM_IP_GLOBAL_REG) # define ZEND_VM_ENTER_EX() return 1 # define ZEND_VM_ENTER() opline = EG(current_execute_data)->opline; ZEND_VM_ENTER_EX() # define ZEND_VM_LEAVE() return 2 #else # define ZEND_VM_ENTER_EX() return 1 # define ZEND_VM_ENTER() return 1 # define ZEND_VM_LEAVE() return 2 #endif #define ZEND_VM_INTERRUPT() ZEND_VM_TAIL_CALL(zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); #define ZEND_VM_LOOP_INTERRUPT() zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); #define ZEND_VM_DISPATCH(opcode, opline) ZEND_VM_TAIL_CALL(((opcode_handler_t)zend_vm_get_opcode_handler_func(opcode, opline))(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS); static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS); static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zend_throw_exception_ex(zend_ce_division_by_zero_error, 0, "Modulo by zero"); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Using $this when not in object context"); if ((opline+1)->opcode == ZEND_OP_DATA) { FREE_UNFETCHED_OP((opline+1)->op1_type, (opline+1)->op1.var); } FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var); UNDEF_RESULT(); HANDLE_EXCEPTION(); } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_abstract_method_helper_SPEC(zend_function *fbc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot call abstract method %s::%s()", ZSTR_VAL(fbc->common.scope->name), ZSTR_VAL(fbc->common.function_name)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_undefined_function_helper_SPEC(zval *function_name ZEND_OPCODE_HANDLER_ARGS_DC) { SAVE_OPLINE(); zend_throw_error(NULL, "Call to undefined function %s()", Z_STRVAL_P(function_name)); HANDLE_EXCEPTION(); } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use temporary expression in write context"); FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var); FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use [] for reading"); FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var); FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { zend_execute_data *old_execute_data; uint32_t call_info = EX_CALL_INFO(); if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(execute_data->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } EG(vm_stack_top) = (zval*)execute_data; execute_data = EX(prev_execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { zend_clean_and_cache_symbol_table(EX(symbol_table)); } /* Free extra args before releasing the closure, * as that may free the op_array. */ zend_vm_stack_free_extra_args_ex(call_info, execute_data); if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(execute_data->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } old_execute_data = execute_data; execute_data = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) { zend_detach_symbol_table(execute_data); destroy_op_array(&EX(func)->op_array); efree_size(EX(func), sizeof(zend_op_array)); old_execute_data = execute_data; execute_data = EG(current_execute_data) = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); zend_attach_symbol_table(execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else { if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { zend_clean_and_cache_symbol_table(EX(symbol_table)); } zend_vm_stack_free_extra_args_ex(call_info, execute_data); } if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } ZEND_VM_RETURN(); } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ { zend_array *symbol_table = EX(symbol_table); zend_detach_symbol_table(execute_data); old_execute_data = EX(prev_execute_data); while (old_execute_data) { if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) { if (old_execute_data->symbol_table == symbol_table) { zend_attach_symbol_table(old_execute_data); } break; } old_execute_data = old_execute_data->prev_execute_data; } EG(current_execute_data) = EX(prev_execute_data); ZEND_VM_RETURN(); } } } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; zval retval; SAVE_OPLINE(); EX(call) = call->prev_execute_data; call->prev_execute_data = execute_data; EG(current_execute_data) = call; ret = 0 ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); if (!0) { zval_ptr_dtor(ret); } if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; zval retval; SAVE_OPLINE(); EX(call) = call->prev_execute_data; call->prev_execute_data = execute_data; EG(current_execute_data) = call; ret = 1 ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); if (!1) { zval_ptr_dtor(ret); } if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; ret = NULL; if (0) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; ret = NULL; if (1) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; if (0) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { zend_vm_stack_free_call_frame(call); zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } ret = 0 ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); if (!0) { zval_ptr_dtor(ret); } } if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; if (1) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { zend_vm_stack_free_call_frame(call); zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } ret = 1 ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); fbc->internal_function.handler(call, ret); #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); zend_vm_stack_free_call_frame(call); if (!1) { zval_ptr_dtor(ret); } } if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zend_object *object; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) { if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) { ZEND_VM_TAIL_CALL(zend_abstract_method_helper_SPEC(fbc ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; if (0) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) { zval retval; call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { UNDEF_RESULT(); goto fcall_end; } ret = 0 ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); if (!zend_execute_internal) { /* saves one function call if zend_execute_internal is not used */ fbc->internal_function.handler(call, ret); } else { zend_execute_internal(call, ret); } #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); if (!0) { zval_ptr_dtor(ret); } } else { /* ZEND_OVERLOADED_FUNCTION */ zval retval; ret = 0 ? EX_VAR(opline->result.var) : &retval; call->prev_execute_data = execute_data; if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!0) { zval_ptr_dtor(ret); } } fcall_end: if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { object = Z_OBJ(call->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } zend_vm_stack_free_call_frame(call); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_execute_data *call = EX(call); zend_function *fbc = call->func; zend_object *object; zval *ret; SAVE_OPLINE(); EX(call) = call->prev_execute_data; if (UNEXPECTED((fbc->common.fn_flags & (ZEND_ACC_ABSTRACT|ZEND_ACC_DEPRECATED)) != 0)) { if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_ABSTRACT) != 0)) { ZEND_VM_TAIL_CALL(zend_abstract_method_helper_SPEC(fbc ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_DEPRECATED) != 0)) { zend_deprecated_function(fbc); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { ret = NULL; if (1) { ret = EX_VAR(opline->result.var); ZVAL_NULL(ret); } call->prev_execute_data = execute_data; execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 1 EXECUTE_DATA_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } } else if (EXPECTED(fbc->type < ZEND_USER_FUNCTION)) { zval retval; call->prev_execute_data = execute_data; EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { UNDEF_RESULT(); goto fcall_end; } ret = 1 ? EX_VAR(opline->result.var) : &retval; ZVAL_NULL(ret); if (!zend_execute_internal) { /* saves one function call if zend_execute_internal is not used */ fbc->internal_function.handler(call, ret); } else { zend_execute_internal(call, ret); } #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = execute_data; zend_vm_stack_free_args(call); if (!1) { zval_ptr_dtor(ret); } } else { /* ZEND_OVERLOADED_FUNCTION */ zval retval; ret = 1 ? EX_VAR(opline->result.var) : &retval; call->prev_execute_data = execute_data; if (UNEXPECTED(!zend_do_fcall_overloaded(call, ret))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!1) { zval_ptr_dtor(ret); } } fcall_end: if (UNEXPECTED(ZEND_CALL_INFO(call) & ZEND_CALL_RELEASE_THIS)) { object = Z_OBJ(call->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (opline->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (ZEND_CALL_INFO(call) & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } zend_vm_stack_free_call_frame(call); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_SET_OPCODE(opline + 1); ZEND_VM_CONTINUE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *return_value = EX(return_value); if (EXPECTED(return_value)) { USE_OPLINE zend_generator *generator; zend_execute_data *gen_execute_data; uint32_t num_args, used_stack, call_info; object_init_ex(return_value, zend_ce_generator); /* * Normally the execute_data is allocated on the VM stack (because it does * not actually do any allocation and thus is faster). For generators * though this behavior would be suboptimal, because the (rather large) * structure would have to be copied back and forth every time execution is * suspended or resumed. That's why for generators the execution context * is allocated on heap. */ num_args = EX_NUM_ARGS(); if (EXPECTED(num_args <= EX(func)->op_array.num_args)) { used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var + EX(func)->op_array.T) * sizeof(zval); gen_execute_data = (zend_execute_data*)emalloc(used_stack); used_stack = (ZEND_CALL_FRAME_SLOT + EX(func)->op_array.last_var) * sizeof(zval); } else { used_stack = (ZEND_CALL_FRAME_SLOT + num_args + EX(func)->op_array.last_var + EX(func)->op_array.T - EX(func)->op_array.num_args) * sizeof(zval); gen_execute_data = (zend_execute_data*)emalloc(used_stack); } memcpy(gen_execute_data, execute_data, used_stack); /* Save execution context in generator object. */ generator = (zend_generator *) Z_OBJ_P(EX(return_value)); generator->execute_data = gen_execute_data; generator->frozen_call_stack = NULL; generator->execute_fake.opline = NULL; generator->execute_fake.func = NULL; generator->execute_fake.prev_execute_data = NULL; ZVAL_OBJ(&generator->execute_fake.This, (zend_object *) generator); gen_execute_data->opline = opline + 1; /* EX(return_value) keeps pointer to zend_object (not a real zval) */ gen_execute_data->return_value = (zval*)generator; call_info = Z_TYPE_INFO(EX(This)); if ((call_info & Z_TYPE_MASK) == IS_OBJECT && (!(call_info & ((ZEND_CALL_CLOSURE|ZEND_CALL_RELEASE_THIS) << ZEND_CALL_INFO_SHIFT)) /* Bug #72523 */ || UNEXPECTED(zend_execute_ex != execute_ex))) { ZEND_ADD_CALL_FLAG_EX(call_info, ZEND_CALL_RELEASE_THIS); Z_ADDREF(gen_execute_data->This); } ZEND_ADD_CALL_FLAG_EX(call_info, (ZEND_CALL_TOP_FUNCTION | ZEND_CALL_ALLOCATED | ZEND_CALL_GENERATOR)); Z_TYPE_INFO(gen_execute_data->This) = call_info; gen_execute_data->prev_execute_data = NULL; call_info = EX_CALL_INFO(); EG(current_execute_data) = EX(prev_execute_data); if (EXPECTED(!(call_info & (ZEND_CALL_TOP|ZEND_CALL_ALLOCATED)))) { EG(vm_stack_top) = (zval*)execute_data; execute_data = EX(prev_execute_data); LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED(!(call_info & ZEND_CALL_TOP))) { zend_execute_data *old_execute_data = execute_data; execute_data = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else { ZEND_VM_RETURN(); } } else { ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *arg; uint32_t arg_num = opline->op2.num; SAVE_OPLINE(); zend_throw_error(NULL, "Cannot pass parameter %d by reference", arg_num); FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_UNDEF(arg); HANDLE_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *args; int arg_num; SAVE_OPLINE(); args = get_zval_ptr_undef(opline->op1_type, opline->op1, &free_op1, BP_VAR_R); arg_num = ZEND_CALL_NUM_ARGS(EX(call)) + 1; send_again: if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) { HashTable *ht = Z_ARRVAL_P(args); zval *arg, *top; zend_string *name; zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, zend_hash_num_elements(ht)); if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_REFCOUNT_P(args) > 1) { uint32_t i; int separate = 0; /* check if any of arguments are going to be passed by reference */ for (i = 0; i < zend_hash_num_elements(ht); i++) { if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num + i)) { separate = 1; break; } } if (separate) { SEPARATE_ARRAY(args); ht = Z_ARRVAL_P(args); } } ZEND_HASH_FOREACH_STR_KEY_VAL(ht, name, arg) { if (name) { zend_throw_error(NULL, "Cannot unpack array with string keys"); FREE_OP(free_op1); HANDLE_EXCEPTION(); } top = ZEND_CALL_ARG(EX(call), arg_num); if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { if (Z_ISREF_P(arg)) { Z_ADDREF_P(arg); ZVAL_REF(top, Z_REF_P(arg)); } else if (opline->op1_type & (IS_VAR|IS_CV)) { /* array is already separated above */ ZVAL_MAKE_REF_EX(arg, 2); ZVAL_REF(top, Z_REF_P(arg)); } else { Z_TRY_ADDREF_P(arg); ZVAL_NEW_REF(top, arg); } } else { ZVAL_COPY_DEREF(top, arg); } ZEND_CALL_NUM_ARGS(EX(call))++; arg_num++; } ZEND_HASH_FOREACH_END(); } else if (EXPECTED(Z_TYPE_P(args) == IS_OBJECT)) { zend_class_entry *ce = Z_OBJCE_P(args); zend_object_iterator *iter; if (!ce || !ce->get_iterator) { zend_error(E_WARNING, "Only arrays and Traversables can be unpacked"); } else { iter = ce->get_iterator(ce, args, 0); if (UNEXPECTED(!iter)) { FREE_OP(free_op1); if (!EG(exception)) { zend_throw_exception_ex( NULL, 0, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name) ); } HANDLE_EXCEPTION(); } if (iter->funcs->rewind) { iter->funcs->rewind(iter); } for (; iter->funcs->valid(iter) == SUCCESS; ++arg_num) { zval *arg, *top; if (UNEXPECTED(EG(exception) != NULL)) { break; } arg = iter->funcs->get_current_data(iter); if (UNEXPECTED(EG(exception) != NULL)) { break; } if (iter->funcs->get_current_key) { zval key; iter->funcs->get_current_key(iter, &key); if (UNEXPECTED(EG(exception) != NULL)) { break; } if (UNEXPECTED(Z_TYPE(key) != IS_LONG)) { zend_throw_error(NULL, (Z_TYPE(key) == IS_STRING) ? "Cannot unpack Traversable with string keys" : "Cannot unpack Traversable with non-integer keys"); zval_ptr_dtor(&key); break; } } if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { zend_error( E_WARNING, "Cannot pass by-reference argument %d of %s%s%s()" " by unpacking a Traversable, passing by-value instead", arg_num, EX(call)->func->common.scope ? ZSTR_VAL(EX(call)->func->common.scope->name) : "", EX(call)->func->common.scope ? "::" : "", ZSTR_VAL(EX(call)->func->common.function_name) ); } ZVAL_DEREF(arg); Z_TRY_ADDREF_P(arg); zend_vm_stack_extend_call_frame(&EX(call), arg_num - 1, 1); top = ZEND_CALL_ARG(EX(call), arg_num); ZVAL_COPY_VALUE(top, arg); ZEND_CALL_NUM_ARGS(EX(call))++; iter->funcs->move_forward(iter); } zend_iterator_dtor(iter); } } else if (EXPECTED(Z_ISREF_P(args))) { args = Z_REFVAL_P(args); goto send_again; } else { if (opline->op1_type == IS_CV && UNEXPECTED(Z_TYPE_P(args) == IS_UNDEF)) { GET_OP1_UNDEF_CV(args, BP_VAR_R); } zend_error(E_WARNING, "Only arrays and Traversables can be unpacked"); } FREE_OP(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *args; SAVE_OPLINE(); args = get_zval_ptr(opline->op1_type, opline->op1, &free_op1, BP_VAR_R); if (UNEXPECTED(Z_TYPE_P(args) != IS_ARRAY)) { if ((opline->op1_type & (IS_VAR|IS_CV)) && Z_ISREF_P(args)) { args = Z_REFVAL_P(args); if (EXPECTED(Z_TYPE_P(args) == IS_ARRAY)) { goto send_array; } } zend_internal_type_error(EX_USES_STRICT_TYPES(), "call_user_func_array() expects parameter 2 to be array, %s given", zend_get_type_by_const(Z_TYPE_P(args))); if (ZEND_CALL_INFO(EX(call)) & ZEND_CALL_CLOSURE) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(call)->func)); } if (Z_TYPE(EX(call)->This) == IS_OBJECT) { OBJ_RELEASE(Z_OBJ(EX(call)->This)); } EX(call)->func = (zend_function*)&zend_pass_function; Z_OBJ(EX(call)->This) = NULL; ZEND_SET_CALL_INFO(EX(call), 0, ZEND_CALL_INFO(EX(call)) & ~ZEND_CALL_RELEASE_THIS); FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var); } else { uint32_t arg_num; HashTable *ht; zval *arg, *param; send_array: ht = Z_ARRVAL_P(args); if (opline->op2_type != IS_UNUSED) { zend_free_op free_op2; zval *op2 = get_zval_ptr_deref(opline->op2_type, opline->op2, &free_op2, BP_VAR_R); uint32_t skip = opline->extended_value; uint32_t count = zend_hash_num_elements(ht); zend_long len = zval_get_long(op2); if (len < 0) { len += (zend_long)(count - skip); } if (skip < count && len > 0) { if (len > (zend_long)(count - skip)) { len = (zend_long)(count - skip); } zend_vm_stack_extend_call_frame(&EX(call), 0, len); arg_num = 1; param = ZEND_CALL_ARG(EX(call), 1); ZEND_HASH_FOREACH_VAL(ht, arg) { if (skip > 0) { skip--; continue; } else if ((zend_long)(arg_num - 1) >= len) { break; } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { if (UNEXPECTED(!Z_ISREF_P(arg))) { if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) { /* By-value send is not allowed -- emit a warning, * but still perform the call. */ zend_param_must_be_ref(EX(call)->func, arg_num); } } } else { if (Z_ISREF_P(arg) && !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) { /* don't separate references for __call */ arg = Z_REFVAL_P(arg); } } ZVAL_COPY(param, arg); ZEND_CALL_NUM_ARGS(EX(call))++; arg_num++; param++; } ZEND_HASH_FOREACH_END(); } FREE_OP(free_op2); } else { zend_vm_stack_extend_call_frame(&EX(call), 0, zend_hash_num_elements(ht)); arg_num = 1; param = ZEND_CALL_ARG(EX(call), 1); ZEND_HASH_FOREACH_VAL(ht, arg) { if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { if (UNEXPECTED(!Z_ISREF_P(arg))) { if (!ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num)) { /* By-value send is not allowed -- emit a warning, * but still perform the call. */ zend_param_must_be_ref(EX(call)->func, arg_num); } } } else { if (Z_ISREF_P(arg) && !(EX(call)->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE)) { /* don't separate references for __call */ arg = Z_REFVAL_P(arg); } } ZVAL_COPY(param, arg); ZEND_CALL_NUM_ARGS(EX(call))++; arg_num++; param++; } ZEND_HASH_FOREACH_END(); } } FREE_OP(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE ZVAL_LONG(EX_VAR(opline->result.var), EG(error_reporting)); if (EG(error_reporting)) { do { EG(error_reporting) = 0; if (!EG(error_reporting_ini_entry)) { zval *zv = zend_hash_find_ex(EG(ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), 1); if (zv) { EG(error_reporting_ini_entry) = (zend_ini_entry *)Z_PTR_P(zv); } else { break; } } if (!EG(error_reporting_ini_entry)->modified) { if (!EG(modified_ini_directives)) { ALLOC_HASHTABLE(EG(modified_ini_directives)); zend_hash_init(EG(modified_ini_directives), 8, NULL, NULL, 0); } if (EXPECTED(zend_hash_add_ptr(EG(modified_ini_directives), ZSTR_KNOWN(ZEND_STR_ERROR_REPORTING), EG(error_reporting_ini_entry)) != NULL)) { EG(error_reporting_ini_entry)->orig_value = EG(error_reporting_ini_entry)->value; EG(error_reporting_ini_entry)->orig_modifiable = EG(error_reporting_ini_entry)->modifiable; EG(error_reporting_ini_entry)->modified = 1; } } } while (0); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (!EG(no_extensions)) { SAVE_OPLINE(); zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_statement_handler, execute_data); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (!EG(no_extensions)) { SAVE_OPLINE(); zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_begin_handler, execute_data); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (!EG(no_extensions)) { SAVE_OPLINE(); zend_llist_apply_with_argument(&zend_extensions, (llist_apply_with_arg_func_t) zend_extension_fcall_end_handler, execute_data); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *zv; zend_class_entry *ce; USE_OPLINE SAVE_OPLINE(); zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1); ZEND_ASSERT(zv != NULL); ce = Z_CE_P(zv); Z_CE_P(EX_VAR(opline->result.var)) = ce; if (ce->ce_flags & ZEND_ACC_ANON_BOUND) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } if (!(ce->ce_flags & (ZEND_ACC_INTERFACE|ZEND_ACC_IMPLEMENT_INTERFACES|ZEND_ACC_IMPLEMENT_TRAITS))) { zend_verify_abstract_class(ce); } ce->ce_flags |= ZEND_ACC_ANON_BOUND; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); do_bind_function(&EX(func)->op_array, opline, EG(function_table), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if ((uint32_t)++EG(ticks_count) >= opline->extended_value) { EG(ticks_count) = 0; if (zend_ticks_function) { SAVE_OPLINE(); zend_ticks_function(opline->extended_value); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var)); zend_class_entry *trait; SAVE_OPLINE(); trait = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_TRAIT); if (UNEXPECTED(trait == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (!(trait->ce_flags & ZEND_ACC_TRAIT)) { zend_error_noreturn(E_ERROR, "%s cannot use %s - it is not a trait", ZSTR_VAL(ce->name), ZSTR_VAL(trait->name)); } zend_do_implement_trait(ce, trait); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var)); SAVE_OPLINE(); zend_do_bind_traits(ce); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_dispatch_try_catch_finally_helper_SPEC(uint32_t try_catch_offset, uint32_t op_num ZEND_OPCODE_HANDLER_ARGS_DC) { /* May be NULL during generator closing (only finally blocks are executed) */ zend_object *ex = EG(exception); /* Walk try/catch/finally structures upwards, performing the necessary actions */ while (try_catch_offset != (uint32_t) -1) { zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[try_catch_offset]; if (op_num < try_catch->catch_op && ex) { /* Go to catch block */ cleanup_live_vars(execute_data, op_num, try_catch->catch_op); ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->catch_op], 0); } else if (op_num < try_catch->finally_op) { /* Go to finally block */ zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var); cleanup_live_vars(execute_data, op_num, try_catch->finally_op); Z_OBJ_P(fast_call) = EG(exception); EG(exception) = NULL; Z_OPLINE_NUM_P(fast_call) = (uint32_t)-1; ZEND_VM_JMP_EX(&EX(func)->op_array.opcodes[try_catch->finally_op], 0); } else if (op_num < try_catch->finally_end) { zval *fast_call = EX_VAR(EX(func)->op_array.opcodes[try_catch->finally_end].op1.var); /* cleanup incomplete RETURN statement */ if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) { zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var); zval_ptr_dtor(return_value); } /* Chain potential exception from wrapping finally block */ if (Z_OBJ_P(fast_call)) { if (ex) { zend_exception_set_previous(ex, Z_OBJ_P(fast_call)); } else { EG(exception) = Z_OBJ_P(fast_call); } ex = Z_OBJ_P(fast_call); } } try_catch_offset--; } /* Uncaught exception */ cleanup_live_vars(execute_data, op_num, 0); if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator_close(generator, 1); ZEND_VM_RETURN(); } else { ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { const zend_op *throw_op = EG(opline_before_exception); uint32_t throw_op_num = throw_op - EX(func)->op_array.opcodes; int i, current_try_catch_offset = -1; if ((throw_op->opcode == ZEND_FREE || throw_op->opcode == ZEND_FE_FREE) && throw_op->extended_value & ZEND_FREE_ON_RETURN) { /* exceptions thrown because of loop var destruction on return/break/... * are logically thrown at the end of the foreach loop, so adjust the * throw_op_num. */ const zend_live_range *range = find_live_range( &EX(func)->op_array, throw_op_num, throw_op->op1.var); throw_op_num = range->end; } /* Find the innermost try/catch/finally the exception was thrown in */ for (i = 0; i < EX(func)->op_array.last_try_catch; i++) { zend_try_catch_element *try_catch = &EX(func)->op_array.try_catch_array[i]; if (try_catch->try_op > throw_op_num) { /* further blocks will not be relevant... */ break; } if (throw_op_num < try_catch->catch_op || throw_op_num < try_catch->finally_end) { current_try_catch_offset = i; } } cleanup_unfinished_calls(execute_data, throw_op_num); if (throw_op->result_type & (IS_VAR | IS_TMP_VAR)) { switch (throw_op->opcode) { case ZEND_ADD_ARRAY_ELEMENT: case ZEND_ROPE_INIT: case ZEND_ROPE_ADD: break; /* exception while building structures, live range handling will free those */ case ZEND_FETCH_CLASS: case ZEND_DECLARE_CLASS: case ZEND_DECLARE_INHERITED_CLASS: case ZEND_DECLARE_ANON_CLASS: case ZEND_DECLARE_ANON_INHERITED_CLASS: break; /* return value is zend_class_entry pointer */ default: zval_ptr_dtor_nogc(EX_VAR(throw_op->result.var)); } } ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, throw_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zend_verify_abstract_class(Z_CE_P(EX_VAR(opline->op1.var))); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE int ret; SAVE_OPLINE(); ret = zend_user_opcode_handlers[opline->opcode](execute_data); opline = EX(opline); switch (ret) { case ZEND_USER_OPCODE_CONTINUE: ZEND_VM_CONTINUE(); case ZEND_USER_OPCODE_RETURN: if (UNEXPECTED((EX_CALL_INFO() & ZEND_CALL_GENERATOR) != 0)) { zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zend_generator_close(generator, 1); ZEND_VM_RETURN(); } else { ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } case ZEND_USER_OPCODE_ENTER: ZEND_VM_ENTER(); case ZEND_USER_OPCODE_LEAVE: ZEND_VM_LEAVE(); case ZEND_USER_OPCODE_DISPATCH: ZEND_VM_DISPATCH(opline->opcode, opline); default: ZEND_VM_DISPATCH((zend_uchar)(ret & 0xff), opline); } } static zend_never_inline ZEND_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zend_throw_error(NULL, "Cannot yield from finally in a force-closed generator"); FREE_UNFETCHED_OP(opline->op2_type, opline->op2.var); FREE_UNFETCHED_OP(opline->op1_type, opline->op1.var); UNDEF_RESULT(); HANDLE_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *fast_call = EX_VAR(opline->op1.var); SAVE_OPLINE(); /* cleanup incomplete RETURN statement */ if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1 && (EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2_type & (IS_TMP_VAR | IS_VAR))) { zval *return_value = EX_VAR(EX(func)->op_array.opcodes[Z_OPLINE_NUM_P(fast_call)].op2.var); zval_ptr_dtor(return_value); } /* cleanup delayed exception */ if (Z_OBJ_P(fast_call) != NULL) { /* discard the previously thrown exception */ OBJ_RELEASE(Z_OBJ_P(fast_call)); Z_OBJ_P(fast_call) = NULL; } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *fast_call = EX_VAR(opline->result.var); Z_OBJ_P(fast_call) = NULL; /* set return address */ Z_OPLINE_NUM_P(fast_call) = opline - EX(func)->op_array.opcodes; ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op1), 0); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *fast_call = EX_VAR(opline->op1.var); uint32_t current_try_catch_offset, current_op_num; if (Z_OPLINE_NUM_P(fast_call) != (uint32_t)-1) { const zend_op *fast_ret = EX(func)->op_array.opcodes + Z_OPLINE_NUM_P(fast_call); ZEND_VM_JMP_EX(fast_ret + 1, 0); } /* special case for unhandled exceptions */ EG(exception) = Z_OBJ_P(fast_call); Z_OBJ_P(fast_call) = NULL; current_try_catch_offset = opline->op2.num; current_op_num = opline - EX(func)->op_array.opcodes; ZEND_VM_TAIL_CALL(zend_dispatch_try_catch_finally_helper_SPEC(current_try_catch_offset, current_op_num ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (EG(assertions) <= 0) { zend_op *target = OP_JMP_ADDR(opline, opline->op2); if (RETURN_VALUE_USED(opline)) { ZVAL_TRUE(EX_VAR(opline->result.var)); } ZEND_VM_JMP_EX(target, 0); } else { ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_array *args; zend_function *fbc = EX(func); zval *ret = EX(return_value); uint32_t call_info = EX_CALL_INFO() & (ZEND_CALL_NESTED | ZEND_CALL_TOP | ZEND_CALL_RELEASE_THIS); uint32_t num_args = EX_NUM_ARGS(); zend_execute_data *call; SAVE_OPLINE(); if (num_args) { zval *p = ZEND_CALL_ARG(execute_data, 1); zval *end = p + num_args; args = zend_new_array(num_args); zend_hash_real_init_packed(args); ZEND_HASH_FILL_PACKED(args) { do { ZEND_HASH_FILL_ADD(p); p++; } while (p != end); } ZEND_HASH_FILL_END(); } call = execute_data; execute_data = EG(current_execute_data) = EX(prev_execute_data); call->func = (fbc->op_array.fn_flags & ZEND_ACC_STATIC) ? fbc->op_array.scope->__callstatic : fbc->op_array.scope->__call; ZEND_ASSERT(zend_vm_calc_used_stack(2, call->func) <= (size_t)(((char*)EG(vm_stack_end)) - (char*)call)); ZEND_CALL_NUM_ARGS(call) = 2; ZVAL_STR(ZEND_CALL_ARG(call, 1), fbc->common.function_name); if (num_args) { ZVAL_ARR(ZEND_CALL_ARG(call, 2), args); } else { ZVAL_EMPTY_ARRAY(ZEND_CALL_ARG(call, 2)); } zend_free_trampoline(fbc); fbc = call->func; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION)) { if (UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } execute_data = call; i_init_func_execute_data(&fbc->op_array, ret, 0 EXECUTE_DATA_CC); if (EXPECTED(zend_execute_ex == execute_ex)) { LOAD_OPLINE(); ZEND_VM_ENTER_EX(); } else { execute_data = EX(prev_execute_data); LOAD_OPLINE(); ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); } } else { zval retval; ZEND_ASSERT(fbc->type == ZEND_INTERNAL_FUNCTION); EG(current_execute_data) = call; if (UNEXPECTED(fbc->common.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) && UNEXPECTED(!zend_verify_internal_arg_types(fbc, call))) { zend_vm_stack_free_call_frame(call); if (ret) { ZVAL_UNDEF(ret); } goto call_trampoline_end; } if (ret == NULL) { ZVAL_NULL(&retval); ret = &retval; } if (!zend_execute_internal) { /* saves one function call if zend_execute_internal is not used */ fbc->internal_function.handler(call, ret); } else { zend_execute_internal(call, ret); } #if ZEND_DEBUG if (!EG(exception) && call->func) { ZEND_ASSERT(!(call->func->common.fn_flags & ZEND_ACC_HAS_RETURN_TYPE) || zend_verify_internal_return_type(call->func, ret)); ZEND_ASSERT((call->func->common.fn_flags & ZEND_ACC_RETURN_REFERENCE) ? Z_ISREF_P(ret) : !Z_ISREF_P(ret)); } #endif EG(current_execute_data) = call->prev_execute_data; zend_vm_stack_free_args(call); if (ret == &retval) { zval_ptr_dtor(ret); } } call_trampoline_end: execute_data = EG(current_execute_data); if (!EX(func) || !ZEND_USER_CODE(EX(func)->type) || (call_info & ZEND_CALL_TOP)) { ZEND_VM_RETURN(); } if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(call->This); OBJ_RELEASE(object); } zend_vm_stack_free_call_frame(call); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_OPLINE(); ZEND_VM_INC_OPCODE(); ZEND_VM_LEAVE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE OPLINE = OP_JMP_ADDR(opline, opline->op1); ZEND_VM_CONTINUE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_interrupt_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS) { EG(vm_interrupt) = 0; SAVE_OPLINE(); if (EG(timed_out)) { zend_timeout(0); } else if (zend_interrupt_function) { zend_interrupt_function(execute_data); ZEND_VM_ENTER(); } ZEND_VM_CONTINUE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_function *fbc; zval *function_name, *func; zend_execute_data *call; fbc = CACHED_PTR(opline->result.num); if (UNEXPECTED(fbc == NULL)) { function_name = (zval*)RT_CONSTANT(opline, opline->op2); func = zend_hash_find_ex(EG(function_table), Z_STR_P(function_name+1), 1); if (UNEXPECTED(func == NULL)) { ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(function_name ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } fbc = Z_FUNC_P(func); if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { fbc = init_func_run_time_cache_ex(func); } CACHE_PTR(opline->result.num, fbc); } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, NULL, NULL); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_execute_data *call; SAVE_OPLINE(); function_name = RT_CONSTANT(opline, opline->op2); try_function_name: if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value); } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) { call = zend_init_dynamic_call_object(function_name, opline->extended_value); } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) { call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) { function_name = Z_REFVAL_P(function_name); goto try_function_name; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); call = NULL; } if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { if (UNEXPECTED(EG(exception))) { if (call) { if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { zend_string_release_ex(call->func->common.function_name, 0); zend_free_trampoline(call->func); } zend_vm_stack_free_call_frame(call); } HANDLE_EXCEPTION(); } } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *func_name; zval *func; zend_function *fbc; zend_execute_data *call; fbc = CACHED_PTR(opline->result.num); if (UNEXPECTED(fbc == NULL)) { func_name = (zval *)RT_CONSTANT(opline, opline->op2); func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 1), 1); if (func == NULL) { func = zend_hash_find_ex(EG(function_table), Z_STR_P(func_name + 2), 1); if (UNEXPECTED(func == NULL)) { ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(func_name ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } } fbc = Z_FUNC_P(func); if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { fbc = init_func_run_time_cache_ex(func); } CACHE_PTR(opline->result.num, fbc); } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, NULL, NULL); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *fname; zval *func; zend_function *fbc; zend_execute_data *call; fbc = CACHED_PTR(opline->result.num); if (UNEXPECTED(fbc == NULL)) { fname = RT_CONSTANT(opline, opline->op2); func = zend_hash_find_ex(EG(function_table), Z_STR_P(fname), 1); if (UNEXPECTED(func == NULL)) { ZEND_VM_TAIL_CALL(zend_undefined_function_helper_SPEC(fname ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } fbc = Z_FUNC_P(func); if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { fbc = init_func_run_time_cache_ex(func); } CACHE_PTR(opline->result.num, fbc); } call = zend_vm_stack_push_call_frame_ex( opline->op1.num, ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, NULL, NULL); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE uint32_t arg_num; zval *param; ZEND_VM_REPEATABLE_OPCODE arg_num = opline->op1.num; param = EX_VAR(opline->result.var); if (arg_num > EX_NUM_ARGS()) { zval *default_value = RT_CONSTANT(opline, opline->op2); if (Z_OPT_TYPE_P(default_value) == IS_CONSTANT_AST) { zval *cache_val = (zval*)CACHE_ADDR(Z_CACHE_SLOT_P(default_value)); /* we keep in cache only not refcounted values */ if (Z_TYPE_P(cache_val) != IS_UNDEF) { ZVAL_COPY_VALUE(param, cache_val); } else { SAVE_OPLINE(); ZVAL_COPY(param, default_value); if (UNEXPECTED(zval_update_constant_ex(param, EX(func)->op_array.scope) != SUCCESS)) { zval_ptr_dtor_nogc(param); ZVAL_UNDEF(param); HANDLE_EXCEPTION(); } if (!Z_REFCOUNTED_P(param)) { ZVAL_COPY_VALUE(cache_val, param); } } } else { ZVAL_COPY(param, default_value); } } if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { zval *default_value = RT_CONSTANT(opline, opline->op2); SAVE_OPLINE(); if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, default_value, CACHE_ADDR(opline->extended_value)) || EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_REPEAT_OPCODE(ZEND_RECV_INIT); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_class_entry *ce = Z_CE_P(EX_VAR(opline->op1.var)); zend_class_entry *iface; SAVE_OPLINE(); iface = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_INTERFACE); if (UNEXPECTED(iface == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (UNEXPECTED((iface->ce_flags & ZEND_ACC_INTERFACE) == 0)) { zend_error_noreturn(E_ERROR, "%s cannot implement %s - it is not an interface", ZSTR_VAL(ce->name), ZSTR_VAL(iface->name)); } zend_do_implement_interface(ce, iface); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *function_name; zend_execute_data *call; SAVE_OPLINE(); function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); try_function_name: if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value); } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) { call = zend_init_dynamic_call_object(function_name, opline->extended_value); } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) { call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) { function_name = Z_REFVAL_P(function_name); goto try_function_name; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); call = NULL; } zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) { if (UNEXPECTED(EG(exception))) { if (call) { if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { zend_string_release_ex(call->func->common.function_name, 0); zend_free_trampoline(call->func); } zend_vm_stack_free_call_frame(call); } HANDLE_EXCEPTION(); } } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE uint32_t arg_num = opline->op1.num; if (UNEXPECTED(arg_num > EX_NUM_ARGS())) { SAVE_OPLINE(); zend_missing_arg_error(execute_data); HANDLE_EXCEPTION(); } else if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { zval *param = EX_VAR(opline->result.var); SAVE_OPLINE(); if (UNEXPECTED(!zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)) || EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE uint32_t arg_num = opline->op1.num; uint32_t arg_count = EX_NUM_ARGS(); zval *params; SAVE_OPLINE(); params = EX_VAR(opline->result.var); if (arg_num <= arg_count) { zval *param; array_init_size(params, arg_count - arg_num + 1); zend_hash_real_init_packed(Z_ARRVAL_P(params)); ZEND_HASH_FILL_PACKED(Z_ARRVAL_P(params)) { param = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T); if (UNEXPECTED((EX(func)->op_array.fn_flags & ZEND_ACC_HAS_TYPE_HINTS) != 0)) { ZEND_ADD_CALL_FLAG(execute_data, ZEND_CALL_FREE_EXTRA_ARGS); do { zend_verify_arg_type(EX(func), arg_num, param, NULL, CACHE_ADDR(opline->op2.num)); if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param); ZEND_HASH_FILL_ADD(param); param++; } while (++arg_num <= arg_count); } else { do { if (Z_OPT_REFCOUNTED_P(param)) Z_ADDREF_P(param); ZEND_HASH_FILL_ADD(param); param++; } while (++arg_num <= arg_count); } } ZEND_HASH_FILL_END(); } else { ZVAL_EMPTY_ARRAY(params); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_execute_data *call; SAVE_OPLINE(); function_name = EX_VAR(opline->op2.var); try_function_name: if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { call = zend_init_dynamic_call_string(Z_STR_P(function_name), opline->extended_value); } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(function_name) == IS_OBJECT)) { call = zend_init_dynamic_call_object(function_name, opline->extended_value); } else if (EXPECTED(Z_TYPE_P(function_name) == IS_ARRAY)) { call = zend_init_dynamic_call_array(Z_ARRVAL_P(function_name), opline->extended_value); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(function_name) == IS_REFERENCE)) { function_name = Z_REFVAL_P(function_name); goto try_function_name; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); call = NULL; } if (UNEXPECTED(!call)) { HANDLE_EXCEPTION(); } if (IS_CV & (IS_VAR|IS_TMP_VAR)) { if (UNEXPECTED(EG(exception))) { if (call) { if (call->func->common.fn_flags & ZEND_ACC_CALL_VIA_TRAMPOLINE) { zend_string_release_ex(call->func->common.function_name, 0); zend_free_trampoline(call->func); } zend_vm_stack_free_call_frame(call); } HANDLE_EXCEPTION(); } } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; op1 = RT_CONSTANT(opline, opline->op1); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); bitwise_not_function(EX_VAR(opline->result.var), RT_CONSTANT(opline, opline->op1)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *z; SAVE_OPLINE(); z = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_P(z) == IS_STRING) { zend_string *str = Z_STR_P(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } } else { zend_string *str = zval_get_string_func(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { GET_OP1_UNDEF_CV(z, BP_VAR_R); } zend_string_release_ex(str, 0); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline++; } else { opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = OP_JMP_ADDR(opline, opline->op2); } else { opline++; } ZEND_VM_JMP(opline); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = RT_CONSTANT(opline, opline->op1); if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); } else { opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; int ret; val = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); ret = i_zend_is_true(val); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; int ret; val = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); ret = i_zend_is_true(val); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } ZEND_VM_JMP(opline); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = RT_CONSTANT(opline, opline->op1); return_value = EX(return_value); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; SAVE_OPLINE(); do { if ((IS_CONST & (IS_CONST|IS_TMP_VAR)) || (IS_CONST == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { /* Not supposed to happen, but we'll allow it */ zend_error(E_NOTICE, "Only variable references should be returned by reference"); retval_ptr = RT_CONSTANT(opline, opline->op1); if (!EX(return_value)) { } else { if (IS_CONST == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(EX(return_value), retval_ptr); break; } ZVAL_NEW_REF(EX(return_value), retval_ptr); if (IS_CONST == IS_CONST) { Z_TRY_ADDREF_P(retval_ptr); } } break; } retval_ptr = NULL; if (IS_CONST == IS_VAR) { if (retval_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) { zend_error(E_NOTICE, "Only variable references should be returned by reference"); if (EX(return_value)) { ZVAL_NEW_REF(EX(return_value), retval_ptr); } else { } break; } } if (EX(return_value)) { if (Z_ISREF_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } else { ZVAL_MAKE_REF_EX(retval_ptr, 2); } ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); } } while (0); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval; zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); retval = RT_CONSTANT(opline, opline->op1); /* Copy return value into generator->retval */ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(&generator->retval, retval); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { Z_ADDREF(generator->retval); } } } else if (IS_CONST == IS_CV) { ZVAL_COPY_DEREF(&generator->retval, retval); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval))) { zend_refcounted *ref = Z_COUNTED_P(retval); retval = Z_REFVAL_P(retval); ZVAL_COPY_VALUE(&generator->retval, retval); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval)) { Z_ADDREF_P(retval); } } else { ZVAL_COPY_VALUE(&generator->retval, retval); } } /* Close the generator to free up resources */ zend_generator_close(generator, 1); /* Pass execution back to handling code */ ZEND_VM_RETURN(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op1); do { if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Can only throw objects"); HANDLE_EXCEPTION(); } } while (0); zend_exception_save(); if (IS_CONST != IS_TMP_VAR) { Z_TRY_ADDREF_P(value); } zend_throw_exception_object(value); zend_exception_restore(); HANDLE_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_class_entry *ce, *catch_ce; zend_object *exception; zval *ex; SAVE_OPLINE(); /* Check whether an exception has been thrown, if not, jump over code */ zend_exception_restore(); if (EG(exception) == NULL) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } catch_ce = CACHED_PTR(opline->extended_value & ~ZEND_LAST_CATCH); if (UNEXPECTED(catch_ce == NULL)) { catch_ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); CACHE_PTR(opline->extended_value & ~ZEND_LAST_CATCH, catch_ce); } ce = EG(exception)->ce; #ifdef HAVE_DTRACE if (DTRACE_EXCEPTION_CAUGHT_ENABLED()) { DTRACE_EXCEPTION_CAUGHT((char *)ce->name); } #endif /* HAVE_DTRACE */ if (ce != catch_ce) { if (!catch_ce || !instanceof_function(ce, catch_ce)) { if (opline->extended_value & ZEND_LAST_CATCH) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION(); } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } } exception = EG(exception); ex = EX_VAR(opline->result.var); if (UNEXPECTED(Z_ISREF_P(ex))) { ex = Z_REFVAL_P(ex); } zval_ptr_dtor(ex); ZVAL_OBJ(ex, EG(exception)); if (UNEXPECTED(EG(exception) != exception)) { GC_ADDREF(EG(exception)); HANDLE_EXCEPTION(); } else { EG(exception) = NULL; ZEND_VM_NEXT_OPCODE(); } } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; value = RT_CONSTANT(opline, opline->op1); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(0)) { if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_val_by_ref; } } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_val_by_ref: ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } value = RT_CONSTANT(opline, opline->op1); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(1)) { if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_val_by_ref; } } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_val_by_ref: ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } value = RT_CONSTANT(opline, opline->op1); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *arg, *param; SAVE_OPLINE(); arg = RT_CONSTANT(opline, opline->op1); param = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) { zend_param_must_be_ref(EX(call)->func, opline->op2.num); } ZVAL_COPY(param, arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); if (IS_CONST == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *obj; zend_class_entry *ce, *scope; zend_function *clone; zend_object_clone_obj_t clone_call; SAVE_OPLINE(); obj = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } do { if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) { obj = Z_REFVAL_P(obj); if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) { break; } } ZVAL_UNDEF(EX_VAR(opline->result.var)); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "__clone method called on non-object"); HANDLE_EXCEPTION(); } } while (0); ce = Z_OBJCE_P(obj); clone = ce->clone; clone_call = Z_OBJ_HT_P(obj)->clone_obj; if (UNEXPECTED(clone_call == NULL)) { zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (clone) { if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (!zend_check_private(clone, scope, clone->common.function_name)) { zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) { zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr; zval *result = EX_VAR(opline->result.var); HashTable *ht; SAVE_OPLINE(); expr = RT_CONSTANT(opline, opline->op1); switch (opline->extended_value) { case IS_NULL: ZVAL_NULL(result); break; case _IS_BOOL: ZVAL_BOOL(result, zend_is_true(expr)); break; case IS_LONG: ZVAL_LONG(result, zval_get_long(expr)); break; case IS_DOUBLE: ZVAL_DOUBLE(result, zval_get_double(expr)); break; case IS_STRING: ZVAL_STR(result, zval_get_string(expr)); break; default: if (IS_CONST & (IS_VAR|IS_CV)) { ZVAL_DEREF(expr); } /* If value is already of correct type, return it directly */ if (Z_TYPE_P(expr) == opline->extended_value) { ZVAL_COPY_VALUE(result, expr); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_CONST != IS_TMP_VAR) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (opline->extended_value == IS_ARRAY) { if (IS_CONST == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) { if (Z_TYPE_P(expr) != IS_NULL) { ZVAL_ARR(result, zend_new_array(1)); expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } else { ZVAL_EMPTY_ARRAY(result); } } else if (Z_OBJ_HT_P(expr)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr); if (obj_ht) { /* fast copy */ obj_ht = zend_proptable_to_symtable(obj_ht, (Z_OBJCE_P(expr)->default_properties_count || Z_OBJ_P(expr)->handlers != &std_object_handlers || GC_IS_RECURSIVE(obj_ht))); ZVAL_ARR(result, obj_ht); } else { ZVAL_EMPTY_ARRAY(result); } } else { ZVAL_COPY_VALUE(result, expr); Z_ADDREF_P(result); convert_to_array(result); } } else { ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def)); if (Z_TYPE_P(expr) == IS_ARRAY) { ht = zend_symtable_to_proptable(Z_ARR_P(expr)); if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) { /* TODO: try not to duplicate immutable arrays as well ??? */ ht = zend_array_dup(ht); } Z_OBJ_P(result)->properties = ht; } else if (Z_TYPE_P(expr) != IS_NULL) { Z_OBJ_P(result)->properties = ht = zend_new_array(1); expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_op_array *new_op_array; zval *inc_filename; SAVE_OPLINE(); inc_filename = RT_CONSTANT(opline, opline->op1); new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); if (UNEXPECTED(EG(exception) != NULL)) { if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (new_op_array == ZEND_FAKE_OP_ARRAY) { if (RETURN_VALUE_USED(opline)) { ZVAL_TRUE(EX_VAR(opline->result.var)); } } else if (EXPECTED(new_op_array != NULL)) { zval *return_value = NULL; zend_execute_data *call; if (RETURN_VALUE_USED(opline)) { return_value = EX_VAR(opline->result.var); ZVAL_NULL(return_value); } new_op_array->scope = EX(func)->op_array.scope; call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, (zend_function*)new_op_array, 0, Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL, Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL); if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) { call->symbol_table = EX(symbol_table); } else { call->symbol_table = zend_rebuild_symbol_table(); } call->prev_execute_data = execute_data; i_init_code_execute_data(call, new_op_array, return_value); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else if (RETURN_VALUE_USED(opline)) { ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array_ptr, *result; SAVE_OPLINE(); array_ptr = RT_CONSTANT(opline, opline->op1); if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(array_ptr); } Z_FE_POS_P(result) = 0; ZEND_VM_NEXT_OPCODE(); } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_CONST != IS_TMP_VAR) { Z_ADDREF_P(array_ptr); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array_ptr, *array_ref; SAVE_OPLINE(); if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { array_ref = array_ptr = NULL; if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } } else { array_ref = array_ptr = RT_CONSTANT(opline, opline->op1); } if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ref = EX_VAR(opline->result.var); ZVAL_NEW_REF(array_ref, array_ptr); array_ptr = Z_REFVAL_P(array_ref); } if (IS_CONST == IS_CONST) { ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr))); } else { SEPARATE_ARRAY(array_ptr); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0); if (IS_CONST == IS_VAR) { } ZEND_VM_NEXT_OPCODE(); } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { if (IS_CONST == IS_VAR || IS_CONST == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ptr = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(array_ptr, array_ref); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC); if (IS_CONST == IS_VAR) { } else { } if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; if (IS_CONST == IS_VAR) { } else { } ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_CONST != IS_UNUSED) { zval *ptr = RT_CONSTANT(opline, opline->op1); do { if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) { ptr = Z_REFVAL_P(ptr); if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); break; } } zend_print_zval(ptr, 0); } } while (0); } zend_bailout(); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *ref = NULL; int ret; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op1); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } ret = i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (ret) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if (IS_CONST == IS_VAR && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *ref = NULL; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op1); if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { if (IS_CONST & IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } if (Z_TYPE_P(value) > IS_NULL) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if ((IS_CONST & IS_VAR) && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *result = EX_VAR(opline->result.var); value = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZVAL_NULL(result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (IS_CONST == IS_CV) { ZVAL_COPY_DEREF(result, value); } else if (IS_CONST == IS_VAR) { if (UNEXPECTED(Z_ISREF_P(value))) { ZVAL_COPY_VALUE(result, Z_REFVAL_P(value)); if (UNEXPECTED(Z_DELREF_P(value) == 0)) { efree_size(Z_REF_P(value), sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } else { ZVAL_COPY_VALUE(result, value); } } else { ZVAL_COPY_VALUE(result, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) { Z_ADDREF_P(result); } } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); Z_CE_P(EX_VAR(opline->result.var)) = do_bind_class(&EX(func)->op_array, opline, EG(class_table), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zval *val; SAVE_OPLINE(); val = RT_CONSTANT(opline, opline->op1); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator"); UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (Z_TYPE_P(val) == IS_ARRAY) { ZVAL_COPY_VALUE(&generator->values, val); if (IS_CONST != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) { Z_ADDREF_P(val); } Z_FE_POS(generator->values) = 0; } else if (IS_CONST != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) { zend_class_entry *ce = Z_OBJCE_P(val); if (ce == zend_ce_generator) { zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val); if (IS_CONST != IS_TMP_VAR) { Z_ADDREF_P(val); } if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval); } ZEND_VM_NEXT_OPCODE(); } } else { zend_object_iterator *iter = ce->get_iterator(ce, val, 0); if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) { if (!EG(exception)) { zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } iter->index = 0; if (iter->funcs->rewind) { iter->funcs->rewind(iter); if (UNEXPECTED(EG(exception) != NULL)) { OBJ_RELEASE(&iter->std); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } ZVAL_OBJ(&generator->values, &iter->std); } } else { zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables"); UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* This is the default return value * when the expression is a Generator, it will be overwritten in zend_generator_resume() */ if (RETURN_VALUE_USED(opline)) { ZVAL_NULL(EX_VAR(opline->result.var)); } /* This generator has no send target (though the generator we delegate to might have one) */ generator->send_target = NULL; /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; value = RT_CONSTANT(opline, opline->op1); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); ZEND_VM_NEXT_OPCODE(); } else { zend_bool strict; if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { value = GET_OP1_UNDEF_CV(value, BP_VAR_R); } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { zend_string *str; zval tmp; ZVAL_COPY(&tmp, value); if (zend_parse_arg_str_weak(&tmp, &str)) { ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str)); zval_ptr_dtor(&tmp); break; } zval_ptr_dtor(&tmp); } zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value))); ZVAL_NULL(EX_VAR(opline->result.var)); } while (0); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result = 0; value = RT_CONSTANT(opline, opline->op1); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { type_check_resource: if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE) || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) { result = 1; } } else if ((IS_CONST & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { goto type_check_resource; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { result = ((1 << IS_NULL) & opline->extended_value) != 0; SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (IS_CONST & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_constant *c; int result; c = CACHED_PTR(opline->extended_value); do { if (EXPECTED(c != NULL)) { if (!IS_SPECIAL_CACHE_VAL(c)) { result = 1; break; } else if (EXPECTED(zend_hash_num_elements(EG(zend_constants)) == DECODE_SPECIAL_CACHE_NUM(c))) { result = 0; break; } } if (zend_quick_check_constant(RT_CONSTANT(opline, opline->op1) OPLINE_CC EXECUTE_DATA_CC) != SUCCESS) { CACHE_PTR(opline->extended_value, ENCODE_SPECIAL_CACHE_NUM(zend_hash_num_elements(EG(zend_constants)))); result = 0; } else { result = 1; } } while (0); ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; value = RT_CONSTANT(opline, opline->op1); ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; value = RT_CONSTANT(opline, opline->op1); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; value = RT_CONSTANT(opline, opline->op1); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; uint32_t arg_num = opline->op2.num; if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } value = RT_CONSTANT(opline, opline->op1); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); fast_div_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); pow_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_identical_function(op1, op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_not_identical_function(op1, op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); compare_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } if (IS_CONST == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value, *result; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CONST == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = RT_CONSTANT(opline, opline->op1); op2 = RT_CONSTANT(opline, opline->op2); if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (IS_CONST == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (IS_CONST != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (IS_CONST != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (IS_CONST != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (IS_CONST != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CONST != IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); HANDLE_EXCEPTION(); } while (0); } if (IS_CONST != IS_UNUSED) { do { if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CONST != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } zend_invalid_method_call(object, function_name); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CONST != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_CONST == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_CONST == IS_CONST && IS_CONST == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_CONST != IS_CONST && IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_CONST != IS_UNUSED) { function_name = RT_CONSTANT(opline, opline->op2); if (IS_CONST != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_CONST != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_CONST == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_fcall_info_cache fcc; char *error = NULL; zend_function *func; zend_class_entry *called_scope; zend_object *object; zend_execute_data *call; uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC; SAVE_OPLINE(); function_name = RT_CONSTANT(opline, opline->op2); if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) { func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; if (error) { efree(error); /* This is the only soft error is_callable() can generate */ zend_non_static_method_call(func); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ GC_ADDREF(ZEND_CLOSURE_OBJECT(func)); call_info |= ZEND_CALL_CLOSURE; if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { call_info |= ZEND_CALL_FAKE_CLOSURE; } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_ADDREF(object); /* For $this pointer */ } if ((IS_CONST & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { if (call_info & ZEND_CALL_CLOSURE) { zend_object_release(ZEND_CLOSURE_OBJECT(func)); } if (call_info & ZEND_CALL_RELEASE_THIS) { zend_object_release(object); } HANDLE_EXCEPTION(); } if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error); efree(error); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; } call = zend_vm_stack_push_call_frame(call_info, func, opline->extended_value, called_scope, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_class_entry *ce, *scope; zend_class_constant *c; zval *value, *zv; USE_OPLINE SAVE_OPLINE(); do { if (IS_CONST == IS_CONST) { if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else if (EXPECTED(CACHED_PTR(opline->extended_value))) { ce = CACHED_PTR(opline->extended_value); } else { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1); if (EXPECTED(zv != NULL)) { c = Z_PTR_P(zv); scope = EX(func)->op_array.scope; if (!zend_verify_const_access(c, scope)) { zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } value = &c->value; if (Z_TYPE_P(value) == IS_CONSTANT_AST) { zval_update_constant_ex(value, c->ce); if (UNEXPECTED(EG(exception) != NULL)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value); } else { zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } while (0); ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_TMP_VAR) { /* pass */ } else if (IS_CONST == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CONST == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CONST != IS_UNUSED) { zval *offset = RT_CONSTANT(opline, opline->op2); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CONST != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (IS_CONST == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); offset = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zval *offset; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_class_entry *parent; USE_OPLINE SAVE_OPLINE(); parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(parent == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } Z_CE_P(EX_VAR(opline->result.var)) = do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), parent, 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *zce, *orig_zce; zend_class_entry *parent; SAVE_OPLINE(); if ((zce = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1)) == NULL || ((orig_zce = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)+1), 1)) != NULL && Z_CE_P(zce) != Z_CE_P(orig_zce))) { parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(parent == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } do_bind_inherited_class(&EX(func)->op_array, opline, EG(class_table), parent, 0); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *zv; zend_class_entry *ce, *parent; USE_OPLINE SAVE_OPLINE(); zv = zend_hash_find_ex(EG(class_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1); ZEND_ASSERT(zv != NULL); ce = Z_CE_P(zv); Z_CE_P(EX_VAR(opline->result.var)) = ce; if (ce->ce_flags & ZEND_ACC_ANON_BOUND) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } parent = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(parent == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } zend_do_inheritance(ce, parent); ce->ce_flags |= ZEND_ACC_ANON_BOUND; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *name; zval *val; zend_constant c; SAVE_OPLINE(); name = RT_CONSTANT(opline, opline->op1); val = RT_CONSTANT(opline, opline->op2); ZVAL_COPY(&c.value, val); if (Z_OPT_CONSTANT(c.value)) { if (UNEXPECTED(zval_update_constant_ex(&c.value, EX(func)->op_array.scope) != SUCCESS)) { zval_ptr_dtor_nogc(&c.value); HANDLE_EXCEPTION(); } } /* non persistent, case sensitive */ ZEND_CONSTANT_SET_FLAGS(&c, CONST_CS, PHP_USER_CONSTANT); c.name = zend_string_copy(Z_STR_P(name)); if (zend_register_constant(&c) == FAILURE) { } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CONST != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CONST & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = RT_CONSTANT(opline, opline->op1); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CONST == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = RT_CONSTANT(opline, opline->op1); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CONST != IS_UNUSED) { zval *key = RT_CONSTANT(opline, opline->op2); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op, *jump_zv; HashTable *jumptable; op = RT_CONSTANT(opline, opline->op1); jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); if (Z_TYPE_P(op) != IS_LONG) { ZVAL_DEREF(op); if (Z_TYPE_P(op) != IS_LONG) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } } jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op)); if (jump_zv != NULL) { ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv)); ZEND_VM_CONTINUE(); } else { /* default */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op, *jump_zv; HashTable *jumptable; op = RT_CONSTANT(opline, opline->op1); jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); if (Z_TYPE_P(op) != IS_STRING) { if (IS_CONST == IS_CONST) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } else { ZVAL_DEREF(op); if (Z_TYPE_P(op) != IS_STRING) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } } } jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), IS_CONST == IS_CONST); if (jump_zv != NULL) { ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv)); ZEND_VM_CONTINUE(); } else { /* default */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); int result; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { result = zend_hash_exists(ht, Z_STR_P(op1)); } else if (opline->extended_value) { if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { result = zend_hash_index_exists(ht, Z_LVAL_P(op1)); } else { result = 0; } } else if (Z_TYPE_P(op1) <= IS_FALSE) { result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC()); } else { zend_string *key; zval key_tmp, result_tmp; result = 0; ZEND_HASH_FOREACH_STR_KEY(ht, key) { ZVAL_STR(&key_tmp, key); compare_function(&result_tmp, op1, &key_tmp); if (Z_LVAL(result_tmp) == 0) { result = 1; break; } } ZEND_HASH_FOREACH_END(); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value; zend_long offset; HashTable *ht; container = RT_CONSTANT(opline, opline->op1); dim = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_index_array: if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { offset = Z_LVAL_P(dim); } else { offset = zval_get_long(dim); } ht = Z_ARRVAL_P(container); ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value); if (IS_CONST & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } else if (IS_CONST != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_index_array; } else { goto fetch_dim_r_index_slow; } } else { fetch_dim_r_index_slow: SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } fetch_dim_r_index_undef: ZVAL_NULL(EX_VAR(opline->result.var)); SAVE_OPLINE(); zend_undefined_offset(offset); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); fast_div_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); pow_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } zval_ptr_dtor_nogc(free_op2); } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); compare_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container, *dim, *value, *result; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CONST != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } zval_ptr_dtor_nogc(free_op2); } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (IS_CONST != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (IS_CONST != IS_CONST) { zend_string_release_ex(op1_str, 0); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1, free_op2; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } while (0); } if (IS_CONST != IS_UNUSED) { do { if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } HANDLE_EXCEPTION(); } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } zend_invalid_method_call(object, function_name); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_CONST == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_CONST == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_CONST != IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_CONST == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *function_name; zend_fcall_info_cache fcc; char *error = NULL; zend_function *func; zend_class_entry *called_scope; zend_object *object; zend_execute_data *call; uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC; SAVE_OPLINE(); function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) { func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; if (error) { efree(error); /* This is the only soft error is_callable() can generate */ zend_non_static_method_call(func); if (UNEXPECTED(EG(exception) != NULL)) { zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ GC_ADDREF(ZEND_CLOSURE_OBJECT(func)); call_info |= ZEND_CALL_CLOSURE; if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { call_info |= ZEND_CALL_FAKE_CLOSURE; } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_ADDREF(object); /* For $this pointer */ } zval_ptr_dtor_nogc(free_op2); if (((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { if (call_info & ZEND_CALL_CLOSURE) { zend_object_release(ZEND_CLOSURE_OBJECT(func)); } if (call_info & ZEND_CALL_RELEASE_THIS) { zend_object_release(object); } HANDLE_EXCEPTION(); } if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error); efree(error); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; } call = zend_vm_stack_push_call_frame(call_info, func, opline->extended_value, called_scope, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_TMP_VAR) { /* pass */ } else if (IS_CONST == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CONST == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } zval_ptr_dtor_nogc(free_op2); } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CONST != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; int result; zval *offset; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CONST != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CONST & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = RT_CONSTANT(opline, opline->op1); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CONST == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = RT_CONSTANT(opline, opline->op1); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_VAR == IS_CONST) { if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } if (IS_CONST == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (IS_CONST == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CONST != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CONST & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = RT_CONSTANT(opline, opline->op1); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CONST == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = RT_CONSTANT(opline, opline->op1); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); zval_ptr_dtor_nogc(free_op2); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); retval = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST); if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { fetch_this: zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (type == BP_VAR_W) { retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); } else { retval = &EG(uninitialized_zval); } } /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ } else if (Z_TYPE_P(retval) == IS_INDIRECT) { retval = Z_INDIRECT_P(retval); if (Z_TYPE_P(retval) == IS_UNDEF) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { goto fetch_this; } if (type == BP_VAR_W) { ZVAL_NULL(retval); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { ZVAL_NULL(retval); } else { retval = &EG(uninitialized_zval); } } } } if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { } if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_ASSERT(retval != NULL); if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_UNUSED == IS_CONST) { if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } if (IS_CONST == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CONST_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_UNUSED == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_UNUSED != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_CONST == IS_CONST && IS_UNUSED == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_CONST != IS_CONST && IS_UNUSED == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_UNUSED != IS_UNUSED) { function_name = NULL; if (IS_UNUSED != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_UNUSED == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_UNUSED != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_CONST == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_CONST == IS_UNUSED) { zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num)); } else { /* prevents "undefined variable opline" errors */ #if 0 || (IS_CONST != IS_UNUSED) zval *retval_ref, *retval_ptr; zend_arg_info *ret_info = EX(func)->common.arg_info - 1; retval_ref = retval_ptr = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr); retval_ref = retval_ptr = EX_VAR(opline->result.var); } else if (IS_CONST == IS_VAR) { if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) { retval_ptr = Z_INDIRECT_P(retval_ptr); } ZVAL_DEREF(retval_ptr); } else if (IS_CONST == IS_CV) { ZVAL_DEREF(retval_ptr); } if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type) && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr)) && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) && retval_ref != retval_ptr) ) { /* A cast might happen - unwrap the reference if this is a by-value return */ if (Z_REFCOUNT_P(retval_ref) == 1) { ZVAL_UNREF(retval_ref); } else { Z_DELREF_P(retval_ref); ZVAL_COPY(retval_ref, retval_ptr); } retval_ptr = retval_ref; } zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num)); #endif } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *result; zend_function *constructor; zend_class_entry *ce; zend_execute_data *call; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { ce = CACHED_PTR(opline->op2.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } CACHE_PTR(opline->op2.num, ce); } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } result = EX_VAR(opline->result.var); if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) { ZVAL_UNDEF(result); HANDLE_EXCEPTION(); } constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result)); if (constructor == NULL) { if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next * opcode is DO_FCALL in case EXT instructions are used. */ if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) { ZEND_VM_NEXT_OPCODE_EX(1, 2); } /* Perform a dummy function call */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function, opline->extended_value, NULL, NULL); } else { if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) { init_func_run_time_cache(&constructor->op_array); } /* We are not handling overloaded classes right now */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR, constructor, opline->extended_value, ce, Z_OBJ_P(result)); Z_ADDREF_P(result); } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_TMP_VAR) { /* pass */ } else if (IS_CONST == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CONST == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_UNUSED != IS_UNUSED) { zval *offset = NULL; zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_UNUSED != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CONST != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); zend_hash_del_ind(target_symbol_table, name); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); value = zend_hash_find_ex(target_symbol_table, name, IS_CONST == IS_CONST); if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } if (!value) { result = (opline->extended_value & ZEND_ISEMPTY); } else { if (Z_TYPE_P(value) == IS_INDIRECT) { value = Z_INDIRECT_P(value); } if (!(opline->extended_value & ZEND_ISEMPTY)) { if (Z_ISREF_P(value)) { value = Z_REFVAL_P(value); } result = Z_TYPE_P(value) > IS_NULL; } else { result = !i_zend_is_true(value); } } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { if (IS_CONST == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (IS_CONST == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (IS_CONST != IS_CONST) { zend_tmp_string_release(tmp_name); } is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *zfunc; zval *object; zend_class_entry *called_scope; zend_function *fbc; zfunc = zend_hash_find_ex(EG(function_table), Z_STR_P(RT_CONSTANT(opline, opline->op1)), 1); ZEND_ASSERT(zfunc != NULL && Z_FUNC_P(zfunc)->type == ZEND_USER_FUNCTION); if (Z_TYPE(EX(This)) == IS_OBJECT) { called_scope = Z_OBJCE(EX(This)); if (UNEXPECTED((Z_FUNC_P(zfunc)->common.fn_flags & ZEND_ACC_STATIC) || (EX(func)->common.fn_flags & ZEND_ACC_STATIC))) { object = NULL; } else { object = &EX(This); } } else { called_scope = Z_CE(EX(This)); object = NULL; } zend_create_closure(EX_VAR(opline->result.var), Z_FUNC_P(zfunc), EX(func)->op_array.scope, called_scope, object); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CONST != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CONST & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = RT_CONSTANT(opline, opline->op1); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CONST == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = RT_CONSTANT(opline, opline->op1); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_UNUSED != IS_UNUSED) { zval *key = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; zend_long count; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); do { if (Z_TYPE_P(op1) == IS_ARRAY) { count = zend_array_count(Z_ARRVAL_P(op1)); break; } else if (Z_TYPE_P(op1) == IS_OBJECT) { /* first, we check if the handler is defined */ if (Z_OBJ_HT_P(op1)->count_elements) { if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) { break; } } /* if not and the object implements Countable we call its count() method */ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) { zval retval; zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval); count = zval_get_long(&retval); zval_ptr_dtor(&retval); break; } /* If There's no handler and it doesn't implement Countable then add a warning */ count = 1; } else if (Z_TYPE_P(op1) == IS_NULL) { count = 0; } else { count = 1; } zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable"); } while (0); ZVAL_LONG(EX_VAR(opline->result.var), count); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (IS_CONST == IS_UNUSED) { if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_class() called without object from outside a class"); ZVAL_FALSE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name); ZEND_VM_NEXT_OPCODE(); } } else { zval *op1; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); if (Z_TYPE_P(op1) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name); } else { zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1))); ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; zend_string *type; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); type = zend_zval_get_type(op1); if (EXPECTED(type)) { ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type); } else { ZVAL_STRING(EX_VAR(opline->result.var), "unknown type"); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_array *ht; uint32_t arg_count, result_size, skip; arg_count = EX_NUM_ARGS(); if (IS_CONST == IS_CONST) { skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1)); if (arg_count < skip) { result_size = 0; } else { result_size = arg_count - skip; } } else { skip = 0; result_size = arg_count; } if (result_size) { uint32_t first_extra_arg = EX(func)->op_array.num_args; ht = zend_new_array(result_size); ZVAL_ARR(EX_VAR(opline->result.var), ht); zend_hash_real_init_packed(ht); ZEND_HASH_FILL_PACKED(ht) { zval *p, *q; uint32_t i = skip; p = EX_VAR_NUM(i); if (arg_count > first_extra_arg) { while (i < first_extra_arg) { q = p; if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) { ZVAL_DEREF(q); if (Z_OPT_REFCOUNTED_P(q)) { Z_ADDREF_P(q); } } else { q = &EG(uninitialized_zval); } ZEND_HASH_FILL_ADD(q); p++; i++; } if (skip < first_extra_arg) { skip = 0; } else { skip -= first_extra_arg; } p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip); } while (i < arg_count) { q = p; if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) { ZVAL_DEREF(q); if (Z_OPT_REFCOUNTED_P(q)) { Z_ADDREF_P(q); } } else { q = &EG(uninitialized_zval); } ZEND_HASH_FILL_ADD(q); p++; i++; } } ZEND_HASH_FILL_END(); ht->nNumOfElements = result_size; } else { ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); fast_div_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); pow_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = RT_CONSTANT(opline, opline->op1); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); compare_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value, *result; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); dim = EX_VAR(opline->op2.var); if (IS_CONST != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CV == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = EX_VAR(opline->op2.var); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = RT_CONSTANT(opline, opline->op1); op2 = EX_VAR(opline->op2.var); if ((IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CONST != IS_CONST && IS_CONST != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CONST == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (IS_CV == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (IS_CONST != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (IS_CV != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (IS_CONST != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (IS_CV != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CV != IS_CONST) { function_name = EX_VAR(opline->op2.var); } if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); HANDLE_EXCEPTION(); } while (0); } if (IS_CONST != IS_UNUSED) { do { if (IS_CONST == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CV != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } zend_invalid_method_call(object, function_name); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CV != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_CONST & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_CONST & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_CONST == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_CV != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_CONST == IS_CONST && IS_CV == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_CONST != IS_CONST && IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_CV != IS_UNUSED) { function_name = EX_VAR(opline->op2.var); if (IS_CV != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_CV != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_CONST == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_fcall_info_cache fcc; char *error = NULL; zend_function *func; zend_class_entry *called_scope; zend_object *object; zend_execute_data *call; uint32_t call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_DYNAMIC; SAVE_OPLINE(); function_name = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (zend_is_callable_ex(function_name, NULL, 0, NULL, &fcc, &error)) { func = fcc.function_handler; called_scope = fcc.called_scope; object = fcc.object; if (error) { efree(error); /* This is the only soft error is_callable() can generate */ zend_non_static_method_call(func); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } if (func->common.fn_flags & ZEND_ACC_CLOSURE) { /* Delay closure destruction until its invocation */ GC_ADDREF(ZEND_CLOSURE_OBJECT(func)); call_info |= ZEND_CALL_CLOSURE; if (func->common.fn_flags & ZEND_ACC_FAKE_CLOSURE) { call_info |= ZEND_CALL_FAKE_CLOSURE; } } else if (object) { call_info |= ZEND_CALL_RELEASE_THIS; GC_ADDREF(object); /* For $this pointer */ } if ((IS_CV & (IS_TMP_VAR|IS_VAR)) && UNEXPECTED(EG(exception))) { if (call_info & ZEND_CALL_CLOSURE) { zend_object_release(ZEND_CLOSURE_OBJECT(func)); } if (call_info & ZEND_CALL_RELEASE_THIS) { zend_object_release(object); } HANDLE_EXCEPTION(); } if (EXPECTED(func->type == ZEND_USER_FUNCTION) && UNEXPECTED(!func->op_array.run_time_cache)) { init_func_run_time_cache(&func->op_array); } } else { zend_internal_type_error(EX_USES_STRICT_TYPES(), "%s() expects parameter 1 to be a valid callback, %s", Z_STRVAL_P(RT_CONSTANT(opline, opline->op1)), error); efree(error); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } func = (zend_function*)&zend_pass_function; called_scope = NULL; object = NULL; } call = zend_vm_stack_push_call_frame(call_info, func, opline->extended_value, called_scope, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CONST == IS_VAR || IS_CONST == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_TMP_VAR) { /* pass */ } else if (IS_CONST == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CONST == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CV != IS_UNUSED) { zval *offset = EX_VAR(opline->op2.var); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CONST != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); offset = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zval *offset; SAVE_OPLINE(); container = RT_CONSTANT(opline, opline->op1); if (IS_CONST == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (IS_CONST == IS_CONST || (IS_CONST != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CONST != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CONST & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = RT_CONSTANT(opline, opline->op1); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CONST == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = RT_CONSTANT(opline, opline->op1); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CV != IS_UNUSED) { zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; value = EX_VAR(opline->op1.var); ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(value)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; value = EX_VAR(opline->op1.var); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_LIST_r(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op, *jump_zv; HashTable *jumptable; op = EX_VAR(opline->op1.var); jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); if (Z_TYPE_P(op) != IS_LONG) { ZVAL_DEREF(op); if (Z_TYPE_P(op) != IS_LONG) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } } jump_zv = zend_hash_index_find(jumptable, Z_LVAL_P(op)); if (jump_zv != NULL) { ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv)); ZEND_VM_CONTINUE(); } else { /* default */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op, *jump_zv; HashTable *jumptable; op = EX_VAR(opline->op1.var); jumptable = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); if (Z_TYPE_P(op) != IS_STRING) { if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } else { ZVAL_DEREF(op); if (Z_TYPE_P(op) != IS_STRING) { /* Wrong type, fall back to ZEND_CASE chain */ ZEND_VM_NEXT_OPCODE(); } } } jump_zv = zend_hash_find_ex(jumptable, Z_STR_P(op), (IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST); if (jump_zv != NULL) { ZEND_VM_SET_RELATIVE_OPCODE(opline, Z_LVAL_P(jump_zv)); ZEND_VM_CONTINUE(); } else { /* default */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; zend_long overflow; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) + Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) - Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_LONG(result, Z_LVAL_P(op1) * Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; zend_long overflow; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); ZEND_VM_SMART_BRANCH_JMPNZ(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_LIST_r(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_LIST_r(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); bitwise_not_function(EX_VAR(opline->result.var), _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC)); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; zend_free_op free_op1; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *z; SAVE_OPLINE(); z = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_P(z) == IS_STRING) { zend_string *str = Z_STR_P(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } } else { zend_string *str = zval_get_string_func(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { GET_OP1_UNDEF_CV(z, BP_VAR_R); } zend_string_release_ex(str, 0); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *val; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline++; } else { opline = OP_JMP_ADDR(opline, opline->op2); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_JMP(opline); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *val; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = OP_JMP_ADDR(opline, opline->op2); } else { opline++; } zval_ptr_dtor_nogc(free_op1); ZEND_VM_JMP(opline); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *val; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); } else { opline = OP_JMP_ADDR(opline, opline->op2); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_JMP(opline); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *val; int ret; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); ret = i_zend_is_true(val); zval_ptr_dtor_nogc(free_op1); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *val; int ret; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); ret = i_zend_is_true(val); zval_ptr_dtor_nogc(free_op1); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } ZEND_VM_JMP(opline); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *var; USE_OPLINE SAVE_OPLINE(); var = EX_VAR(opline->op1.var); if (Z_TYPE_P(var) != IS_ARRAY && Z_FE_ITER_P(var) != (uint32_t)-1) { zend_hash_iterator_del(Z_FE_ITER_P(var)); } zval_ptr_dtor_nogc(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; zend_free_op free_op1; val = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *obj; zend_class_entry *ce, *scope; zend_function *clone; zend_object_clone_obj_t clone_call; SAVE_OPLINE(); obj = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } do { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) { obj = Z_REFVAL_P(obj); if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) { break; } } ZVAL_UNDEF(EX_VAR(opline->result.var)); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "__clone method called on non-object"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } while (0); ce = Z_OBJCE_P(obj); clone = ce->clone; clone_call = Z_OBJ_HT_P(obj)->clone_obj; if (UNEXPECTED(clone_call == NULL)) { zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name)); zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (clone) { if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (!zend_check_private(clone, scope, clone->common.function_name)) { zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) { zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj)); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_op_array *new_op_array; zend_free_op free_op1; zval *inc_filename; SAVE_OPLINE(); inc_filename = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); zval_ptr_dtor_nogc(free_op1); if (UNEXPECTED(EG(exception) != NULL)) { if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (new_op_array == ZEND_FAKE_OP_ARRAY) { if (RETURN_VALUE_USED(opline)) { ZVAL_TRUE(EX_VAR(opline->result.var)); } } else if (EXPECTED(new_op_array != NULL)) { zval *return_value = NULL; zend_execute_data *call; if (RETURN_VALUE_USED(opline)) { return_value = EX_VAR(opline->result.var); ZVAL_NULL(return_value); } new_op_array->scope = EX(func)->op_array.scope; call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, (zend_function*)new_op_array, 0, Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL, Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL); if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) { call->symbol_table = EX(symbol_table); } else { call->symbol_table = zend_rebuild_symbol_table(); } call->prev_execute_data = execute_data; i_init_code_execute_data(call, new_op_array, return_value); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else if (RETURN_VALUE_USED(opline)) { ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op1; zval *ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); do { if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) { ptr = Z_REFVAL_P(ptr); if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); break; } } zend_print_zval(ptr, 0); } } while (0); zval_ptr_dtor_nogc(free_op1); } zend_bailout(); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *ref = NULL; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { if ((IS_TMP_VAR|IS_VAR) & IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } if (Z_TYPE_P(value) > IS_NULL) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if ((IS_TMP_VAR|IS_VAR) == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if (((IS_TMP_VAR|IS_VAR) & IS_VAR) && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zend_free_op free_op1; value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE(); } else { zend_bool strict; if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { value = GET_OP1_UNDEF_CV(value, BP_VAR_R); } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { zend_string *str; zval tmp; ZVAL_COPY(&tmp, value); if (zend_parse_arg_str_weak(&tmp, &str)) { ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str)); zval_ptr_dtor(&tmp); break; } zval_ptr_dtor(&tmp); } zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value))); ZVAL_NULL(EX_VAR(opline->result.var)); } while (0); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result = 0; zend_free_op free_op1; value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { type_check_resource: if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE) || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) { result = 1; } } else if (((IS_TMP_VAR|IS_VAR) & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { goto type_check_resource; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { result = ((1 << IS_NULL) & opline->extended_value) != 0; SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); fast_div_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); pow_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } zval_ptr_dtor_nogc(free_op1); } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op1); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op1); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op1); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); compare_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_CONST == IS_CONST) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); retval = NULL; break; } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } zval_ptr_dtor_nogc(free_op1); } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *dim, *value, *result; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = RT_CONSTANT(opline, opline->op2); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } zval_ptr_dtor_nogc(free_op1); } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op1); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (IS_CONST == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (IS_CONST != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (IS_CONST != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CONST != IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } while (0); } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { do { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CONST != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } zend_invalid_method_call(object, function_name); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CONST != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; zval_ptr_dtor_nogc(free_op1); if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if ((IS_TMP_VAR|IS_VAR) == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ zval_ptr_dtor_nogc(free_op1); } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; zend_free_op free_op1; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zend_free_op free_op1; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); offset = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; int result; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr; zend_bool result; SAVE_OPLINE(); expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); try_instanceof: if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (IS_CONST == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); goto try_instanceof; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *dim, *value; zend_long offset; HashTable *ht; container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_index_array: if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { offset = Z_LVAL_P(dim); } else { offset = zval_get_long(dim); } ht = Z_ARRVAL_P(container); ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value); if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_index_array; } else { goto fetch_dim_r_index_slow; } } else { fetch_dim_r_index_slow: SAVE_OPLINE(); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } fetch_dim_r_index_undef: ZVAL_NULL(EX_VAR(opline->result.var)); SAVE_OPLINE(); zend_undefined_offset(offset); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *dim, *value; zend_long offset; HashTable *ht; container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_index_array: if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { offset = Z_LVAL_P(dim); } else { offset = zval_get_long(dim); } ht = Z_ARRVAL_P(container); ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value); if ((IS_TMP_VAR|IS_VAR) & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_index_array; } else { goto fetch_dim_r_index_slow; } } else { fetch_dim_r_index_slow: SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } fetch_dim_r_index_undef: ZVAL_NULL(EX_VAR(opline->result.var)); SAVE_OPLINE(); zend_undefined_offset(offset); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); fast_div_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); pow_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } zval_ptr_dtor_nogc(free_op1); } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } zval_ptr_dtor_nogc(free_op2); } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); compare_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *dim, *value, *result; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); } zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } zval_ptr_dtor_nogc(free_op1); } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } zval_ptr_dtor_nogc(free_op2); } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_string_release_ex(op1_str, 0); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1, free_op2; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } while (0); } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { do { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } HANDLE_EXCEPTION(); } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } zend_invalid_method_call(object, function_name); zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; zval_ptr_dtor_nogc(free_op1); if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if ((IS_TMP_VAR|IS_VAR) == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ zval_ptr_dtor_nogc(free_op1); } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op2); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; int result; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } zval_ptr_dtor_nogc(free_op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_VAR == IS_CONST) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); retval = NULL; break; } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } zval_ptr_dtor_nogc(free_op1); } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; zend_free_op free_op1; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zend_free_op free_op1; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr; zend_bool result; SAVE_OPLINE(); expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); try_instanceof: if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (IS_VAR == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); goto try_instanceof; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *varname; zval *retval; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); retval = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST); if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { fetch_this: zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (type == BP_VAR_W) { retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); } else { retval = &EG(uninitialized_zval); } } /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ } else if (Z_TYPE_P(retval) == IS_INDIRECT) { retval = Z_INDIRECT_P(retval); if (Z_TYPE_P(retval) == IS_UNDEF) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { goto fetch_this; } if (type == BP_VAR_W) { ZVAL_NULL(retval); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { ZVAL_NULL(retval); } else { retval = &EG(uninitialized_zval); } } } } if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { zval_ptr_dtor_nogc(free_op1); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_ASSERT(retval != NULL); if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_UNUSED == IS_CONST) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); retval = NULL; break; } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } zval_ptr_dtor_nogc(free_op1); } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_TMPVAR_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; zend_free_op free_op1; SAVE_OPLINE(); varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); zend_hash_del_ind(target_symbol_table, name); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; zend_free_op free_op1; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zend_free_op free_op1; zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); value = zend_hash_find_ex(target_symbol_table, name, (IS_TMP_VAR|IS_VAR) == IS_CONST); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); if (!value) { result = (opline->extended_value & ZEND_ISEMPTY); } else { if (Z_TYPE_P(value) == IS_INDIRECT) { value = Z_INDIRECT_P(value); } if (!(opline->extended_value & ZEND_ISEMPTY)) { if (Z_ISREF_P(value)) { value = Z_REFVAL_P(value); } result = Z_TYPE_P(value) > IS_NULL; } else { result = !i_zend_is_true(value); } } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zend_free_op free_op1; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op1.var)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_tmp_string_release(tmp_name); } zval_ptr_dtor_nogc(free_op1); is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr; zend_bool result; SAVE_OPLINE(); expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); try_instanceof: if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (IS_UNUSED == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); goto try_instanceof; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); fast_div_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); pow_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } zval_ptr_dtor_nogc(free_op1); } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op1); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); compare_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *dim, *value, *result; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = EX_VAR(opline->op2.var); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = EX_VAR(opline->op2.var); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); if (((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } zval_ptr_dtor_nogc(free_op1); } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && (IS_TMP_VAR|IS_VAR) != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op1); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (IS_CV == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (IS_CV != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (IS_CV != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CV != IS_CONST) { function_name = EX_VAR(opline->op2.var); } if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } while (0); } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { do { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CV != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } zend_invalid_method_call(object, function_name); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CV != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; zval_ptr_dtor_nogc(free_op1); if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if ((IS_TMP_VAR|IS_VAR) == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ zval_ptr_dtor_nogc(free_op1); } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2, *result; op1 = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); offset = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; int result; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST || ((IS_TMP_VAR|IS_VAR) != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); return_value = EX(return_value); if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zend_free_op free_op1; SAVE_OPLINE(); do { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) || (IS_TMP_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { /* Not supposed to happen, but we'll allow it */ zend_error(E_NOTICE, "Only variable references should be returned by reference"); retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (!EX(return_value)) { zval_ptr_dtor_nogc(free_op1); } else { if (IS_TMP_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(EX(return_value), retval_ptr); break; } ZVAL_NEW_REF(EX(return_value), retval_ptr); if (IS_TMP_VAR == IS_CONST) { Z_TRY_ADDREF_P(retval_ptr); } } break; } retval_ptr = NULL; if (IS_TMP_VAR == IS_VAR) { if (retval_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) { zend_error(E_NOTICE, "Only variable references should be returned by reference"); if (EX(return_value)) { ZVAL_NEW_REF(EX(return_value), retval_ptr); } else { } break; } } if (EX(return_value)) { if (Z_ISREF_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } else { ZVAL_MAKE_REF_EX(retval_ptr, 2); } ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); } } while (0); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval; zend_free_op free_op1; zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); retval = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Copy return value into generator->retval */ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(&generator->retval, retval); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { Z_ADDREF(generator->retval); } } } else if (IS_TMP_VAR == IS_CV) { ZVAL_COPY_DEREF(&generator->retval, retval); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval))) { zend_refcounted *ref = Z_COUNTED_P(retval); retval = Z_REFVAL_P(retval); ZVAL_COPY_VALUE(&generator->retval, retval); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval)) { Z_ADDREF_P(retval); } } else { ZVAL_COPY_VALUE(&generator->retval, retval); } } /* Close the generator to free up resources */ zend_generator_close(generator, 1); /* Pass execution back to handling code */ ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zend_free_op free_op1; SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); do { if (IS_TMP_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) { if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { break; } } if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Can only throw objects"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } while (0); zend_exception_save(); if (IS_TMP_VAR != IS_TMP_VAR) { Z_TRY_ADDREF_P(value); } zend_throw_exception_object(value); zend_exception_restore(); HANDLE_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (EXPECTED(0)) { if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_val_by_ref; } } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_val_by_ref: ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (EXPECTED(1)) { if (QUICK_ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_val_by_ref; } } else if (ARG_MUST_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_val_by_ref: ZEND_VM_TAIL_CALL(zend_cannot_pass_by_ref_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(arg))) { Z_ADDREF_P(arg); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *arg, *param; zend_free_op free_op1; SAVE_OPLINE(); arg = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); param = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) { zend_param_must_be_ref(EX(call)->func, opline->op2.num); } ZVAL_COPY(param, arg); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr; zval *result = EX_VAR(opline->result.var); HashTable *ht; SAVE_OPLINE(); expr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); switch (opline->extended_value) { case IS_NULL: ZVAL_NULL(result); break; case _IS_BOOL: ZVAL_BOOL(result, zend_is_true(expr)); break; case IS_LONG: ZVAL_LONG(result, zval_get_long(expr)); break; case IS_DOUBLE: ZVAL_DOUBLE(result, zval_get_double(expr)); break; case IS_STRING: ZVAL_STR(result, zval_get_string(expr)); break; default: if (IS_TMP_VAR & (IS_VAR|IS_CV)) { ZVAL_DEREF(expr); } /* If value is already of correct type, return it directly */ if (Z_TYPE_P(expr) == opline->extended_value) { ZVAL_COPY_VALUE(result, expr); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (opline->extended_value == IS_ARRAY) { if (IS_TMP_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) { if (Z_TYPE_P(expr) != IS_NULL) { ZVAL_ARR(result, zend_new_array(1)); expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } else { ZVAL_EMPTY_ARRAY(result); } } else if (Z_OBJ_HT_P(expr)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr); if (obj_ht) { /* fast copy */ obj_ht = zend_proptable_to_symtable(obj_ht, (Z_OBJCE_P(expr)->default_properties_count || Z_OBJ_P(expr)->handlers != &std_object_handlers || GC_IS_RECURSIVE(obj_ht))); ZVAL_ARR(result, obj_ht); } else { ZVAL_EMPTY_ARRAY(result); } } else { ZVAL_COPY_VALUE(result, expr); Z_ADDREF_P(result); convert_to_array(result); } } else { ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def)); if (Z_TYPE_P(expr) == IS_ARRAY) { ht = zend_symtable_to_proptable(Z_ARR_P(expr)); if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) { /* TODO: try not to duplicate immutable arrays as well ??? */ ht = zend_array_dup(ht); } Z_OBJ_P(result)->properties = ht; } else if (Z_TYPE_P(expr) != IS_NULL) { Z_OBJ_P(result)->properties = ht = zend_new_array(1); expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } } } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *array_ptr, *result; SAVE_OPLINE(); array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(array_ptr); } Z_FE_POS_P(result) = 0; ZEND_VM_NEXT_OPCODE(); } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_TMP_VAR != IS_TMP_VAR) { Z_ADDREF_P(array_ptr); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op1); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; zval_ptr_dtor_nogc(free_op1); ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *array_ptr, *array_ref; SAVE_OPLINE(); if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { array_ref = array_ptr = NULL; if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } } else { array_ref = array_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); } if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ref = EX_VAR(opline->result.var); ZVAL_NEW_REF(array_ref, array_ptr); array_ptr = Z_REFVAL_P(array_ref); } if (IS_TMP_VAR == IS_CONST) { ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr))); } else { SEPARATE_ARRAY(array_ptr); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0); if (IS_TMP_VAR == IS_VAR) { } ZEND_VM_NEXT_OPCODE(); } else if (IS_TMP_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { if (IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ptr = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(array_ptr, array_ref); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_VAR) { } else { zval_ptr_dtor_nogc(free_op1); } if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; if (IS_TMP_VAR == IS_VAR) { } else { zval_ptr_dtor_nogc(free_op1); } ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (!EG(error_reporting) && Z_LVAL_P(EX_VAR(opline->op1.var)) != 0) { EG(error_reporting) = Z_LVAL_P(EX_VAR(opline->op1.var)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *ref = NULL; int ret; SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } ret = i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (ret) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if (IS_TMP_VAR == IS_VAR && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *result = EX_VAR(opline->result.var); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZVAL_NULL(result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (IS_TMP_VAR == IS_CV) { ZVAL_COPY_DEREF(result, value); } else if (IS_TMP_VAR == IS_VAR) { if (UNEXPECTED(Z_ISREF_P(value))) { ZVAL_COPY_VALUE(result, Z_REFVAL_P(value)); if (UNEXPECTED(Z_DELREF_P(value) == 0)) { efree_size(Z_REF_P(value), sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } else { ZVAL_COPY_VALUE(result, value); } } else { ZVAL_COPY_VALUE(result, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) { Z_ADDREF_P(result); } } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zval *val; zend_free_op free_op1; SAVE_OPLINE(); val = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator"); zval_ptr_dtor_nogc(free_op1); UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (Z_TYPE_P(val) == IS_ARRAY) { ZVAL_COPY_VALUE(&generator->values, val); if (IS_TMP_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) { Z_ADDREF_P(val); } Z_FE_POS(generator->values) = 0; } else if (IS_TMP_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) { zend_class_entry *ce = Z_OBJCE_P(val); if (ce == zend_ce_generator) { zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val); if (IS_TMP_VAR != IS_TMP_VAR) { Z_ADDREF_P(val); } if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval); } ZEND_VM_NEXT_OPCODE(); } } else { zend_object_iterator *iter = ce->get_iterator(ce, val, 0); zval_ptr_dtor_nogc(free_op1); if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) { if (!EG(exception)) { zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } iter->index = 0; if (iter->funcs->rewind) { iter->funcs->rewind(iter); if (UNEXPECTED(EG(exception) != NULL)) { OBJ_RELEASE(&iter->std); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } ZVAL_OBJ(&generator->values, &iter->std); } } else { zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables"); zval_ptr_dtor_nogc(free_op1); UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* This is the default return value * when the expression is a Generator, it will be overwritten in zend_generator_resume() */ if (RETURN_VALUE_USED(opline)) { ZVAL_NULL(EX_VAR(opline->result.var)); } /* This generator has no send target (though the generator we delegate to might have one) */ generator->send_target = NULL; /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CONST == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_string **rope; zval *var; /* op1 and result are the same */ rope = (zend_string**)EX_VAR(opline->op1.var); if (IS_CONST == IS_CONST) { var = RT_CONSTANT(opline, opline->op2); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (IS_CONST == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_string **rope; zval *var, *ret; uint32_t i; size_t len = 0; char *target; rope = (zend_string**)EX_VAR(opline->op1.var); if (IS_CONST == IS_CONST) { var = RT_CONSTANT(opline, opline->op2); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (IS_CONST == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); if (UNEXPECTED(EG(exception))) { for (i = 0; i <= opline->extended_value; i++) { zend_string_release_ex(rope[i], 0); } ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } for (i = 0; i <= opline->extended_value; i++) { len += ZSTR_LEN(rope[i]); } ret = EX_VAR(opline->result.var); ZVAL_STR(ret, zend_string_alloc(len, 0)); target = Z_STRVAL_P(ret); for (i = 0; i <= opline->extended_value; i++) { memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i])); target += ZSTR_LEN(rope[i]); zend_string_release_ex(rope[i], 0); } *target = '\0'; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_TMP_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_TMP_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CONST != IS_UNUSED) { zval *offset = RT_CONSTANT(opline, opline->op2); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_TMP_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_TMP_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CONST != IS_UNUSED) { zval *key = RT_CONSTANT(opline, opline->op2); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); int result; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { result = zend_hash_exists(ht, Z_STR_P(op1)); } else if (opline->extended_value) { if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { result = zend_hash_index_exists(ht, Z_LVAL_P(op1)); } else { result = 0; } } else if (Z_TYPE_P(op1) <= IS_FALSE) { result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC()); } else { zend_string *key; zval key_tmp, result_tmp; result = 0; ZEND_HASH_FOREACH_STR_KEY(ht, key) { ZVAL_STR(&key_tmp, key); compare_function(&result_tmp, op1, &key_tmp); if (Z_LVAL(result_tmp) == 0) { result = 1; break; } } ZEND_HASH_FOREACH_END(); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zend_string **rope; zval *var; /* op1 and result are the same */ rope = (zend_string**)EX_VAR(opline->op1.var); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zend_string **rope; zval *var, *ret; uint32_t i; size_t len = 0; char *target; rope = (zend_string**)EX_VAR(opline->op1.var); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(EG(exception))) { for (i = 0; i <= opline->extended_value; i++) { zend_string_release_ex(rope[i], 0); } ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } for (i = 0; i <= opline->extended_value; i++) { len += ZSTR_LEN(rope[i]); } ret = EX_VAR(opline->result.var); ZVAL_STR(ret, zend_string_alloc(len, 0)); target = Z_STRVAL_P(ret); for (i = 0; i <= opline->extended_value; i++) { memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i])); target += ZSTR_LEN(rope[i]); zend_string_release_ex(rope[i], 0); } *target = '\0'; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_TMP_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_TMP_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } zval_ptr_dtor_nogc(free_op2); } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_TMP_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_TMP_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_TMP_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); zval_ptr_dtor_nogc(free_op2); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_UNUSED == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_TMP_VAR == IS_UNUSED) { zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num)); } else { /* prevents "undefined variable opline" errors */ #if 0 || (IS_TMP_VAR != IS_UNUSED) zval *retval_ref, *retval_ptr; zend_free_op free_op1; zend_arg_info *ret_info = EX(func)->common.arg_info - 1; retval_ref = retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr); retval_ref = retval_ptr = EX_VAR(opline->result.var); } else if (IS_TMP_VAR == IS_VAR) { if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) { retval_ptr = Z_INDIRECT_P(retval_ptr); } ZVAL_DEREF(retval_ptr); } else if (IS_TMP_VAR == IS_CV) { ZVAL_DEREF(retval_ptr); } if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type) && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr)) && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) && retval_ref != retval_ptr) ) { /* A cast might happen - unwrap the reference if this is a by-value return */ if (Z_REFCOUNT_P(retval_ref) == 1) { ZVAL_UNREF(retval_ref); } else { Z_DELREF_P(retval_ref); ZVAL_COPY(retval_ref, retval_ptr); } retval_ptr = retval_ref; } zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num)); #endif } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_TMP_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_TMP_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_UNUSED != IS_UNUSED) { zval *offset = NULL; zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_UNUSED != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_TMP_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_TMP_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_UNUSED != IS_UNUSED) { zval *key = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; zend_long count; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); do { if (Z_TYPE_P(op1) == IS_ARRAY) { count = zend_array_count(Z_ARRVAL_P(op1)); break; } else if (Z_TYPE_P(op1) == IS_OBJECT) { /* first, we check if the handler is defined */ if (Z_OBJ_HT_P(op1)->count_elements) { if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) { break; } } /* if not and the object implements Countable we call its count() method */ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) { zval retval; zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval); count = zval_get_long(&retval); zval_ptr_dtor(&retval); break; } /* If There's no handler and it doesn't implement Countable then add a warning */ count = 1; } else if (Z_TYPE_P(op1) == IS_NULL) { count = 0; } else { count = 1; } zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable"); } while (0); ZVAL_LONG(EX_VAR(opline->result.var), count); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (IS_TMP_VAR == IS_UNUSED) { if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_class() called without object from outside a class"); ZVAL_FALSE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name); ZEND_VM_NEXT_OPCODE(); } } else { zend_free_op free_op1; zval *op1; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_P(op1) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name); } else { zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1))); ZVAL_FALSE(EX_VAR(opline->result.var)); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; zend_string *type; SAVE_OPLINE(); op1 = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); type = zend_zval_get_type(op1); if (EXPECTED(type)) { ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type); } else { ZVAL_STRING(EX_VAR(opline->result.var), "unknown type"); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CV == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_string **rope; zval *var; /* op1 and result are the same */ rope = (zend_string**)EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (IS_CV == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_string **rope; zval *var, *ret; uint32_t i; size_t len = 0; char *target; rope = (zend_string**)EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); rope[opline->extended_value] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (IS_CV == IS_CV) { rope[opline->extended_value] = zend_string_copy(Z_STR_P(var)); } else { rope[opline->extended_value] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[opline->extended_value] = zval_get_string_func(var); if (UNEXPECTED(EG(exception))) { for (i = 0; i <= opline->extended_value; i++) { zend_string_release_ex(rope[i], 0); } ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } for (i = 0; i <= opline->extended_value; i++) { len += ZSTR_LEN(rope[i]); } ret = EX_VAR(opline->result.var); ZVAL_STR(ret, zend_string_alloc(len, 0)); target = Z_STRVAL_P(ret); for (i = 0; i <= opline->extended_value; i++) { memcpy(target, ZSTR_VAL(rope[i]), ZSTR_LEN(rope[i])); target += ZSTR_LEN(rope[i]); zend_string_release_ex(rope[i], 0); } *target = '\0'; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_TMP_VAR == IS_VAR || IS_TMP_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = NULL; if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_TMP_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_TMP_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CV != IS_UNUSED) { zval *offset = EX_VAR(opline->op2.var); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_TMP_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_TMP_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_TMP_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CV != IS_UNUSED) { zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *closure, *var; closure = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (opline->extended_value & ZEND_BIND_REF) { /* By-ref binding */ var = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC); if (Z_ISREF_P(var)) { Z_ADDREF_P(var); } else { ZVAL_MAKE_REF_EX(var, 2); } } else { var = EX_VAR(opline->op2.var); if (UNEXPECTED(Z_ISUNDEF_P(var))) { SAVE_OPLINE(); var = GET_OP2_UNDEF_CV(var, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZVAL_DEREF(var); Z_TRY_ADDREF_P(var); } zend_closure_bind_var_ex(closure, (opline->extended_value & ~ZEND_BIND_REF), var); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); increment_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); increment_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); decrement_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); decrement_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); increment_function(var_ptr); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); decrement_function(var_ptr); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); return_value = EX(return_value); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zend_free_op free_op1; SAVE_OPLINE(); do { if ((IS_VAR & (IS_CONST|IS_TMP_VAR)) || (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { /* Not supposed to happen, but we'll allow it */ zend_error(E_NOTICE, "Only variable references should be returned by reference"); retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (!EX(return_value)) { zval_ptr_dtor_nogc(free_op1); } else { if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(EX(return_value), retval_ptr); break; } ZVAL_NEW_REF(EX(return_value), retval_ptr); if (IS_VAR == IS_CONST) { Z_TRY_ADDREF_P(retval_ptr); } } break; } retval_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { if (retval_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) { zend_error(E_NOTICE, "Only variable references should be returned by reference"); if (EX(return_value)) { ZVAL_NEW_REF(EX(return_value), retval_ptr); } else { if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } break; } } if (EX(return_value)) { if (Z_ISREF_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } else { ZVAL_MAKE_REF_EX(retval_ptr, 2); } ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } while (0); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval; zend_free_op free_op1; zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); retval = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Copy return value into generator->retval */ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(&generator->retval, retval); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { Z_ADDREF(generator->retval); } } } else if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(&generator->retval, retval); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval))) { zend_refcounted *ref = Z_COUNTED_P(retval); retval = Z_REFVAL_P(retval); ZVAL_COPY_VALUE(&generator->retval, retval); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval)) { Z_ADDREF_P(retval); } } else { ZVAL_COPY_VALUE(&generator->retval, retval); } } /* Close the generator to free up resources */ zend_generator_close(generator, 1); /* Pass execution back to handling code */ ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zend_free_op free_op1; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); do { if (IS_VAR == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) { if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { break; } } if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Can only throw objects"); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } } while (0); zend_exception_save(); if (IS_VAR != IS_TMP_VAR) { Z_TRY_ADDREF_P(value); } zend_throw_exception_object(value); zend_exception_restore(); zval_ptr_dtor_nogc(free_op1); HANDLE_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr))) { ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(0)) { if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr) || QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) { ZEND_VM_NEXT_OPCODE(); } } else { if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr) || ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(1)) { if (!QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr) || QUICK_ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) { ZEND_VM_NEXT_OPCODE(); } } else { if (!ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_COPY_VALUE(arg, varptr); if (EXPECTED(Z_ISREF_P(varptr) || ARG_MAY_BE_SENT_BY_REF(EX(call)->func, arg_num))) { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); zend_error(E_NOTICE, "Only variables should be passed by reference"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *varptr, *arg; SAVE_OPLINE(); varptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) { ZVAL_NEW_EMPTY_REF(arg); ZVAL_NULL(Z_REFVAL_P(arg)); ZEND_VM_NEXT_OPCODE(); } if (Z_ISREF_P(varptr)) { Z_ADDREF_P(varptr); } else { ZVAL_MAKE_REF_EX(varptr, 2); } ZVAL_REF(arg, Z_REF_P(varptr)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (EXPECTED(0)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_var_by_ref; } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_var_by_ref: ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (EXPECTED(1)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_var_by_ref; } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_var_by_ref: ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *arg, *param; zend_free_op free_op1; SAVE_OPLINE(); arg = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); param = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) { zend_param_must_be_ref(EX(call)->func, opline->op2.num); } ZVAL_COPY(param, arg); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr; zval *result = EX_VAR(opline->result.var); HashTable *ht; SAVE_OPLINE(); expr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); switch (opline->extended_value) { case IS_NULL: ZVAL_NULL(result); break; case _IS_BOOL: ZVAL_BOOL(result, zend_is_true(expr)); break; case IS_LONG: ZVAL_LONG(result, zval_get_long(expr)); break; case IS_DOUBLE: ZVAL_DOUBLE(result, zval_get_double(expr)); break; case IS_STRING: ZVAL_STR(result, zval_get_string(expr)); break; default: if (IS_VAR & (IS_VAR|IS_CV)) { ZVAL_DEREF(expr); } /* If value is already of correct type, return it directly */ if (Z_TYPE_P(expr) == opline->extended_value) { ZVAL_COPY_VALUE(result, expr); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_VAR != IS_TMP_VAR) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (opline->extended_value == IS_ARRAY) { if (IS_VAR == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) { if (Z_TYPE_P(expr) != IS_NULL) { ZVAL_ARR(result, zend_new_array(1)); expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } else { ZVAL_EMPTY_ARRAY(result); } } else if (Z_OBJ_HT_P(expr)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr); if (obj_ht) { /* fast copy */ obj_ht = zend_proptable_to_symtable(obj_ht, (Z_OBJCE_P(expr)->default_properties_count || Z_OBJ_P(expr)->handlers != &std_object_handlers || GC_IS_RECURSIVE(obj_ht))); ZVAL_ARR(result, obj_ht); } else { ZVAL_EMPTY_ARRAY(result); } } else { ZVAL_COPY_VALUE(result, expr); Z_ADDREF_P(result); convert_to_array(result); } } else { ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def)); if (Z_TYPE_P(expr) == IS_ARRAY) { ht = zend_symtable_to_proptable(Z_ARR_P(expr)); if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) { /* TODO: try not to duplicate immutable arrays as well ??? */ ht = zend_array_dup(ht); } Z_OBJ_P(result)->properties = ht; } else if (Z_TYPE_P(expr) != IS_NULL) { Z_OBJ_P(result)->properties = ht = zend_new_array(1); expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } } } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *array_ptr, *result; SAVE_OPLINE(); array_ptr = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(array_ptr); } Z_FE_POS_P(result) = 0; zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE(); } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_VAR != IS_TMP_VAR) { Z_ADDREF_P(array_ptr); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op1); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; zval_ptr_dtor_nogc(free_op1); ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *array_ptr, *array_ref; SAVE_OPLINE(); if (IS_VAR == IS_VAR || IS_VAR == IS_CV) { array_ref = array_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } } else { array_ref = array_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); } if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { if (IS_VAR == IS_VAR || IS_VAR == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ref = EX_VAR(opline->result.var); ZVAL_NEW_REF(array_ref, array_ptr); array_ptr = Z_REFVAL_P(array_ref); } if (IS_VAR == IS_CONST) { ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr))); } else { SEPARATE_ARRAY(array_ptr); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0); if (IS_VAR == IS_VAR) { if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } ZEND_VM_NEXT_OPCODE(); } else if (IS_VAR != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { if (IS_VAR == IS_VAR || IS_VAR == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ptr = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(array_ptr, array_ref); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } else { zval_ptr_dtor_nogc(free_op1); } if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; if (IS_VAR == IS_VAR) { if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } else { zval_ptr_dtor_nogc(free_op1); } ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array; zval *value; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) { fe_ht = Z_ARRVAL_P(array); pos = Z_FE_POS_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ fe_fetch_r_exit: ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } Z_FE_POS_P(array) = pos + 1; if (RETURN_VALUE_USED(opline)) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } } else { zend_object_iterator *iter; ZEND_ASSERT(Z_TYPE_P(array) == IS_OBJECT); if ((iter = zend_iterator_unwrap(array)) == NULL) { /* plain object */ fe_ht = Z_OBJPROP_P(array); pos = zend_hash_iterator_pos(Z_FE_ITER_P(array), fe_ht); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ goto fe_fetch_r_exit; } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF) && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) { break; } } else { break; } } pos++; p++; } if (RETURN_VALUE_USED(opline)) { if (UNEXPECTED(!p->key)) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else if (ZSTR_VAL(p->key)[0]) { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } else { const char *class_name, *prop_name; size_t prop_name_len; zend_unmangle_property_name_ex( p->key, &class_name, &prop_name, &prop_name_len); ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len); } } EG(ht_iterators)[Z_FE_ITER_P(array)].pos = pos + 1; } else { if (EXPECTED(++iter->index > 0)) { /* This could cause an endless loop if index becomes zero again. * In case that ever happens we need an additional flag. */ iter->funcs->move_forward(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) { /* reached end of iteration */ if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } goto fe_fetch_r_exit; } } value = iter->funcs->get_current_data(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!value) { /* failure in get_current_data */ goto fe_fetch_r_exit; } if (RETURN_VALUE_USED(opline)) { if (iter->funcs->get_current_key) { iter->funcs->get_current_key(iter, EX_VAR(opline->result.var)); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else { ZVAL_LONG(EX_VAR(opline->result.var), iter->index); } } value_type = Z_TYPE_INFO_P(value); } } if (EXPECTED(opline->op2_type == IS_CV)) { zval *variable_ptr = EX_VAR(opline->op2.var); zend_assign_to_variable(variable_ptr, value, IS_CV); } else { zval *res = EX_VAR(opline->op2.var); zend_refcounted *gc = Z_COUNTED_P(value); ZVAL_COPY_VALUE_EX(res, value, gc, value_type); if (Z_TYPE_INFO_REFCOUNTED(value_type)) { GC_ADDREF(gc); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array; zval *value; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); ZVAL_DEREF(array); if (EXPECTED(Z_TYPE_P(array) == IS_ARRAY)) { pos = zend_hash_iterator_pos_ex(Z_FE_ITER_P(EX_VAR(opline->op1.var)), array); fe_ht = Z_ARRVAL_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ goto fe_fetch_w_exit; } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } if (RETURN_VALUE_USED(opline)) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1; } else if (EXPECTED(Z_TYPE_P(array) == IS_OBJECT)) { zend_object_iterator *iter; if ((iter = zend_iterator_unwrap(array)) == NULL) { /* plain object */ fe_ht = Z_OBJPROP_P(array); pos = zend_hash_iterator_pos(Z_FE_ITER_P(EX_VAR(opline->op1.var)), fe_ht); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ goto fe_fetch_w_exit; } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF) && EXPECTED(zend_check_property_access(Z_OBJ_P(array), p->key) == SUCCESS)) { break; } } else { break; } } pos++; p++; } if (RETURN_VALUE_USED(opline)) { if (UNEXPECTED(!p->key)) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else if (ZSTR_VAL(p->key)[0]) { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } else { const char *class_name, *prop_name; size_t prop_name_len; zend_unmangle_property_name_ex( p->key, &class_name, &prop_name, &prop_name_len); ZVAL_STRINGL(EX_VAR(opline->result.var), prop_name, prop_name_len); } } EG(ht_iterators)[Z_FE_ITER_P(EX_VAR(opline->op1.var))].pos = pos + 1; } else { if (++iter->index > 0) { /* This could cause an endless loop if index becomes zero again. * In case that ever happens we need an additional flag. */ iter->funcs->move_forward(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (UNEXPECTED(iter->funcs->valid(iter) == FAILURE)) { /* reached end of iteration */ if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } goto fe_fetch_w_exit; } } value = iter->funcs->get_current_data(iter); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (!value) { /* failure in get_current_data */ goto fe_fetch_w_exit; } if (RETURN_VALUE_USED(opline)) { if (iter->funcs->get_current_key) { iter->funcs->get_current_key(iter, EX_VAR(opline->result.var)); if (UNEXPECTED(EG(exception) != NULL)) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else { ZVAL_LONG(EX_VAR(opline->result.var), iter->index); } } value_type = Z_TYPE_INFO_P(value); } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); if (UNEXPECTED(EG(exception))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } fe_fetch_w_exit: ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } if (EXPECTED((value_type & Z_TYPE_MASK) != IS_REFERENCE)) { zend_refcounted *gc = Z_COUNTED_P(value); zval *ref; ZVAL_NEW_EMPTY_REF(value); ref = Z_REFVAL_P(value); ZVAL_COPY_VALUE_EX(ref, value, gc, value_type); } if (EXPECTED(opline->op2_type == IS_CV)) { zval *variable_ptr = EX_VAR(opline->op2.var); if (EXPECTED(variable_ptr != value)) { zend_reference *ref; ref = Z_REF_P(value); GC_ADDREF(ref); zval_ptr_dtor(variable_ptr); ZVAL_REF(variable_ptr, ref); } } else { Z_ADDREF_P(value); ZVAL_REF(EX_VAR(opline->op2.var), Z_REF_P(value)); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *ref = NULL; int ret; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } ret = i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { zval_ptr_dtor_nogc(free_op1); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (ret) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if (IS_VAR == IS_VAR && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *result = EX_VAR(opline->result.var); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZVAL_NULL(result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (IS_VAR == IS_CV) { ZVAL_COPY_DEREF(result, value); } else if (IS_VAR == IS_VAR) { if (UNEXPECTED(Z_ISREF_P(value))) { ZVAL_COPY_VALUE(result, Z_REFVAL_P(value)); if (UNEXPECTED(Z_DELREF_P(value) == 0)) { efree_size(Z_REF_P(value), sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } else { ZVAL_COPY_VALUE(result, value); } } else { ZVAL_COPY_VALUE(result, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) { Z_ADDREF_P(result); } } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zval *val; zend_free_op free_op1; SAVE_OPLINE(); val = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator"); zval_ptr_dtor_nogc(free_op1); UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (Z_TYPE_P(val) == IS_ARRAY) { ZVAL_COPY_VALUE(&generator->values, val); if (IS_VAR != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) { Z_ADDREF_P(val); } Z_FE_POS(generator->values) = 0; zval_ptr_dtor_nogc(free_op1); } else if (IS_VAR != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) { zend_class_entry *ce = Z_OBJCE_P(val); if (ce == zend_ce_generator) { zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val); if (IS_VAR != IS_TMP_VAR) { Z_ADDREF_P(val); } zval_ptr_dtor_nogc(free_op1); if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval); } ZEND_VM_NEXT_OPCODE(); } } else { zend_object_iterator *iter = ce->get_iterator(ce, val, 0); zval_ptr_dtor_nogc(free_op1); if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) { if (!EG(exception)) { zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } iter->index = 0; if (iter->funcs->rewind) { iter->funcs->rewind(iter); if (UNEXPECTED(EG(exception) != NULL)) { OBJ_RELEASE(&iter->std); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } ZVAL_OBJ(&generator->values, &iter->std); } } else { zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables"); zval_ptr_dtor_nogc(free_op1); UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* This is the default return value * when the expression is a Generator, it will be overwritten in zend_generator_resume() */ if (RETURN_VALUE_USED(opline)) { ZVAL_NULL(EX_VAR(opline->result.var)); } /* This generator has no send target (though the generator we delegate to might have one) */ generator->send_target = NULL; /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_VAR == IS_CV) { ZVAL_COPY(arg, varptr); } else /* if (IS_VAR == IS_VAR) */ { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; zend_free_op free_op1; uint32_t arg_num = opline->op2.num; if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_VAR == IS_CV) { ZVAL_COPY(arg, varptr); } else /* if (IS_VAR == IS_VAR) */ { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if (IS_CONST == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP(free_op_data1); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; zval *value; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op2); var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CONST == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *property, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = RT_CONSTANT(opline, opline->op2); if (IS_VAR == IS_VAR && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT && UNEXPECTED(!Z_ISREF_P(container)) ) { zend_error(E_NOTICE, "Attempting to set reference to non referenceable value"); zend_fetch_dimension_address_LIST_r(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC); } else { zend_fetch_dimension_address_W(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op2); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CONST); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op2); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CONST); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_VAR == IS_CONST && IS_CONST == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_VAR != IS_CONST && IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_CONST != IS_UNUSED) { function_name = RT_CONSTANT(opline, opline->op2); if (IS_CONST != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_CONST != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_VAR == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_class_entry *ce, *scope; zend_class_constant *c; zval *value, *zv; USE_OPLINE SAVE_OPLINE(); do { if (IS_VAR == IS_CONST) { if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else if (EXPECTED(CACHED_PTR(opline->extended_value))) { ce = CACHED_PTR(opline->extended_value); } else { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1); if (EXPECTED(zv != NULL)) { c = Z_PTR_P(zv); scope = EX(func)->op_array.scope; if (!zend_verify_const_access(c, scope)) { zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } value = &c->value; if (Z_TYPE_P(value) == IS_CONSTANT_AST) { zval_update_constant_ex(value, c->ce); if (UNEXPECTED(EG(exception) != NULL)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value); } else { zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } while (0); ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } else { expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CONST != IS_UNUSED) { zval *offset = RT_CONSTANT(opline, opline->op2); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); offset = RT_CONSTANT(opline, opline->op2); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; unset_dim_array: SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); offset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { goto num_index_dim; } } str_index_dim: if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_dim: zend_hash_index_del(ht, hval); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto offset_again; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto unset_dim_array; } } if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } } else { zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); zval_ptr_dtor_nogc(free_op1); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CONST != IS_UNUSED) { zval *key = RT_CONSTANT(opline, opline->op2); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { result = zend_hash_exists(ht, Z_STR_P(op1)); } else if (opline->extended_value) { if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { result = zend_hash_index_exists(ht, Z_LVAL_P(op1)); } else { result = 0; } } else if (Z_TYPE_P(op1) <= IS_FALSE) { result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC()); } else { zend_string *key; zval key_tmp, result_tmp; result = 0; ZEND_HASH_FOREACH_STR_KEY(ht, key) { ZVAL_STR(&key_tmp, key); compare_function(&result_tmp, op1, &key_tmp); if (Z_LVAL(result_tmp) == 0) { result = 1; break; } } ZEND_HASH_FOREACH_END(); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } zval_ptr_dtor_nogc(free_op2); FREE_OP(free_op_data1); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op2; zval *var_ptr; zval *value; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *property, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT && UNEXPECTED(!Z_ISREF_P(container)) ) { zend_error(E_NOTICE, "Attempting to set reference to non referenceable value"); zend_fetch_dimension_address_LIST_r(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); } else { zend_fetch_dimension_address_W(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_VAR == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_VAR != IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_VAR == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } else { expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } zval_ptr_dtor_nogc(free_op2); } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; unset_dim_array: SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); offset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { goto num_index_dim; } } str_index_dim: if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_dim: zend_hash_index_del(ht, hval); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto offset_again; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto unset_dim_array; } } if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } } else { zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); zval_ptr_dtor_nogc(free_op1); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op1); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_VAR); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_VAR); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *variable_ptr; zval *value_ptr; SAVE_OPLINE(); value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION && UNEXPECTED(!Z_ISREF_P(value_ptr))) { if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_VAR OPLINE_CC EXECUTE_DATA_CC))) { if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* op2 freed by assign_to_variable */ if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE(); } else { zend_assign_to_variable_reference(variable_ptr, value_ptr); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr); } if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } } else { zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); zval_ptr_dtor_nogc(free_op1); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); zval_ptr_dtor_nogc(free_op2); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = NULL; if (IS_UNUSED == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if (IS_UNUSED == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = NULL; if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP(free_op_data1); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_EX(1, 2); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_UNUSED == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_UNUSED_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_UNUSED == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_UNUSED != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_VAR == IS_CONST && IS_UNUSED == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_VAR != IS_CONST && IS_UNUSED == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_UNUSED != IS_UNUSED) { function_name = NULL; if (IS_UNUSED != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_UNUSED == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_UNUSED != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_VAR == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_VAR == IS_UNUSED) { zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num)); } else { /* prevents "undefined variable opline" errors */ #if 0 || (IS_VAR != IS_UNUSED) zval *retval_ref, *retval_ptr; zend_free_op free_op1; zend_arg_info *ret_info = EX(func)->common.arg_info - 1; retval_ref = retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_CONST) { ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr); retval_ref = retval_ptr = EX_VAR(opline->result.var); } else if (IS_VAR == IS_VAR) { if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) { retval_ptr = Z_INDIRECT_P(retval_ptr); } ZVAL_DEREF(retval_ptr); } else if (IS_VAR == IS_CV) { ZVAL_DEREF(retval_ptr); } if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type) && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr)) && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) && retval_ref != retval_ptr) ) { /* A cast might happen - unwrap the reference if this is a by-value return */ if (Z_REFCOUNT_P(retval_ref) == 1) { ZVAL_UNREF(retval_ref); } else { Z_DELREF_P(retval_ref); ZVAL_COPY(retval_ref, retval_ptr); } retval_ptr = retval_ref; } zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num)); #endif } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *result; zend_function *constructor; zend_class_entry *ce; zend_execute_data *call; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { ce = CACHED_PTR(opline->op2.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } CACHE_PTR(opline->op2.num, ce); } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } result = EX_VAR(opline->result.var); if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) { ZVAL_UNDEF(result); HANDLE_EXCEPTION(); } constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result)); if (constructor == NULL) { if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next * opcode is DO_FCALL in case EXT instructions are used. */ if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) { ZEND_VM_NEXT_OPCODE_EX(1, 2); } /* Perform a dummy function call */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function, opline->extended_value, NULL, NULL); } else { if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) { init_func_run_time_cache(&constructor->op_array); } /* We are not handling overloaded classes right now */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR, constructor, opline->extended_value, ce, Z_OBJ_P(result)); Z_ADDREF_P(result); } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } else { expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_UNUSED != IS_UNUSED) { zval *offset = NULL; zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_UNUSED != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (UNEXPECTED(Z_ISREF_P(var_ptr))) { if (UNEXPECTED(Z_REFCOUNT_P(var_ptr) == 1)) { ZVAL_UNREF(var_ptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } } else { zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); zval_ptr_dtor_nogc(free_op1); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_UNUSED != IS_UNUSED) { zval *key = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1 = EX_VAR(opline->op1.var); if (IS_VAR == IS_CV) { if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { ZVAL_NEW_EMPTY_REF(op1); Z_SET_REFCOUNT_P(op1, 2); ZVAL_NULL(Z_REFVAL_P(op1)); ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } else { if (Z_ISREF_P(op1)) { Z_ADDREF_P(op1); } else { ZVAL_MAKE_REF_EX(op1, 2); } ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) { op1 = Z_INDIRECT_P(op1); if (EXPECTED(!Z_ISREF_P(op1))) { ZVAL_MAKE_REF_EX(op1, 2); } else { GC_ADDREF(Z_REF_P(op1)); } ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } else { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; zend_long count; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); do { if (Z_TYPE_P(op1) == IS_ARRAY) { count = zend_array_count(Z_ARRVAL_P(op1)); break; } else if (Z_TYPE_P(op1) == IS_OBJECT) { /* first, we check if the handler is defined */ if (Z_OBJ_HT_P(op1)->count_elements) { if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) { break; } } /* if not and the object implements Countable we call its count() method */ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) { zval retval; zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval); count = zval_get_long(&retval); zval_ptr_dtor(&retval); break; } /* If There's no handler and it doesn't implement Countable then add a warning */ count = 1; } else if (Z_TYPE_P(op1) == IS_NULL) { count = 0; } else { count = 1; } zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable"); } while (0); ZVAL_LONG(EX_VAR(opline->result.var), count); zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (IS_VAR == IS_UNUSED) { if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_class() called without object from outside a class"); ZVAL_FALSE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name); ZEND_VM_NEXT_OPCODE(); } } else { zend_free_op free_op1; zval *op1; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_TYPE_P(op1) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name); } else { zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1))); ZVAL_FALSE(EX_VAR(opline->result.var)); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *op1; zend_string *type; SAVE_OPLINE(); op1 = _get_zval_ptr_var_deref(opline->op1.var, &free_op1 EXECUTE_DATA_CC); type = zend_zval_get_type(op1); if (EXPECTED(type)) { ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type); } else { ZVAL_STRING(EX_VAR(opline->result.var), "unknown type"); } zval_ptr_dtor_nogc(free_op1); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1, free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = EX_VAR(opline->op2.var); if (IS_CV == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if (IS_CV == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP(free_op_data1); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *var_ptr; zval *value; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); var_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_VAR != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_VAR_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_VAR_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_VAR_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op1; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_VAR_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CV == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); if (IS_VAR == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *property, *result; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_VAR, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); if (IS_VAR == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *dim; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); dim = EX_VAR(opline->op2.var); if (IS_VAR == IS_VAR && Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT && UNEXPECTED(!Z_ISREF_P(container)) ) { zend_error(E_NOTICE, "Attempting to set reference to non referenceable value"); zend_fetch_dimension_address_LIST_r(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC); } else { zend_fetch_dimension_address_W(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_VAR != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CV); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CV); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *variable_ptr; zval *value_ptr; SAVE_OPLINE(); value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC); variable_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION && UNEXPECTED(!Z_ISREF_P(value_ptr))) { if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_CV OPLINE_CC EXECUTE_DATA_CC))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* op2 freed by assign_to_variable */ if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE(); } else { zend_assign_to_variable_reference(variable_ptr, value_ptr); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_CV != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_VAR == IS_CONST && IS_CV == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_VAR != IS_CONST && IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_CV != IS_UNUSED) { function_name = EX_VAR(opline->op2.var); if (IS_CV != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_CV != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_VAR == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_VAR == IS_VAR || IS_VAR == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } else { expr_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_TMP_VAR) { /* pass */ } else if (IS_VAR == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_VAR == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CV != IS_UNUSED) { zval *offset = EX_VAR(opline->op2.var); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_VAR != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); offset = EX_VAR(opline->op2.var); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; unset_dim_array: SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); offset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { goto num_index_dim; } } str_index_dim: if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_dim: zend_hash_index_del(ht, hval); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto offset_again; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto unset_dim_array; } } if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); if (IS_VAR == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_VAR != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op1; if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_VAR & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_VAR == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } if (UNEXPECTED(free_op1)) {zval_ptr_dtor_nogc(free_op1);}; } } else { zval *value = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); zval_ptr_dtor_nogc(free_op1); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CV != IS_UNUSED) { zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array; zval *value, *variable_ptr; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); fe_ht = Z_ARRVAL_P(array); pos = Z_FE_POS_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } Z_FE_POS_P(array) = pos + 1; if (0) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } variable_ptr = EX_VAR(opline->op2.var); zend_assign_to_variable(variable_ptr, value, IS_CV); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array; zval *value, *variable_ptr; uint32_t value_type; HashTable *fe_ht; HashPosition pos; Bucket *p; array = EX_VAR(opline->op1.var); SAVE_OPLINE(); fe_ht = Z_ARRVAL_P(array); pos = Z_FE_POS_P(array); p = fe_ht->arData + pos; while (1) { if (UNEXPECTED(pos >= fe_ht->nNumUsed)) { /* reached end of iteration */ ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } value = &p->val; value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { if (UNEXPECTED(value_type == IS_INDIRECT)) { value = Z_INDIRECT_P(value); value_type = Z_TYPE_INFO_P(value); if (EXPECTED(value_type != IS_UNDEF)) { break; } } else { break; } } pos++; p++; } Z_FE_POS_P(array) = pos + 1; if (1) { if (!p->key) { ZVAL_LONG(EX_VAR(opline->result.var), p->h); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), p->key); } } variable_ptr = EX_VAR(opline->op2.var); zend_assign_to_variable(variable_ptr, value, IS_CV); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE uint32_t arg_num = opline->op2.num; if (EXPECTED(0)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } else { ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } else { ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE uint32_t arg_num = opline->op2.num; if (EXPECTED(1)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } else { ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_ADD_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } else { ZEND_DEL_CALL_FLAG(EX(call), ZEND_CALL_SEND_ARG_BY_REF); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *obj; zend_class_entry *ce, *scope; zend_function *clone; zend_object_clone_obj_t clone_call; SAVE_OPLINE(); obj = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } do { if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) { obj = Z_REFVAL_P(obj); if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) { break; } } ZVAL_UNDEF(EX_VAR(opline->result.var)); if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "__clone method called on non-object"); HANDLE_EXCEPTION(); } } while (0); ce = Z_OBJCE_P(obj); clone = ce->clone; clone_call = Z_OBJ_HT_P(obj)->clone_obj; if (UNEXPECTED(clone_call == NULL)) { zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (clone) { if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (!zend_check_private(clone, scope, clone->common.function_name)) { zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) { zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_UNUSED != IS_UNUSED) { zval *ptr = NULL; do { if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) { ptr = Z_REFVAL_P(ptr); if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); break; } } zend_print_zval(ptr, 0); } } while (0); } zend_bailout(); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { uint32_t fetch_type; zend_class_entry *called_scope, *scope; USE_OPLINE fetch_type = opline->op1.num; scope = EX(func)->op_array.scope; if (UNEXPECTED(scope == NULL)) { SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use \"%s\" when no class scope is active", fetch_type == ZEND_FETCH_CLASS_SELF ? "self" : fetch_type == ZEND_FETCH_CLASS_PARENT ? "parent" : "static"); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } switch (fetch_type) { case ZEND_FETCH_CLASS_SELF: ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->name); break; case ZEND_FETCH_CLASS_PARENT: if (UNEXPECTED(scope->parent == NULL)) { SAVE_OPLINE(); zend_throw_error(NULL, "Cannot use \"parent\" when current class scope has no parent"); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } ZVAL_STR_COPY(EX_VAR(opline->result.var), scope->parent->name); break; case ZEND_FETCH_CLASS_STATIC: if (Z_TYPE(EX(This)) == IS_OBJECT) { called_scope = Z_OBJCE(EX(This)); } else { called_scope = Z_CE(EX(This)); } ZVAL_STR_COPY(EX_VAR(opline->result.var), called_scope->name); break; EMPTY_SWITCH_DEFAULT_CASE() } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_UNUSED != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *property, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_string **rope; zval *var; /* Compiler allocates the necessary number of zval slots to keep the rope */ rope = (zend_string**)EX_VAR(opline->result.var); if (IS_CONST == IS_CONST) { var = RT_CONSTANT(opline, opline->op2); rope[0] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (IS_CONST == IS_CV) { rope[0] = zend_string_copy(Z_STR_P(var)); } else { rope[0] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[0] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *class_name; USE_OPLINE SAVE_OPLINE(); if (IS_CONST == IS_UNUSED) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else if (IS_CONST == IS_CONST) { zend_class_entry *ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { class_name = RT_CONSTANT(opline, opline->op2); ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num); CACHE_PTR(opline->extended_value, ce); } Z_CE_P(EX_VAR(opline->result.var)) = ce; } else { class_name = RT_CONSTANT(opline, opline->op2); try_class_name: if (Z_TYPE_P(class_name) == IS_OBJECT) { Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name); } else if (Z_TYPE_P(class_name) == IS_STRING) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) { class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CONST != IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); HANDLE_EXCEPTION(); } while (0); } if (IS_UNUSED != IS_UNUSED) { do { if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CONST != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } zend_invalid_method_call(object, function_name); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CONST != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_UNUSED == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_CONST != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_UNUSED == IS_CONST && IS_CONST == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_UNUSED != IS_CONST && IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_CONST != IS_UNUSED) { function_name = RT_CONSTANT(opline, opline->op2); if (IS_CONST != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_CONST & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_CONST != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_UNUSED == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_constant *c; c = CACHED_PTR(opline->extended_value); if (EXPECTED(c != NULL) && EXPECTED(!IS_SPECIAL_CACHE_VAL(c))) { ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), &c->value); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); zend_quick_get_constant(RT_CONSTANT(opline, opline->op2) + 1, opline->op1.num OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_class_entry *ce, *scope; zend_class_constant *c; zval *value, *zv; USE_OPLINE SAVE_OPLINE(); do { if (IS_UNUSED == IS_CONST) { if (EXPECTED(CACHED_PTR(opline->extended_value + sizeof(void*)))) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else if (EXPECTED(CACHED_PTR(opline->extended_value))) { ce = CACHED_PTR(opline->extended_value); } else { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { value = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } zv = zend_hash_find_ex(&ce->constants_table, Z_STR_P(RT_CONSTANT(opline, opline->op2)), 1); if (EXPECTED(zv != NULL)) { c = Z_PTR_P(zv); scope = EX(func)->op_array.scope; if (!zend_verify_const_access(c, scope)) { zend_throw_error(NULL, "Cannot access %s const %s::%s", zend_visibility_string(Z_ACCESS_FLAGS(c->value)), ZSTR_VAL(ce->name), Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } value = &c->value; if (Z_TYPE_P(value) == IS_CONSTANT_AST) { zval_update_constant_ex(value, c->ce); if (UNEXPECTED(EG(exception) != NULL)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, value); } else { zend_throw_error(NULL, "Undefined class constant '%s'", Z_STRVAL_P(RT_CONSTANT(opline, opline->op2))); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } while (0); ZVAL_COPY_OR_DUP(EX_VAR(opline->result.var), value); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zval *offset; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_UNUSED != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = NULL; ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_UNUSED == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CONST != IS_UNUSED) { zval *key = RT_CONSTANT(opline, opline->op2); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2, free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_UNUSED != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *property, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zend_string **rope; zval *var; /* Compiler allocates the necessary number of zval slots to keep the rope */ rope = (zend_string**)EX_VAR(opline->result.var); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); rope[0] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_CV) { rope[0] = zend_string_copy(Z_STR_P(var)); } else { rope[0] = Z_STR_P(var); } } else { SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[0] = zval_get_string_func(var); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zend_free_op free_op2; zval *class_name; USE_OPLINE SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { zend_class_entry *ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num); CACHE_PTR(opline->extended_value, ce); } Z_CE_P(EX_VAR(opline->result.var)) = ce; } else { class_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); try_class_name: if (Z_TYPE_P(class_name) == IS_OBJECT) { Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name); } else if (Z_TYPE_P(class_name) == IS_STRING) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) { class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1, free_op2; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } while (0); } if (IS_UNUSED != IS_UNUSED) { do { if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } HANDLE_EXCEPTION(); } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } zend_invalid_method_call(object, function_name); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_UNUSED == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); zval_ptr_dtor_nogc(EX_VAR(opline->op2.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_UNUSED == IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_UNUSED != IS_CONST && (IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_UNUSED == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; zval *offset; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; int result; zval *offset; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_UNUSED != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = NULL; ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_UNUSED == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_UNUSED != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = NULL; ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_UNUSED == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); zval_ptr_dtor_nogc(free_op2); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *class_name; USE_OPLINE SAVE_OPLINE(); if (IS_UNUSED == IS_UNUSED) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else if (IS_UNUSED == IS_CONST) { zend_class_entry *ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { class_name = NULL; ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num); CACHE_PTR(opline->extended_value, ce); } Z_CE_P(EX_VAR(opline->result.var)) = ce; } else { class_name = NULL; try_class_name: if (Z_TYPE_P(class_name) == IS_OBJECT) { Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name); } else if (Z_TYPE_P(class_name) == IS_STRING) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) { class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_UNUSED != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_UNUSED == IS_CONST && IS_UNUSED == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_UNUSED != IS_CONST && IS_UNUSED == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_UNUSED != IS_UNUSED) { function_name = NULL; if (IS_UNUSED != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_UNUSED & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_UNUSED == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_UNUSED == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_UNUSED != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_UNUSED == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_UNUSED == IS_UNUSED) { zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num)); } else { /* prevents "undefined variable opline" errors */ #if 0 || (IS_UNUSED != IS_UNUSED) zval *retval_ref, *retval_ptr; zend_arg_info *ret_info = EX(func)->common.arg_info - 1; retval_ref = retval_ptr = NULL; if (IS_UNUSED == IS_CONST) { ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr); retval_ref = retval_ptr = EX_VAR(opline->result.var); } else if (IS_UNUSED == IS_VAR) { if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) { retval_ptr = Z_INDIRECT_P(retval_ptr); } ZVAL_DEREF(retval_ptr); } else if (IS_UNUSED == IS_CV) { ZVAL_DEREF(retval_ptr); } if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type) && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr)) && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) && retval_ref != retval_ptr) ) { /* A cast might happen - unwrap the reference if this is a by-value return */ if (Z_REFCOUNT_P(retval_ref) == 1) { ZVAL_UNREF(retval_ref); } else { Z_DELREF_P(retval_ref); ZVAL_COPY(retval_ref, retval_ptr); } retval_ptr = retval_ref; } zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num)); #endif } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *result; zend_function *constructor; zend_class_entry *ce; zend_execute_data *call; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { ce = CACHED_PTR(opline->op2.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } CACHE_PTR(opline->op2.num, ce); } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } result = EX_VAR(opline->result.var); if (UNEXPECTED(object_init_ex(result, ce) != SUCCESS)) { ZVAL_UNDEF(result); HANDLE_EXCEPTION(); } constructor = Z_OBJ_HT_P(result)->get_constructor(Z_OBJ_P(result)); if (constructor == NULL) { if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } /* If there are no arguments, skip over the DO_FCALL opcode. We check if the next * opcode is DO_FCALL in case EXT instructions are used. */ if (EXPECTED(opline->extended_value == 0 && (opline+1)->opcode == ZEND_DO_FCALL)) { ZEND_VM_NEXT_OPCODE_EX(1, 2); } /* Perform a dummy function call */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION, (zend_function *) &zend_pass_function, opline->extended_value, NULL, NULL); } else { if (EXPECTED(constructor->type == ZEND_USER_FUNCTION) && UNEXPECTED(!constructor->op_array.run_time_cache)) { init_func_run_time_cache(&constructor->op_array); } /* We are not handling overloaded classes right now */ call = zend_vm_stack_push_call_frame( ZEND_CALL_FUNCTION | ZEND_CALL_RELEASE_THIS | ZEND_CALL_CTOR, constructor, opline->extended_value, ce, Z_OBJ_P(result)); Z_ADDREF_P(result); } call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_UNUSED != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = NULL; ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_UNUSED == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_UNUSED != IS_UNUSED) { zval *key = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (EXPECTED(Z_TYPE(EX(This)) == IS_OBJECT)) { zval *result = EX_VAR(opline->result.var); ZVAL_OBJ(result, Z_OBJ(EX(This))); Z_ADDREF_P(result); ZEND_VM_NEXT_OPCODE(); } else { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE ZVAL_BOOL(EX_VAR(opline->result.var), (opline->extended_value & ZEND_ISEMPTY) ^ (Z_TYPE(EX(This)) == IS_OBJECT)); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (IS_UNUSED == IS_UNUSED) { if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_class() called without object from outside a class"); ZVAL_FALSE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name); ZEND_VM_NEXT_OPCODE(); } } else { zval *op1; SAVE_OPLINE(); op1 = NULL; if (Z_TYPE_P(op1) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name); } else { zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1))); ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (Z_TYPE(EX(This)) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE(EX(This))->name); } else if (Z_CE(EX(This))) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_CE(EX(This))->name); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_called_class() called from outside a class"); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE ZVAL_LONG(EX_VAR(opline->result.var), EX_NUM_ARGS()); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_array *ht; uint32_t arg_count, result_size, skip; arg_count = EX_NUM_ARGS(); if (IS_UNUSED == IS_CONST) { skip = Z_LVAL_P(RT_CONSTANT(opline, opline->op1)); if (arg_count < skip) { result_size = 0; } else { result_size = arg_count - skip; } } else { skip = 0; result_size = arg_count; } if (result_size) { uint32_t first_extra_arg = EX(func)->op_array.num_args; ht = zend_new_array(result_size); ZVAL_ARR(EX_VAR(opline->result.var), ht); zend_hash_real_init_packed(ht); ZEND_HASH_FILL_PACKED(ht) { zval *p, *q; uint32_t i = skip; p = EX_VAR_NUM(i); if (arg_count > first_extra_arg) { while (i < first_extra_arg) { q = p; if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) { ZVAL_DEREF(q); if (Z_OPT_REFCOUNTED_P(q)) { Z_ADDREF_P(q); } } else { q = &EG(uninitialized_zval); } ZEND_HASH_FILL_ADD(q); p++; i++; } if (skip < first_extra_arg) { skip = 0; } else { skip -= first_extra_arg; } p = EX_VAR_NUM(EX(func)->op_array.last_var + EX(func)->op_array.T + skip); } while (i < arg_count) { q = p; if (EXPECTED(Z_TYPE_INFO_P(q) != IS_UNDEF)) { ZVAL_DEREF(q); if (Z_OPT_REFCOUNTED_P(q)) { Z_ADDREF_P(q); } } else { q = &EG(uninitialized_zval); } ZEND_HASH_FILL_ADD(q); p++; i++; } } ZEND_HASH_FILL_END(); ht->nNumOfElements = result_size; } else { ZVAL_EMPTY_ARRAY(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_UNUSED != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_UNUSED_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_UNUSED_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_UNUSED_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_UNUSED_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = EX_VAR(opline->op2.var); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_UNUSED & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *property, *result; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_UNUSED, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); if (IS_UNUSED == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_string **rope; zval *var; /* Compiler allocates the necessary number of zval slots to keep the rope */ rope = (zend_string**)EX_VAR(opline->result.var); if (IS_CV == IS_CONST) { var = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); rope[0] = Z_STR_P(var); if (UNEXPECTED(Z_REFCOUNTED_P(var))) { Z_ADDREF_P(var); } } else { var = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(var) == IS_STRING)) { if (IS_CV == IS_CV) { rope[0] = zend_string_copy(Z_STR_P(var)); } else { rope[0] = Z_STR_P(var); } } else { SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var) == IS_UNDEF)) { GET_OP2_UNDEF_CV(var, BP_VAR_R); } rope[0] = zval_get_string_func(var); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *class_name; USE_OPLINE SAVE_OPLINE(); if (IS_CV == IS_UNUSED) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(NULL, opline->op1.num); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else if (IS_CV == IS_CONST) { zend_class_entry *ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { class_name = EX_VAR(opline->op2.var); ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, opline->op1.num); CACHE_PTR(opline->extended_value, ce); } Z_CE_P(EX_VAR(opline->result.var)) = ce; } else { class_name = EX_VAR(opline->op2.var); try_class_name: if (Z_TYPE_P(class_name) == IS_OBJECT) { Z_CE_P(EX_VAR(opline->result.var)) = Z_OBJCE_P(class_name); } else if (Z_TYPE_P(class_name) == IS_STRING) { Z_CE_P(EX_VAR(opline->result.var)) = zend_fetch_class(Z_STR_P(class_name), opline->op1.num); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(class_name) == IS_REFERENCE) { class_name = Z_REFVAL_P(class_name); goto try_class_name; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(class_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(class_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Class name must be a valid object or a string"); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CV != IS_CONST) { function_name = EX_VAR(opline->op2.var); } if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); HANDLE_EXCEPTION(); } while (0); } if (IS_UNUSED != IS_UNUSED) { do { if (IS_UNUSED == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_UNUSED == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CV != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } zend_invalid_method_call(object, function_name); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CV != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_UNUSED & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_UNUSED & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_UNUSED == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_class_entry *ce; zend_object *object; zend_function *fbc; zend_execute_data *call; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { /* no function found. try a static method in class */ ce = CACHED_PTR(opline->result.num); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op1)), RT_CONSTANT(opline, opline->op1) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } if (IS_CV != IS_CONST) { CACHE_PTR(opline->result.num, ce); } } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op1.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op1.var)); } if (IS_UNUSED == IS_CONST && IS_CV == IS_CONST && EXPECTED((fbc = CACHED_PTR(opline->result.num + sizeof(void*))) != NULL)) { /* nothing to do */ } else if (IS_UNUSED != IS_CONST && IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == ce)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else if (IS_CV != IS_UNUSED) { function_name = EX_VAR(opline->op2.var); if (IS_CV != IS_CONST) { if (UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (IS_CV & (IS_VAR|IS_CV) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Function name must be a string"); HANDLE_EXCEPTION(); } while (0); } } if (ce->get_static_method) { fbc = ce->get_static_method(ce, Z_STR_P(function_name)); } else { fbc = zend_std_get_static_method(ce, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); } if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE)))) { CACHE_POLYMORPHIC_PTR(opline->result.num, ce, fbc); } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } if (IS_CV != IS_CONST) { } } else { if (UNEXPECTED(ce->constructor == NULL)) { zend_throw_error(NULL, "Cannot call constructor"); HANDLE_EXCEPTION(); } if (Z_TYPE(EX(This)) == IS_OBJECT && Z_OBJ(EX(This))->ce != ce->constructor->common.scope && (ce->constructor->common.fn_flags & ZEND_ACC_PRIVATE)) { zend_throw_error(NULL, "Cannot call private %s::__construct()", ZSTR_VAL(ce->name)); HANDLE_EXCEPTION(); } fbc = ce->constructor; if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } object = NULL; if (!(fbc->common.fn_flags & ZEND_ACC_STATIC)) { if (Z_TYPE(EX(This)) == IS_OBJECT && instanceof_function(Z_OBJCE(EX(This)), ce)) { object = Z_OBJ(EX(This)); ce = object->ce; } else { zend_non_static_method_call(fbc); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } } if (IS_UNUSED == IS_UNUSED) { /* previous opcode is ZEND_FETCH_CLASS */ if ((opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_PARENT || (opline->op1.num & ZEND_FETCH_CLASS_MASK) == ZEND_FETCH_CLASS_SELF) { if (Z_TYPE(EX(This)) == IS_OBJECT) { ce = Z_OBJCE(EX(This)); } else { ce = Z_CE(EX(This)); } } } call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_FUNCTION, fbc, opline->extended_value, ce, object); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zval *offset; SAVE_OPLINE(); container = &EX(This); if (IS_UNUSED == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST || (IS_UNUSED != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_UNUSED != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_UNUSED & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = NULL; ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = NULL; /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_UNUSED == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CV != IS_UNUSED) { zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; op1 = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), ~Z_LVAL_P(op1)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); bitwise_not_function(EX_VAR(opline->result.var), _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = EX_VAR(opline->op1.var); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_FALSE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_TRUE(EX_VAR(opline->result.var)); if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), !i_zend_is_true(val)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); increment_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); increment_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); decrement_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); decrement_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); increment_function(var_ptr); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(var_ptr) == IS_UNDEF)) { var_ptr = GET_OP1_UNDEF_CV(var_ptr, BP_VAR_RW); } ZVAL_DEREF(var_ptr); ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *z; SAVE_OPLINE(); z = EX_VAR(opline->op1.var); if (Z_TYPE_P(z) == IS_STRING) { zend_string *str = Z_STR_P(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } } else { zend_string *str = zval_get_string_func(z); if (ZSTR_LEN(str) != 0) { zend_write(ZSTR_VAL(str), ZSTR_LEN(str)); } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(z) == IS_UNDEF)) { GET_OP1_UNDEF_CV(z, BP_VAR_R); } zend_string_release_ex(str, 0); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = EX_VAR(opline->op1.var); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline++; } else { opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = EX_VAR(opline->op1.var); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = OP_JMP_ADDR(opline, opline->op2); } else { opline++; } ZEND_VM_JMP(opline); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_INFO_P(val) == IS_TRUE)) { ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); if (i_zend_is_true(val)) { opline = ZEND_OFFSET_TO_OPLINE(opline, opline->extended_value); } else { opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; int ret; val = EX_VAR(opline->op1.var); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } SAVE_OPLINE(); ret = i_zend_is_true(val); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline++; } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } ZEND_VM_JMP(opline); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; int ret; val = EX_VAR(opline->op1.var); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { ZVAL_FALSE(EX_VAR(opline->result.var)); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(val) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); ret = i_zend_is_true(val); if (ret) { ZVAL_TRUE(EX_VAR(opline->result.var)); opline = OP_JMP_ADDR(opline, opline->op2); } else { ZVAL_FALSE(EX_VAR(opline->result.var)); opline++; } ZEND_VM_JMP(opline); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = EX_VAR(opline->op1.var); return_value = EX(return_value); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_CV & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval_ptr; SAVE_OPLINE(); do { if ((IS_CV & (IS_CONST|IS_TMP_VAR)) || (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_VALUE)) { /* Not supposed to happen, but we'll allow it */ zend_error(E_NOTICE, "Only variable references should be returned by reference"); retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (!EX(return_value)) { } else { if (IS_CV == IS_VAR && UNEXPECTED(Z_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(EX(return_value), retval_ptr); break; } ZVAL_NEW_REF(EX(return_value), retval_ptr); if (IS_CV == IS_CONST) { Z_TRY_ADDREF_P(retval_ptr); } } break; } retval_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { if (retval_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(retval_ptr))) { zend_error(E_NOTICE, "Only variable references should be returned by reference"); if (EX(return_value)) { ZVAL_NEW_REF(EX(return_value), retval_ptr); } else { } break; } } if (EX(return_value)) { if (Z_ISREF_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } else { ZVAL_MAKE_REF_EX(retval_ptr, 2); } ZVAL_REF(EX(return_value), Z_REF_P(retval_ptr)); } } while (0); ZEND_VM_TAIL_CALL(zend_leave_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *retval; zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); retval = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); /* Copy return value into generator->retval */ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(&generator->retval, retval); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->retval))) { Z_ADDREF(generator->retval); } } } else if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(&generator->retval, retval); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval))) { zend_refcounted *ref = Z_COUNTED_P(retval); retval = Z_REFVAL_P(retval); ZVAL_COPY_VALUE(&generator->retval, retval); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval)) { Z_ADDREF_P(retval); } } else { ZVAL_COPY_VALUE(&generator->retval, retval); } } /* Close the generator to free up resources */ zend_generator_close(generator, 1); /* Pass execution back to handling code */ ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; SAVE_OPLINE(); value = EX_VAR(opline->op1.var); do { if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(value) != IS_OBJECT)) { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { GET_OP1_UNDEF_CV(value, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Can only throw objects"); HANDLE_EXCEPTION(); } } while (0); zend_exception_save(); if (IS_CV != IS_TMP_VAR) { Z_TRY_ADDREF_P(value); } zend_throw_exception_object(value); zend_exception_restore(); HANDLE_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; varptr = EX_VAR(opline->op1.var); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; SAVE_OPLINE(); varptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(varptr))) { ZVAL_NEW_EMPTY_REF(arg); ZVAL_NULL(Z_REFVAL_P(arg)); ZEND_VM_NEXT_OPCODE(); } if (Z_ISREF_P(varptr)) { Z_ADDREF_P(varptr); } else { ZVAL_MAKE_REF_EX(varptr, 2); } ZVAL_REF(arg, Z_REF_P(varptr)); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(0)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_var_by_ref; } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_var_by_ref: ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = EX_VAR(opline->op1.var); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; uint32_t arg_num = opline->op2.num; if (EXPECTED(1)) { if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { goto send_var_by_ref; } } else if (ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { send_var_by_ref: ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = EX_VAR(opline->op1.var); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(varptr) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(varptr, BP_VAR_R); arg = ZEND_CALL_VAR(EX(call), opline->result.var); ZVAL_NULL(arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(arg, varptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(varptr))) { zend_refcounted *ref = Z_COUNTED_P(varptr); varptr = Z_REFVAL_P(varptr); ZVAL_COPY_VALUE(arg, varptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(arg)) { Z_ADDREF_P(arg); } } else { ZVAL_COPY_VALUE(arg, varptr); } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *arg, *param; SAVE_OPLINE(); arg = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); param = ZEND_CALL_VAR(EX(call), opline->result.var); if (UNEXPECTED(ARG_MUST_BE_SENT_BY_REF(EX(call)->func, opline->op2.num))) { zend_param_must_be_ref(EX(call)->func, opline->op2.num); } ZVAL_COPY(param, arg); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *val; val = EX_VAR(opline->op1.var); if (Z_TYPE_INFO_P(val) == IS_TRUE) { ZVAL_TRUE(EX_VAR(opline->result.var)); } else if (EXPECTED(Z_TYPE_INFO_P(val) <= IS_TRUE)) { /* The result and op1 can be the same cv zval */ const uint32_t orig_val_type = Z_TYPE_INFO_P(val); ZVAL_FALSE(EX_VAR(opline->result.var)); if (IS_CV == IS_CV && UNEXPECTED(orig_val_type == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(val, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } else { SAVE_OPLINE(); ZVAL_BOOL(EX_VAR(opline->result.var), i_zend_is_true(val)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *obj; zend_class_entry *ce, *scope; zend_function *clone; zend_object_clone_obj_t clone_call; SAVE_OPLINE(); obj = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } do { if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(obj) != IS_OBJECT))) { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(obj)) { obj = Z_REFVAL_P(obj); if (EXPECTED(Z_TYPE_P(obj) == IS_OBJECT)) { break; } } ZVAL_UNDEF(EX_VAR(opline->result.var)); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(obj) == IS_UNDEF)) { GET_OP1_UNDEF_CV(obj, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "__clone method called on non-object"); HANDLE_EXCEPTION(); } } while (0); ce = Z_OBJCE_P(obj); clone = ce->clone; clone_call = Z_OBJ_HT_P(obj)->clone_obj; if (UNEXPECTED(clone_call == NULL)) { zend_throw_error(NULL, "Trying to clone an uncloneable object of class %s", ZSTR_VAL(ce->name)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (clone) { if (clone->op_array.fn_flags & ZEND_ACC_PRIVATE) { /* Ensure that if we're calling a private function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (!zend_check_private(clone, scope, clone->common.function_name)) { zend_throw_error(NULL, "Call to private %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else if ((clone->common.fn_flags & ZEND_ACC_PROTECTED)) { /* Ensure that if we're calling a protected function, we're allowed to do so. */ scope = EX(func)->op_array.scope; if (UNEXPECTED(!zend_check_protected(zend_get_function_root_class(clone), scope))) { zend_throw_error(NULL, "Call to protected %s::__clone() from context '%s'", ZSTR_VAL(clone->common.scope->name), scope ? ZSTR_VAL(scope->name) : ""); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } } ZVAL_OBJ(EX_VAR(opline->result.var), clone_call(obj)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr; zval *result = EX_VAR(opline->result.var); HashTable *ht; SAVE_OPLINE(); expr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); switch (opline->extended_value) { case IS_NULL: ZVAL_NULL(result); break; case _IS_BOOL: ZVAL_BOOL(result, zend_is_true(expr)); break; case IS_LONG: ZVAL_LONG(result, zval_get_long(expr)); break; case IS_DOUBLE: ZVAL_DOUBLE(result, zval_get_double(expr)); break; case IS_STRING: ZVAL_STR(result, zval_get_string(expr)); break; default: if (IS_CV & (IS_VAR|IS_CV)) { ZVAL_DEREF(expr); } /* If value is already of correct type, return it directly */ if (Z_TYPE_P(expr) == opline->extended_value) { ZVAL_COPY_VALUE(result, expr); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_CV != IS_TMP_VAR) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (opline->extended_value == IS_ARRAY) { if (IS_CV == IS_CONST || Z_TYPE_P(expr) != IS_OBJECT || Z_OBJCE_P(expr) == zend_ce_closure) { if (Z_TYPE_P(expr) != IS_NULL) { ZVAL_ARR(result, zend_new_array(1)); expr = zend_hash_index_add_new(Z_ARRVAL_P(result), 0, expr); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } else { ZVAL_EMPTY_ARRAY(result); } } else if (Z_OBJ_HT_P(expr)->get_properties) { HashTable *obj_ht = Z_OBJ_HT_P(expr)->get_properties(expr); if (obj_ht) { /* fast copy */ obj_ht = zend_proptable_to_symtable(obj_ht, (Z_OBJCE_P(expr)->default_properties_count || Z_OBJ_P(expr)->handlers != &std_object_handlers || GC_IS_RECURSIVE(obj_ht))); ZVAL_ARR(result, obj_ht); } else { ZVAL_EMPTY_ARRAY(result); } } else { ZVAL_COPY_VALUE(result, expr); Z_ADDREF_P(result); convert_to_array(result); } } else { ZVAL_OBJ(result, zend_objects_new(zend_standard_class_def)); if (Z_TYPE_P(expr) == IS_ARRAY) { ht = zend_symtable_to_proptable(Z_ARR_P(expr)); if (GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE) { /* TODO: try not to duplicate immutable arrays as well ??? */ ht = zend_array_dup(ht); } Z_OBJ_P(result)->properties = ht; } else if (Z_TYPE_P(expr) != IS_NULL) { Z_OBJ_P(result)->properties = ht = zend_new_array(1); expr = zend_hash_add_new(ht, ZSTR_KNOWN(ZEND_STR_SCALAR), expr); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(expr))) Z_ADDREF_P(expr); } else { if (Z_OPT_REFCOUNTED_P(expr)) Z_ADDREF_P(expr); } } } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_op_array *new_op_array; zval *inc_filename; SAVE_OPLINE(); inc_filename = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); new_op_array = zend_include_or_eval(inc_filename, opline->extended_value); if (UNEXPECTED(EG(exception) != NULL)) { if (new_op_array != ZEND_FAKE_OP_ARRAY && new_op_array != NULL) { destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (new_op_array == ZEND_FAKE_OP_ARRAY) { if (RETURN_VALUE_USED(opline)) { ZVAL_TRUE(EX_VAR(opline->result.var)); } } else if (EXPECTED(new_op_array != NULL)) { zval *return_value = NULL; zend_execute_data *call; if (RETURN_VALUE_USED(opline)) { return_value = EX_VAR(opline->result.var); ZVAL_NULL(return_value); } new_op_array->scope = EX(func)->op_array.scope; call = zend_vm_stack_push_call_frame(ZEND_CALL_NESTED_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, (zend_function*)new_op_array, 0, Z_TYPE(EX(This)) != IS_OBJECT ? Z_CE(EX(This)) : NULL, Z_TYPE(EX(This)) == IS_OBJECT ? Z_OBJ(EX(This)) : NULL); if (EX_CALL_INFO() & ZEND_CALL_HAS_SYMBOL_TABLE) { call->symbol_table = EX(symbol_table); } else { call->symbol_table = zend_rebuild_symbol_table(); } call->prev_execute_data = execute_data; i_init_code_execute_data(call, new_op_array, return_value); if (EXPECTED(zend_execute_ex == execute_ex)) { ZEND_VM_ENTER(); } else { ZEND_ADD_CALL_FLAG(call, ZEND_CALL_TOP); zend_execute_ex(call); zend_vm_stack_free_call_frame(call); } destroy_op_array(new_op_array); efree_size(new_op_array, sizeof(zend_op_array)); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } else if (RETURN_VALUE_USED(opline)) { ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array_ptr, *result; SAVE_OPLINE(); array_ptr = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(array_ptr); } Z_FE_POS_P(result) = 0; ZEND_VM_NEXT_OPCODE(); } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, array_ptr); if (IS_CV != IS_TMP_VAR) { Z_ADDREF_P(array_ptr); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 0 OPLINE_CC EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *array_ptr, *array_ref; SAVE_OPLINE(); if (IS_CV == IS_VAR || IS_CV == IS_CV) { array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (Z_ISREF_P(array_ref)) { array_ptr = Z_REFVAL_P(array_ref); } } else { array_ref = array_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); } if (EXPECTED(Z_TYPE_P(array_ptr) == IS_ARRAY)) { if (IS_CV == IS_VAR || IS_CV == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ref = EX_VAR(opline->result.var); ZVAL_NEW_REF(array_ref, array_ptr); array_ptr = Z_REFVAL_P(array_ref); } if (IS_CV == IS_CONST) { ZVAL_ARR(array_ptr, zend_array_dup(Z_ARRVAL_P(array_ptr))); } else { SEPARATE_ARRAY(array_ptr); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_ARRVAL_P(array_ptr), 0); if (IS_CV == IS_VAR) { } ZEND_VM_NEXT_OPCODE(); } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(array_ptr) == IS_OBJECT)) { if (!Z_OBJCE_P(array_ptr)->get_iterator) { if (IS_CV == IS_VAR || IS_CV == IS_CV) { if (array_ptr == array_ref) { ZVAL_NEW_REF(array_ref, array_ref); array_ptr = Z_REFVAL_P(array_ref); } Z_ADDREF_P(array_ref); ZVAL_COPY_VALUE(EX_VAR(opline->result.var), array_ref); } else { array_ptr = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(array_ptr, array_ref); } if (Z_OBJ_P(array_ptr)->properties && UNEXPECTED(GC_REFCOUNT(Z_OBJ_P(array_ptr)->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(Z_OBJ_P(array_ptr)->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(Z_OBJ_P(array_ptr)->properties); } Z_OBJ_P(array_ptr)->properties = zend_array_dup(Z_OBJ_P(array_ptr)->properties); } Z_FE_ITER_P(EX_VAR(opline->result.var)) = zend_hash_iterator_add(Z_OBJPROP_P(array_ptr), 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { zend_bool is_empty = zend_fe_reset_iterator(array_ptr, 1 OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { } else { } if (UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } else if (is_empty) { ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } else { ZEND_VM_NEXT_OPCODE(); } } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); ZVAL_UNDEF(EX_VAR(opline->result.var)); Z_FE_ITER_P(EX_VAR(opline->result.var)) = (uint32_t)-1; if (IS_CV == IS_VAR) { } else { } ZEND_VM_JMP(OP_JMP_ADDR(opline, opline->op2)); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_CV != IS_UNUSED) { zval *ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); do { if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); } else { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(ptr)) { ptr = Z_REFVAL_P(ptr); if (Z_TYPE_P(ptr) == IS_LONG) { EG(exit_status) = Z_LVAL_P(ptr); break; } } zend_print_zval(ptr, 0); } } while (0); } zend_bailout(); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *ref = NULL; int ret; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if ((IS_CV == IS_VAR || IS_CV == IS_CV) && Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } ret = i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (ret) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if (IS_CV == IS_VAR && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *ref = NULL; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { if (IS_CV & IS_VAR) { ref = value; } value = Z_REFVAL_P(value); } if (Z_TYPE_P(value) > IS_NULL) { zval *result = EX_VAR(opline->result.var); ZVAL_COPY_VALUE(result, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) Z_ADDREF_P(result); } else if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(result)) Z_ADDREF_P(result); } else if ((IS_CV & IS_VAR) && ref) { zend_reference *r = Z_REF_P(ref); if (UNEXPECTED(GC_DELREF(r) == 0)) { efree_size(r, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } ZEND_VM_JMP_EX(OP_JMP_ADDR(opline, opline->op2), 0); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *result = EX_VAR(opline->result.var); value = EX_VAR(opline->op1.var); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZVAL_NULL(result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (IS_CV == IS_CV) { ZVAL_COPY_DEREF(result, value); } else if (IS_CV == IS_VAR) { if (UNEXPECTED(Z_ISREF_P(value))) { ZVAL_COPY_VALUE(result, Z_REFVAL_P(value)); if (UNEXPECTED(Z_DELREF_P(value) == 0)) { efree_size(Z_REF_P(value), sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(result)) { Z_ADDREF_P(result); } } else { ZVAL_COPY_VALUE(result, value); } } else { ZVAL_COPY_VALUE(result, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(result))) { Z_ADDREF_P(result); } } } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); zval *val; SAVE_OPLINE(); val = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { zend_throw_error(NULL, "Cannot use \"yield from\" in a force-closed generator"); UNDEF_RESULT(); HANDLE_EXCEPTION(); } if (Z_TYPE_P(val) == IS_ARRAY) { ZVAL_COPY_VALUE(&generator->values, val); if (IS_CV != IS_TMP_VAR && Z_OPT_REFCOUNTED_P(val)) { Z_ADDREF_P(val); } Z_FE_POS(generator->values) = 0; } else if (IS_CV != IS_CONST && Z_TYPE_P(val) == IS_OBJECT && Z_OBJCE_P(val)->get_iterator) { zend_class_entry *ce = Z_OBJCE_P(val); if (ce == zend_ce_generator) { zend_generator *new_gen = (zend_generator *) Z_OBJ_P(val); if (IS_CV != IS_TMP_VAR) { Z_ADDREF_P(val); } if (Z_ISUNDEF(new_gen->retval)) { if (UNEXPECTED(zend_generator_get_current(new_gen) == generator)) { zend_throw_error(NULL, "Impossible to yield from the Generator being currently run"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { zend_generator_yield_from(generator, new_gen); } } else if (UNEXPECTED(new_gen->execute_data == NULL)) { zend_throw_error(NULL, "Generator passed to yield from was aborted without proper return and is unable to continue"); zval_ptr_dtor(val); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { if (RETURN_VALUE_USED(opline)) { ZVAL_COPY(EX_VAR(opline->result.var), &new_gen->retval); } ZEND_VM_NEXT_OPCODE(); } } else { zend_object_iterator *iter = ce->get_iterator(ce, val, 0); if (UNEXPECTED(!iter) || UNEXPECTED(EG(exception))) { if (!EG(exception)) { zend_throw_error(NULL, "Object of type %s did not create an Iterator", ZSTR_VAL(ce->name)); } UNDEF_RESULT(); HANDLE_EXCEPTION(); } iter->index = 0; if (iter->funcs->rewind) { iter->funcs->rewind(iter); if (UNEXPECTED(EG(exception) != NULL)) { OBJ_RELEASE(&iter->std); UNDEF_RESULT(); HANDLE_EXCEPTION(); } } ZVAL_OBJ(&generator->values, &iter->std); } } else { zend_throw_error(NULL, "Can use \"yield from\" only with arrays and Traversables"); UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* This is the default return value * when the expression is a Generator, it will be overwritten in zend_generator_resume() */ if (RETURN_VALUE_USED(opline)) { ZVAL_NULL(EX_VAR(opline->result.var)); } /* This generator has no send target (though the generator we delegate to might have one) */ generator->send_target = NULL; /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; value = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); ZEND_VM_NEXT_OPCODE(); } else { zend_bool strict; if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(value) == IS_REFERENCE) { value = Z_REFVAL_P(value); if (EXPECTED(Z_TYPE_P(value) == IS_STRING)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_STRLEN_P(value)); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { value = GET_OP1_UNDEF_CV(value, BP_VAR_R); } strict = EX_USES_STRICT_TYPES(); do { if (EXPECTED(!strict)) { zend_string *str; zval tmp; ZVAL_COPY(&tmp, value); if (zend_parse_arg_str_weak(&tmp, &str)) { ZVAL_LONG(EX_VAR(opline->result.var), ZSTR_LEN(str)); zval_ptr_dtor(&tmp); break; } zval_ptr_dtor(&tmp); } zend_internal_type_error(strict, "strlen() expects parameter 1 to be string, %s given", zend_get_type_by_const(Z_TYPE_P(value))); ZVAL_NULL(EX_VAR(opline->result.var)); } while (0); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result = 0; value = EX_VAR(opline->op1.var); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { type_check_resource: if (EXPECTED(Z_TYPE_P(value) != IS_RESOURCE) || EXPECTED(NULL != zend_rsrc_list_get_rsrc_type(Z_RES_P(value)))) { result = 1; } } else if ((IS_CV & (IS_CV|IS_VAR)) && Z_ISREF_P(value)) { value = Z_REFVAL_P(value); if ((opline->extended_value >> (uint32_t)Z_TYPE_P(value)) & 1) { goto type_check_resource; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { result = ((1 << IS_NULL) & opline->extended_value) != 0; SAVE_OPLINE(); GET_OP1_UNDEF_CV(value, BP_VAR_R); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (IS_CV & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); Z_LVAL_P(var_ptr)++; if (UNEXPECTED(0)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); Z_LVAL_P(var_ptr)++; if (UNEXPECTED(1)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); fast_long_increment_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); fast_long_increment_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); } else { Z_DVAL_P(var_ptr)++; } if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_increment_function(var_ptr); } else { Z_DVAL_P(var_ptr)++; } if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); Z_LVAL_P(var_ptr)--; if (UNEXPECTED(0)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); Z_LVAL_P(var_ptr)--; if (UNEXPECTED(1)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); fast_long_decrement_function(var_ptr); if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); fast_long_decrement_function(var_ptr); if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); } else { Z_DVAL_P(var_ptr)--; } if (UNEXPECTED(0)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { fast_long_decrement_function(var_ptr); } else { Z_DVAL_P(var_ptr)--; } if (UNEXPECTED(1)) { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), var_ptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); Z_LVAL_P(var_ptr)++; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_increment_function(var_ptr); } else { ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)++; } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); Z_LVAL_P(var_ptr)--; ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var_ptr; var_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(var_ptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(var_ptr)); fast_long_decrement_function(var_ptr); } else { ZVAL_DOUBLE(EX_VAR(opline->result.var), Z_DVAL_P(var_ptr)); Z_DVAL_P(var_ptr)--; } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; varptr = EX_VAR(opline->op1.var); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_CV == IS_CV) { ZVAL_COPY(arg, varptr); } else /* if (IS_CV == IS_VAR) */ { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varptr, *arg; uint32_t arg_num = opline->op2.num; if (QUICK_ARG_SHOULD_BE_SENT_BY_REF(EX(call)->func, arg_num)) { ZEND_VM_TAIL_CALL(ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } varptr = EX_VAR(opline->op1.var); arg = ZEND_CALL_VAR(EX(call), opline->result.var); if (IS_CV == IS_CV) { ZVAL_COPY(arg, varptr); } else /* if (IS_CV == IS_VAR) */ { ZVAL_COPY_VALUE(arg, varptr); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); fast_div_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); pow_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CV != IS_CONST && IS_CV != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_identical_function(op1, op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); result = fast_is_not_identical_function(op1, op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); compare_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = RT_CONSTANT(opline, opline->op2); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if (IS_CONST == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP(free_op_data1); ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *var_ptr; zval *value; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op2); var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CONST == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CONST(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CONST_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CONST(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CONST(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_CONST(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_CONST == IS_CONST) { if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } if (IS_CV != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } if (IS_CV == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_CONST(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value, *result; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); dim = RT_CONSTANT(opline, opline->op2); if (IS_CV != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CONST, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, IS_CONST OPLINE_CC EXECUTE_DATA_CC); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_W(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_RW(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_read_IS(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CONST == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_UNSET(container, RT_CONSTANT(opline, opline->op2), IS_CONST OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CONST == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *property, *result; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, IS_CONST, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CONST == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CONST == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = RT_CONSTANT(opline, opline->op2); if (IS_CONST == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CONST == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = RT_CONSTANT(opline, opline->op2); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = RT_CONSTANT(opline, opline->op2); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CONST != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *variable_ptr; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op2); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CONST); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *variable_ptr; SAVE_OPLINE(); value = RT_CONSTANT(opline, opline->op2); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CONST); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = EX_VAR(opline->op1.var); op2 = RT_CONSTANT(opline, opline->op2); if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CONST == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST || IS_CONST == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CONST != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CV != IS_CONST && IS_CV != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (IS_CONST == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (IS_CV != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (IS_CONST != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (IS_CV != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (IS_CONST != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CONST != IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } if (IS_CONST != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); HANDLE_EXCEPTION(); } while (0); } if (IS_CV != IS_UNUSED) { do { if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CONST != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } zend_invalid_method_call(object, function_name); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CONST == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST) { function_name = RT_CONSTANT(opline, opline->op2); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CONST == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CONST == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CONST != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_CV == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CV == IS_VAR || IS_CV == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_TMP_VAR) { /* pass */ } else if (IS_CV == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CV == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CONST != IS_UNUSED) { zval *offset = RT_CONSTANT(opline, opline->op2); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CV != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); offset = RT_CONSTANT(opline, opline->op2); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; unset_dim_array: SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); offset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { goto num_index_dim; } } str_index_dim: if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_dim: zend_hash_index_del(ht, hval); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto offset_again; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CONST == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto unset_dim_array; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_CONST == IS_CONST) { if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (IS_CV != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (IS_CV == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); offset = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CONST != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, IS_CONST == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if ((IS_CONST & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if (IS_CONST == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = RT_CONSTANT(opline, opline->op2); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CONST == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr; zend_bool result; SAVE_OPLINE(); expr = EX_VAR(opline->op1.var); try_instanceof: if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (IS_CONST == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (IS_CONST == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); goto try_instanceof; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CV != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CV & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CV == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CONST != IS_UNUSED) { zval *key = RT_CONSTANT(opline, opline->op2); /* Consts, temporary variables and references need copying */ if (IS_CONST == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CONST == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CONST & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zval *value; zval *variable_ptr; uintptr_t idx; zend_reference *ref; ZEND_VM_REPEATABLE_OPCODE varname = RT_CONSTANT(opline, opline->op2); /* We store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */ idx = (uintptr_t)CACHED_PTR(opline->extended_value) - 1; if (EXPECTED(idx < EG(symbol_table).nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)EG(symbol_table).arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(varname)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) { value = (zval*)p; /* value = &p->val; */ goto check_indirect; } } value = zend_hash_find_ex(&EG(symbol_table), Z_STR_P(varname), 1); if (UNEXPECTED(value == NULL)) { value = zend_hash_add_new(&EG(symbol_table), Z_STR_P(varname), &EG(uninitialized_zval)); idx = (char*)value - (char*)EG(symbol_table).arData; /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */ CACHE_PTR(opline->extended_value, (void*)(idx + 1)); } else { idx = (char*)value - (char*)EG(symbol_table).arData; /* Store "hash slot index" + 1 (NULL is a mark of uninitialized cache slot) */ CACHE_PTR(opline->extended_value, (void*)(idx + 1)); check_indirect: /* GLOBAL variable may be an INDIRECT pointer to CV */ if (UNEXPECTED(Z_TYPE_P(value) == IS_INDIRECT)) { value = Z_INDIRECT_P(value); if (UNEXPECTED(Z_TYPE_P(value) == IS_UNDEF)) { ZVAL_NULL(value); } } } if (UNEXPECTED(!Z_ISREF_P(value))) { ZVAL_MAKE_REF_EX(value, 2); ref = Z_REF_P(value); } else { ref = Z_REF_P(value); GC_ADDREF(ref); } variable_ptr = EX_VAR(opline->op1.var); if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { zend_refcounted *ref = Z_COUNTED_P(variable_ptr); uint32_t refcnt = GC_DELREF(ref); if (EXPECTED(variable_ptr != value)) { if (refcnt == 0) { SAVE_OPLINE(); rc_dtor_func(ref); if (UNEXPECTED(EG(exception))) { ZVAL_NULL(variable_ptr); HANDLE_EXCEPTION(); } } else { gc_check_possible_root(ref); } } } ZVAL_REF(variable_ptr, ref); ZEND_VM_REPEAT_OPCODE(ZEND_BIND_GLOBAL); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE HashTable *ht; zval *value; zval *variable_ptr; variable_ptr = EX_VAR(opline->op1.var); zval_ptr_dtor(variable_ptr); ht = EX(func)->op_array.static_variables; ZEND_ASSERT(ht != NULL); if (GC_REFCOUNT(ht) > 1) { if (!(GC_FLAGS(ht) & IS_ARRAY_IMMUTABLE)) { GC_DELREF(ht); } EX(func)->op_array.static_variables = ht = zend_array_dup(ht); } value = (zval*)((char*)ht->arData + (opline->extended_value & ~ZEND_BIND_REF)); if (opline->extended_value & ZEND_BIND_REF) { if (Z_TYPE_P(value) == IS_CONSTANT_AST) { SAVE_OPLINE(); if (UNEXPECTED(zval_update_constant_ex(value, EX(func)->op_array.scope) != SUCCESS)) { ZVAL_NULL(variable_ptr); HANDLE_EXCEPTION(); } } if (UNEXPECTED(!Z_ISREF_P(value))) { zend_reference *ref = (zend_reference*)emalloc(sizeof(zend_reference)); GC_SET_REFCOUNT(ref, 2); GC_TYPE_INFO(ref) = IS_REFERENCE; ZVAL_COPY_VALUE(&ref->val, value); Z_REF_P(value) = ref; Z_TYPE_INFO_P(value) = IS_REFERENCE_EX; ZVAL_REF(variable_ptr, ref); } else { Z_ADDREF_P(value); ZVAL_REF(variable_ptr, Z_REF_P(value)); } } else { ZVAL_COPY(variable_ptr, value); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; HashTable *ht = Z_ARRVAL_P(RT_CONSTANT(opline, opline->op2)); int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { result = zend_hash_exists(ht, Z_STR_P(op1)); } else if (opline->extended_value) { if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { result = zend_hash_index_exists(ht, Z_LVAL_P(op1)); } else { result = 0; } } else if (Z_TYPE_P(op1) <= IS_FALSE) { result = zend_hash_exists(ht, ZSTR_EMPTY_ALLOC()); } else { zend_string *key; zval key_tmp, result_tmp; result = 0; ZEND_HASH_FOREACH_STR_KEY(ht, key) { ZVAL_STR(&key_tmp, key); compare_function(&result_tmp, op1, &key_tmp); if (Z_LVAL(result_tmp) == 0) { result = 1; break; } } ZEND_HASH_FOREACH_END(); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value; zend_long offset; HashTable *ht; container = EX_VAR(opline->op1.var); dim = RT_CONSTANT(opline, opline->op2); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_index_array: if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { offset = Z_LVAL_P(dim); } else { offset = zval_get_long(dim); } ht = Z_ARRVAL_P(container); ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value); if (IS_CV & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_index_array; } else { goto fetch_dim_r_index_slow; } } else { fetch_dim_r_index_slow: SAVE_OPLINE(); if (IS_CONST == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } fetch_dim_r_index_undef: ZVAL_NULL(EX_VAR(opline->result.var)); SAVE_OPLINE(); zend_undefined_offset(offset); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value; zend_long offset; HashTable *ht; container = EX_VAR(opline->op1.var); dim = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_index_array: if (EXPECTED(Z_TYPE_P(dim) == IS_LONG)) { offset = Z_LVAL_P(dim); } else { offset = zval_get_long(dim); } ht = Z_ARRVAL_P(container); ZEND_HASH_INDEX_FIND(ht, offset, value, fetch_dim_r_index_undef); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), value); if (IS_CV & (IS_TMP_VAR|IS_VAR)) { SAVE_OPLINE(); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZEND_VM_NEXT_OPCODE(); } } else if (IS_CV != IS_CONST && EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_index_array; } else { goto fetch_dim_r_index_slow; } } else { fetch_dim_r_index_slow: SAVE_OPLINE(); if ((IS_TMP_VAR|IS_VAR|IS_CV) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } fetch_dim_r_index_undef: ZVAL_NULL(EX_VAR(opline->result.var)); SAVE_OPLINE(); zend_undefined_offset(offset); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); fast_div_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); pow_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } zval_ptr_dtor_nogc(free_op2); } else if (IS_CV != IS_CONST && IS_CV != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op2); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); zval_ptr_dtor_nogc(free_op2); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); compare_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2, free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2, free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } zval_ptr_dtor_nogc(free_op2); FREE_OP(free_op_data1); ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2; zval *var_ptr; zval *value; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && (IS_TMP_VAR|IS_VAR) == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_TMPVAR(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_TMPVAR_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_TMPVAR(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op2; zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_TMPVAR(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container, *dim, *value, *result; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CV != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, (IS_TMP_VAR|IS_VAR), BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); } zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_W(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_RW(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_read_IS(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_UNSET(container, _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC), (IS_TMP_VAR|IS_VAR) OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op2); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zend_free_op free_op2; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1, free_op2; zval *container, *property, *result; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, (IS_TMP_VAR|IS_VAR), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); zval_ptr_dtor_nogc(free_op2); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2, free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, ((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: zval_ptr_dtor_nogc(free_op2); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op2, free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if ((IS_TMP_VAR|IS_VAR) == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zval_ptr_dtor_nogc(free_op2); } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = EX_VAR(opline->op1.var); op2 = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && ((IS_TMP_VAR|IS_VAR) == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST || (IS_TMP_VAR|IS_VAR) == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } zval_ptr_dtor_nogc(free_op2); } else if (IS_CV != IS_CONST && IS_CV != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); zval_ptr_dtor_nogc(free_op2); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (IS_CV != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (IS_CV != IS_CONST) { zend_string_release_ex(op1_str, 0); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1, free_op2; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } if ((IS_TMP_VAR|IS_VAR) != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } while (0); } if (IS_CV != IS_UNUSED) { do { if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } HANDLE_EXCEPTION(); } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } zend_invalid_method_call(object, function_name); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST) { function_name = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } zval_ptr_dtor_nogc(free_op2); HANDLE_EXCEPTION(); } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { zval_ptr_dtor_nogc(free_op2); } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_CV == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CV == IS_VAR || IS_CV == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_TMP_VAR) { /* pass */ } else if (IS_CV == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CV == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if ((IS_TMP_VAR|IS_VAR) != IS_UNUSED) { zend_free_op free_op2; zval *offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } zval_ptr_dtor_nogc(free_op2); } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CV != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; unset_dim_array: SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); offset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { goto num_index_dim; } } str_index_dim: if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_dim: zend_hash_index_del(ht, hval); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto offset_again; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if ((IS_TMP_VAR|IS_VAR) == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto unset_dim_array; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if ((IS_TMP_VAR|IS_VAR) == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); zval_ptr_dtor_nogc(free_op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if ((IS_TMP_VAR|IS_VAR) != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, (IS_TMP_VAR|IS_VAR) == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if (((IS_TMP_VAR|IS_VAR) & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if ((IS_TMP_VAR|IS_VAR) == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *container; int result; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), (((IS_TMP_VAR|IS_VAR) == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CV != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CV & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CV == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_TMP_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_tmp(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_TMP_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_TMP_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_TMP_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_var_deref(opline->op2.var, &free_op2 EXECUTE_DATA_CC); result = fast_is_not_identical_function(op1, op2); zval_ptr_dtor_nogc(free_op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_VAR(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_VAR == IS_CONST) { if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } if (IS_CV != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } if (IS_CV == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_VAR(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_VAR); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { zval_ptr_dtor_nogc(free_op2); if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_VAR); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op2; zval *variable_ptr; zval *value_ptr; SAVE_OPLINE(); value_ptr = _get_zval_ptr_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (IS_VAR == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_VAR == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION && UNEXPECTED(!Z_ISREF_P(value_ptr))) { if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_VAR OPLINE_CC EXECUTE_DATA_CC))) { if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* op2 freed by assign_to_variable */ ZEND_VM_NEXT_OPCODE(); } else { zend_assign_to_variable_reference(variable_ptr, value_ptr); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr); } if (UNEXPECTED(free_op2)) {zval_ptr_dtor_nogc(free_op2);}; ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_VAR == IS_CONST) { if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (IS_CV != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (IS_CV == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr; zend_bool result; SAVE_OPLINE(); expr = EX_VAR(opline->op1.var); try_instanceof: if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (IS_VAR == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (IS_VAR == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); goto try_instanceof; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CV != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CV & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CV == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_VAR != IS_UNUSED) { zend_free_op free_op2; zval *key = _get_zval_ptr_var(opline->op2.var, &free_op2 EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_VAR == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_VAR == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_VAR & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); zval_ptr_dtor_nogc(free_op2); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = NULL; if (IS_UNUSED == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if (IS_UNUSED == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = NULL; if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP(free_op_data1); ZEND_VM_NEXT_OPCODE_EX(1, 2); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_UNUSED == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_UNUSED(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_UNUSED_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_var_address_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); retval = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST); if (retval == NULL) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { fetch_this: zend_fetch_this_var(type OPLINE_CC EXECUTE_DATA_CC); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } if (type == BP_VAR_W) { retval = zend_hash_add_new(target_symbol_table, name, &EG(uninitialized_zval)); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { retval = zend_hash_update(target_symbol_table, name, &EG(uninitialized_zval)); } else { retval = &EG(uninitialized_zval); } } /* GLOBAL or $$name variable may be an INDIRECT pointer to CV */ } else if (Z_TYPE_P(retval) == IS_INDIRECT) { retval = Z_INDIRECT_P(retval); if (Z_TYPE_P(retval) == IS_UNDEF) { if (UNEXPECTED(zend_string_equals(name, ZSTR_KNOWN(ZEND_STR_THIS)))) { goto fetch_this; } if (type == BP_VAR_W) { ZVAL_NULL(retval); } else if (type == BP_VAR_IS) { retval = &EG(uninitialized_zval); } else { zend_error(E_NOTICE,"Undefined variable: %s", ZSTR_VAL(name)); if (type == BP_VAR_RW) { ZVAL_NULL(retval); } else { retval = &EG(uninitialized_zval); } } } } if (!(opline->extended_value & ZEND_FETCH_GLOBAL_LOCK)) { } if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_ASSERT(retval != NULL); if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_var_address_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_fetch_static_prop_helper_SPEC_CV_UNUSED(int type ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *varname; zval *retval; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); do { if (IS_UNUSED == IS_CONST) { if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value)) != NULL)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } else { zval *class_name = RT_CONSTANT(opline, opline->op2); if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(class_name), class_name + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } if (IS_CV != IS_CONST) { CACHE_PTR(opline->extended_value, ce); } } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { retval = NULL; break; } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value) == ce)) { retval = CACHED_PTR(opline->extended_value + sizeof(void*)); break; } } varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { zval_undefined_cv(EX(opline)->op1.var EXECUTE_DATA_CC); } name = zval_get_tmp_string(varname, &tmp_name); } retval = zend_std_get_static_property(ce, name, type == BP_VAR_IS); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } if (IS_CV == IS_CONST && EXPECTED(retval)) { CACHE_POLYMORPHIC_PTR(opline->extended_value, ce, retval); } } while (0); if (UNEXPECTED(retval == NULL)) { if (EG(exception)) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } else { ZEND_ASSERT(type == BP_VAR_IS); retval = &EG(uninitialized_zval); } } if (type == BP_VAR_R || type == BP_VAR_IS) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else { ZVAL_INDIRECT(EX_VAR(opline->result.var), retval); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_R ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_W ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_RW ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { int fetch_type = (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) ? BP_VAR_W : BP_VAR_R; ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(fetch_type ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_UNSET ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_fetch_static_prop_helper_SPEC_CV_UNUSED(BP_VAR_IS ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_W(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_RW(container, NULL, IS_UNUSED OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_UNUSED == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_UNUSED == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = NULL; if (IS_UNUSED == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = NULL; value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_UNUSED == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_UNUSED == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = NULL; value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = NULL; assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_UNUSED != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE SAVE_OPLINE(); if (IS_CV == IS_UNUSED) { zend_verify_missing_return_type(EX(func), CACHE_ADDR(opline->op2.num)); } else { /* prevents "undefined variable opline" errors */ #if 0 || (IS_CV != IS_UNUSED) zval *retval_ref, *retval_ptr; zend_arg_info *ret_info = EX(func)->common.arg_info - 1; retval_ref = retval_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST) { ZVAL_COPY(EX_VAR(opline->result.var), retval_ptr); retval_ref = retval_ptr = EX_VAR(opline->result.var); } else if (IS_CV == IS_VAR) { if (UNEXPECTED(Z_TYPE_P(retval_ptr) == IS_INDIRECT)) { retval_ptr = Z_INDIRECT_P(retval_ptr); } ZVAL_DEREF(retval_ptr); } else if (IS_CV == IS_CV) { ZVAL_DEREF(retval_ptr); } if (UNEXPECTED(!ZEND_TYPE_IS_CLASS(ret_info->type) && ZEND_TYPE_CODE(ret_info->type) != IS_CALLABLE && ZEND_TYPE_CODE(ret_info->type) != IS_ITERABLE && !ZEND_SAME_FAKE_TYPE(ZEND_TYPE_CODE(ret_info->type), Z_TYPE_P(retval_ptr)) && !(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE) && retval_ref != retval_ptr) ) { /* A cast might happen - unwrap the reference if this is a by-value return */ if (Z_REFCOUNT_P(retval_ref) == 1) { ZVAL_UNREF(retval_ref); } else { Z_DELREF_P(retval_ref); ZVAL_COPY(retval_ref, retval_ptr); } retval_ptr = retval_ref; } zend_verify_return_type(EX(func), retval_ptr, CACHE_ADDR(opline->op2.num)); #endif } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CV == IS_VAR || IS_CV == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_TMP_VAR) { /* pass */ } else if (IS_CV == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CV == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_UNUSED != IS_UNUSED) { zval *offset = NULL; zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_UNUSED != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_UNUSED == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CV != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *var = EX_VAR(opline->op1.var); if (Z_REFCOUNTED_P(var)) { zend_refcounted *garbage = Z_COUNTED_P(var); ZVAL_UNDEF(var); SAVE_OPLINE(); if (!GC_DELREF(garbage)) { rc_dtor_func(garbage); } else { gc_check_possible_root(garbage); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_UNDEF(var); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); zend_hash_del_ind(target_symbol_table, name); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_COLD ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } /*CACHE_PTR(opline->extended_value, ce);*/ } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } varname = EX_VAR(opline->op1.var); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else if (EXPECTED(Z_TYPE_P(varname) == IS_STRING)) { name = Z_STR_P(varname); tmp_name = NULL; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(varname) == IS_UNDEF)) { varname = GET_OP1_UNDEF_CV(varname, BP_VAR_R); } name = zval_get_tmp_string(varname, &tmp_name); } zend_std_unset_static_property(ce, name); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; value = EX_VAR(opline->op1.var); if (!(0)) { result = Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { SAVE_OPLINE(); result = !i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; value = EX_VAR(opline->op1.var); if (!(1)) { result = Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { SAVE_OPLINE(); result = !i_zend_is_true(value); if (UNEXPECTED(EG(exception))) { ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; HashTable *target_symbol_table; SAVE_OPLINE(); varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } target_symbol_table = zend_get_target_symbol_table(opline->extended_value EXECUTE_DATA_CC); value = zend_hash_find_ex(target_symbol_table, name, IS_CV == IS_CONST); if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } if (!value) { result = (opline->extended_value & ZEND_ISEMPTY); } else { if (Z_TYPE_P(value) == IS_INDIRECT) { value = Z_INDIRECT_P(value); } if (!(opline->extended_value & ZEND_ISEMPTY)) { if (Z_ISREF_P(value)) { value = Z_REFVAL_P(value); } result = Z_TYPE_P(value) > IS_NULL; } else { result = !i_zend_is_true(value); } } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; int result; zval *varname; zend_string *name, *tmp_name; zend_class_entry *ce; SAVE_OPLINE(); if (IS_UNUSED == IS_CONST) { if (IS_CV == IS_CONST && EXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) != NULL)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } else if (UNEXPECTED((ce = CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY)) == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_DEFAULT | ZEND_FETCH_CLASS_EXCEPTION); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } if (IS_CV != IS_CONST) { CACHE_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce); } } } else { if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->extended_value & ~ZEND_ISEMPTY) == ce)) { value = CACHED_PTR((opline->extended_value & ~ZEND_ISEMPTY) + sizeof(void*)); goto is_static_prop_return; } } varname = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST) { name = Z_STR_P(varname); } else { name = zval_get_tmp_string(varname, &tmp_name); } value = zend_std_get_static_property(ce, name, 1); if (IS_CV == IS_CONST && value) { CACHE_POLYMORPHIC_PTR(opline->extended_value & ~ZEND_ISEMPTY, ce, value); } if (IS_CV != IS_CONST) { zend_tmp_string_release(tmp_name); } is_static_prop_return: if (!(opline->extended_value & ZEND_ISEMPTY)) { result = value && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = !value || !i_zend_is_true(value); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr; zend_bool result; SAVE_OPLINE(); expr = EX_VAR(opline->op1.var); try_instanceof: if (Z_TYPE_P(expr) == IS_OBJECT) { zend_class_entry *ce; if (IS_UNUSED == IS_CONST) { ce = CACHED_PTR(opline->extended_value); if (UNEXPECTED(ce == NULL)) { ce = zend_fetch_class_by_name(Z_STR_P(RT_CONSTANT(opline, opline->op2)), RT_CONSTANT(opline, opline->op2) + 1, ZEND_FETCH_CLASS_NO_AUTOLOAD); if (EXPECTED(ce)) { CACHE_PTR(opline->extended_value, ce); } } } else if (IS_UNUSED == IS_UNUSED) { ce = zend_fetch_class(NULL, opline->op2.num); if (UNEXPECTED(ce == NULL)) { ZEND_ASSERT(EG(exception)); ZVAL_UNDEF(EX_VAR(opline->result.var)); HANDLE_EXCEPTION(); } } else { ce = Z_CE_P(EX_VAR(opline->op2.var)); } result = ce && instanceof_function(Z_OBJCE_P(expr), ce); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_TYPE_P(expr) == IS_REFERENCE) { expr = Z_REFVAL_P(expr); goto try_instanceof; } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(expr) == IS_UNDEF)) { GET_OP1_UNDEF_CV(expr, BP_VAR_R); } result = 0; } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CV != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CV & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CV == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_UNUSED != IS_UNUSED) { zval *key = NULL; /* Consts, temporary variables and references need copying */ if (IS_UNUSED == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_UNUSED == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_UNUSED & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_UNUSED == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1 = EX_VAR(opline->op1.var); if (UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { SAVE_OPLINE(); GET_OP1_UNDEF_CV(op1, BP_VAR_R); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1 = EX_VAR(opline->op1.var); if (IS_CV == IS_CV) { if (UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { ZVAL_NEW_EMPTY_REF(op1); Z_SET_REFCOUNT_P(op1, 2); ZVAL_NULL(Z_REFVAL_P(op1)); ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } else { if (Z_ISREF_P(op1)) { Z_ADDREF_P(op1); } else { ZVAL_MAKE_REF_EX(op1, 2); } ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } } else if (EXPECTED(Z_TYPE_P(op1) == IS_INDIRECT)) { op1 = Z_INDIRECT_P(op1); if (EXPECTED(!Z_ISREF_P(op1))) { ZVAL_MAKE_REF_EX(op1, 2); } else { GC_ADDREF(Z_REF_P(op1)); } ZVAL_REF(EX_VAR(opline->result.var), Z_REF_P(op1)); } else { ZVAL_COPY_VALUE(EX_VAR(opline->result.var), op1); } ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; zend_long count; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); do { if (Z_TYPE_P(op1) == IS_ARRAY) { count = zend_array_count(Z_ARRVAL_P(op1)); break; } else if (Z_TYPE_P(op1) == IS_OBJECT) { /* first, we check if the handler is defined */ if (Z_OBJ_HT_P(op1)->count_elements) { if (SUCCESS == Z_OBJ_HT_P(op1)->count_elements(op1, &count)) { break; } } /* if not and the object implements Countable we call its count() method */ if (instanceof_function(Z_OBJCE_P(op1), zend_ce_countable)) { zval retval; zend_call_method_with_0_params(op1, NULL, NULL, "count", &retval); count = zval_get_long(&retval); zval_ptr_dtor(&retval); break; } /* If There's no handler and it doesn't implement Countable then add a warning */ count = 1; } else if (Z_TYPE_P(op1) == IS_NULL) { count = 0; } else { count = 1; } zend_error(E_WARNING, "count(): Parameter must be an array or an object that implements Countable"); } while (0); ZVAL_LONG(EX_VAR(opline->result.var), count); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE if (IS_CV == IS_UNUSED) { if (UNEXPECTED(!EX(func)->common.scope)) { SAVE_OPLINE(); zend_error(E_WARNING, "get_class() called without object from outside a class"); ZVAL_FALSE(EX_VAR(opline->result.var)); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } else { ZVAL_STR_COPY(EX_VAR(opline->result.var), EX(func)->common.scope->name); ZEND_VM_NEXT_OPCODE(); } } else { zval *op1; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (Z_TYPE_P(op1) == IS_OBJECT) { ZVAL_STR_COPY(EX_VAR(opline->result.var), Z_OBJCE_P(op1)->name); } else { zend_error(E_WARNING, "get_class() expects parameter 1 to be object, %s given", zend_get_type_by_const(Z_TYPE_P(op1))); ZVAL_FALSE(EX_VAR(opline->result.var)); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1; zend_string *type; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); type = zend_zval_get_type(op1); if (EXPECTED(type)) { ZVAL_INTERNED_STR(EX_VAR(opline->result.var), type); } else { ZVAL_STRING(EX_VAR(opline->result.var), "unknown type"); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_add_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) + ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } add_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); fast_long_sub_function(result, op1, op2); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) - ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } sub_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { zend_long overflow; result = EX_VAR(opline->result.var); ZEND_SIGNED_MULTIPLY_LONG(Z_LVAL_P(op1), Z_LVAL_P(op2), Z_LVAL_P(result), Z_DVAL_P(result), overflow); Z_TYPE_INFO_P(result) = overflow ? IS_DOUBLE : IS_LONG; ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, ((double)Z_LVAL_P(op1)) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * Z_DVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); ZVAL_DOUBLE(result, Z_DVAL_P(op1) * ((double)Z_LVAL_P(op2))); ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mul_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); fast_div_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = EX_VAR(opline->result.var); if (UNEXPECTED(Z_LVAL_P(op2) == 0)) { ZEND_VM_TAIL_CALL(zend_mod_by_zero_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else if (UNEXPECTED(Z_LVAL_P(op2) == -1)) { /* Prevent overflow error/crash if op1==ZEND_LONG_MIN */ ZVAL_LONG(result, 0); } else { ZVAL_LONG(result, Z_LVAL_P(op1) % Z_LVAL_P(op2)); } ZEND_VM_NEXT_OPCODE(); } } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } mod_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) << Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_left_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG) && EXPECTED((zend_ulong)Z_LVAL_P(op2) < SIZEOF_ZEND_LONG * 8)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) >> Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } shift_right_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); pow_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CV != IS_CONST && IS_CV != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } else { SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } concat_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = fast_is_identical_function(op1, op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; int result; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_deref_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = fast_is_not_identical_function(op1, op2); ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) == Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) == Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) == Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) == ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) == 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) != Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) != Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) != Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) != ((double)Z_LVAL_P(op2))); } else { break; } } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2)); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) != 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) < Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) < Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) < Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) < ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) < 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2, *result; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); do { int result; if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_LVAL_P(op1) <= Z_LVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = ((double)Z_LVAL_P(op1) <= Z_DVAL_P(op2)); } else { break; } } else if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_DOUBLE)) { if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_DOUBLE)) { result = (Z_DVAL_P(op1) <= Z_DVAL_P(op2)); } else if (EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { result = (Z_DVAL_P(op1) <= ((double)Z_LVAL_P(op2))); } else { break; } } else { break; } ZEND_VM_SMART_BRANCH(result, 0); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE(); } while (0); SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } result = EX_VAR(opline->result.var); compare_function(result, op1, op2); ZVAL_BOOL(result, Z_LVAL_P(result) <= 0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); compare_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) | Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_or_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) & Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_and_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_INFO_P(op1) == IS_LONG) && EXPECTED(Z_TYPE_INFO_P(op2) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(op1) ^ Z_LVAL_P(op2)); ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op1) == IS_UNDEF)) { op1 = GET_OP1_UNDEF_CV(op1, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(op2) == IS_UNDEF)) { op2 = GET_OP2_UNDEF_CV(op2, BP_VAR_R); } bitwise_xor_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; SAVE_OPLINE(); op1 = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); op2 = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); boolean_xor_function(EX_VAR(opline->result.var), op1, op2); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *object; zval *property; zval *value; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_op_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ assign_op_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(zptr); binary_op(zptr, zptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_assign_op_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR((opline+1)->extended_value) : NULL), value, binary_op OPLINE_CC EXECUTE_DATA_CC); } } while (0); FREE_OP(free_op_data1); /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zend_free_op free_op_data1; zval *var_ptr; zval *value, *container, *dim; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { assign_dim_op_array: SEPARATE_ARRAY(container); assign_dim_op_new_array: dim = EX_VAR(opline->op2.var); if (IS_CV == IS_UNUSED) { var_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(container), &EG(uninitialized_zval)); if (UNEXPECTED(!var_ptr)) { zend_cannot_add_element(); goto assign_dim_op_ret_null; } } else { if (IS_CV == IS_CONST) { var_ptr = zend_fetch_dimension_address_inner_RW_CONST(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } else { var_ptr = zend_fetch_dimension_address_inner_RW(Z_ARRVAL_P(container), dim EXECUTE_DATA_CC); } if (UNEXPECTED(!var_ptr)) { goto assign_dim_op_ret_null; } ZVAL_DEREF(var_ptr); } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } else { if (EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto assign_dim_op_array; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_RW); assign_dim_op_convert_to_array: ZVAL_ARR(container, zend_new_array(8)); goto assign_dim_op_new_array; } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_binary_assign_op_obj_dim(container, dim, value, UNEXPECTED(RETURN_VALUE_USED(opline)) ? EX_VAR(opline->result.var) : NULL, binary_op EXECUTE_DATA_CC); } else { if (UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); } else { zend_check_string_offset(dim, BP_VAR_RW EXECUTE_DATA_CC); zend_wrong_string_offset(EXECUTE_DATA_C); } UNDEF_RESULT(); } else if (EXPECTED(Z_TYPE_P(container) <= IS_FALSE)) { goto assign_dim_op_convert_to_array; } else { if (UNEXPECTED(IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(container)))) { zend_use_scalar_as_array(); } assign_dim_op_ret_null: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } value = get_op_data_zval_ptr_r((opline+1)->op1_type, (opline+1)->op1, &free_op_data1); } } FREE_OP(free_op_data1); ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *var_ptr; zval *value; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); var_ptr = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(var_ptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { ZVAL_DEREF(var_ptr); binary_op(var_ptr, var_ptr, value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), var_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV_DIM(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(1)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static zend_always_inline ZEND_OPCODE_HANDLER_RET zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(binary_op_type binary_op ZEND_OPCODE_HANDLER_ARGS_DC) { #if 1 && IS_CV == IS_UNUSED ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #else # if 0 || IS_CV != IS_UNUSED # if 0 /* opline->extended_value checks are specialized, don't need opline */ USE_OPLINE # endif if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_simple_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } if (EXPECTED(0)) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_dim_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } # endif ZEND_VM_TAIL_CALL(zend_binary_assign_op_obj_helper_SPEC_CV_CV(binary_op ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); #endif } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(add_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(sub_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(mul_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(div_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(mod_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(shift_left_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(shift_right_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(concat_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_or_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_and_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(bitwise_xor_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_DIM(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_binary_assign_op_helper_SPEC_CV_CV_OBJ(pow_function ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_pre_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto pre_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ pre_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), zptr); } } } else { zend_pre_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_pre_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_post_incdec_property_helper_SPEC_CV_CV(int inc ZEND_OPCODE_HANDLER_ARGS_DC) { USE_OPLINE zval *object; zval *property; zval *zptr; SAVE_OPLINE(); object = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto post_incdec_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { break; } } /* here we are sure we are dealing with an object */ post_incdec_object: if (EXPECTED(Z_OBJ_HT_P(object)->get_property_ptr_ptr) && EXPECTED((zptr = Z_OBJ_HT_P(object)->get_property_ptr_ptr(object, property, BP_VAR_RW, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL))) != NULL)) { if (UNEXPECTED(Z_ISERROR_P(zptr))) { ZVAL_NULL(EX_VAR(opline->result.var)); } else { if (EXPECTED(Z_TYPE_P(zptr) == IS_LONG)) { ZVAL_LONG(EX_VAR(opline->result.var), Z_LVAL_P(zptr)); if (inc) { fast_long_increment_function(zptr); } else { fast_long_decrement_function(zptr); } } else { ZVAL_DEREF(zptr); ZVAL_COPY(EX_VAR(opline->result.var), zptr); if (inc) { increment_function(zptr); } else { decrement_function(zptr); } } } } else { zend_post_incdec_overloaded_property(object, property, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), inc OPLINE_CC EXECUTE_DATA_CC); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(1 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { ZEND_VM_TAIL_CALL(zend_post_incdec_property_helper_SPEC_CV_CV(0 ZEND_OPCODE_HANDLER_ARGS_PASSTHRU_CC)); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container, *dim, *value, *result; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); dim = EX_VAR(opline->op2.var); if (IS_CV != IS_CONST) { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { fetch_dim_r_array: value = zend_fetch_dimension_address_inner(Z_ARRVAL_P(container), dim, IS_CV, BP_VAR_R EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); ZVAL_COPY_DEREF(result, value); } else if (EXPECTED(Z_TYPE_P(container) == IS_REFERENCE)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto fetch_dim_r_array; } else { goto fetch_dim_r_slow; } } else { fetch_dim_r_slow: if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_fetch_dimension_address_read_R_slow(container, dim OPLINE_CC EXECUTE_DATA_CC); } } else { zend_fetch_dimension_address_read_R(container, dim, IS_CV OPLINE_CC EXECUTE_DATA_CC); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_W(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_RW(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_read_IS(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { if (IS_CV == IS_UNUSED) { ZEND_VM_TAIL_CALL(zend_use_undef_in_read_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); zend_fetch_dimension_address_UNSET(container, EX_VAR(opline->op2.var), IS_CV OPLINE_CC EXECUTE_DATA_CC); if (IS_CV == IS_VAR) { zval *result = EX_VAR(opline->result.var); FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } goto fetch_obj_r_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_INFO_P(retval) != IS_UNDEF)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); break; } } } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(offset) == IS_UNDEF)) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_r_no_object: zend_wrong_property_read(offset); ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_R, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY_DEREF(EX_VAR(opline->result.var), retval); } else if (UNEXPECTED(Z_ISREF_P(retval))) { zend_unwrap_reference(retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_W OPLINE_CC); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *property, *container, *result; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_RW(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_RW OPLINE_CC); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; void **cache_slot = NULL; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { break; } } goto fetch_obj_is_no_object; } while (0); } /* here we are sure we are dealing with an object */ do { zend_object *zobj = Z_OBJ_P(container); zval *retval; if (IS_CV == IS_CONST) { cache_slot = CACHE_ADDR(opline->extended_value); if (EXPECTED(zobj->ce == CACHED_PTR_EX(cache_slot))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR_EX(cache_slot + 1); if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { retval = OBJ_PROP(zobj, prop_offset); if (EXPECTED(Z_TYPE_P(retval) != IS_UNDEF)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } else if (EXPECTED(zobj->properties != NULL)) { if (!IS_UNKNOWN_DYNAMIC_PROPERTY_OFFSET(prop_offset)) { uintptr_t idx = ZEND_DECODE_DYN_PROP_OFFSET(prop_offset); if (EXPECTED(idx < zobj->properties->nNumUsed * sizeof(Bucket))) { Bucket *p = (Bucket*)((char*)zobj->properties->arData + idx); if (EXPECTED(Z_TYPE(p->val) != IS_UNDEF) && (EXPECTED(p->key == Z_STR_P(offset)) || (EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) && EXPECTED(p->key != NULL) && EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) { ZVAL_COPY(EX_VAR(opline->result.var), &p->val); break; } } CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_DYNAMIC_PROPERTY_OFFSET); } retval = zend_hash_find_ex(zobj->properties, Z_STR_P(offset), 1); if (EXPECTED(retval)) { uintptr_t idx = (char*)retval - (char*)zobj->properties->arData; CACHE_PTR_EX(cache_slot + 1, (void*)ZEND_ENCODE_DYN_PROP_OFFSET(idx)); ZVAL_COPY(EX_VAR(opline->result.var), retval); break; } } } } if (UNEXPECTED(zobj->handlers->read_property == NULL)) { fetch_obj_is_no_object: ZVAL_NULL(EX_VAR(opline->result.var)); } else { retval = zobj->handlers->read_property(container, offset, BP_VAR_IS, cache_slot, EX_VAR(opline->result.var)); if (retval != EX_VAR(opline->result.var)) { ZVAL_COPY(EX_VAR(opline->result.var), retval); } } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { if (UNEXPECTED(ZEND_CALL_INFO(EX(call)) & ZEND_CALL_SEND_ARG_BY_REF)) { /* Behave like FETCH_OBJ_W */ if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZEND_VM_TAIL_CALL(zend_use_tmp_in_write_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZEND_VM_TAIL_CALL(ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op1; zval *container, *property, *result; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); result = EX_VAR(opline->result.var); zend_fetch_property_address(result, container, IS_CV, property, IS_CV, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL), BP_VAR_UNSET OPLINE_CC); if (IS_CV == IS_VAR) { FREE_VAR_PTR_AND_EXTRACT_RESULT_IF_NECESSARY(free_op1, result); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CONST); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CONST != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CONST == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CONST == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_TMP_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_TMP_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_free_op free_op_data; zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_VAR); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_VAR != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_VAR == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_VAR == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); goto exit_assign_obj; } if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } zval_ptr_dtor_nogc(free_op_data); exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object, *property, *value, tmp; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } property = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if (Z_ISREF_P(object)) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { goto assign_object; } } if (UNEXPECTED(!make_real_object(object, property OPLINE_CC EXECUTE_DATA_CC))) { goto exit_assign_obj; } } assign_object: if (IS_CV == IS_CONST && EXPECTED(Z_OBJCE_P(object) == CACHED_PTR(opline->extended_value))) { uintptr_t prop_offset = (uintptr_t)CACHED_PTR(opline->extended_value + sizeof(void*)); zend_object *zobj = Z_OBJ_P(object); zval *property_val; if (EXPECTED(IS_VALID_PROPERTY_OFFSET(prop_offset))) { property_val = OBJ_PROP(zobj, prop_offset); if (Z_TYPE_P(property_val) != IS_UNDEF) { fast_assign_obj: value = zend_assign_to_variable(property_val, value, IS_CV); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } else { if (EXPECTED(zobj->properties != NULL)) { if (UNEXPECTED(GC_REFCOUNT(zobj->properties) > 1)) { if (EXPECTED(!(GC_FLAGS(zobj->properties) & IS_ARRAY_IMMUTABLE))) { GC_DELREF(zobj->properties); } zobj->properties = zend_array_dup(zobj->properties); } property_val = zend_hash_find_ex(zobj->properties, Z_STR_P(property), 1); if (property_val) { goto fast_assign_obj; } } if (!zobj->ce->__set) { if (EXPECTED(zobj->properties == NULL)) { rebuild_object_properties(zobj); } if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } else if (IS_CV != IS_TMP_VAR) { if (Z_ISREF_P(value)) { if (IS_CV == IS_VAR) { zend_reference *ref = Z_REF_P(value); if (GC_DELREF(ref) == 0) { ZVAL_COPY_VALUE(&tmp, Z_REFVAL_P(value)); efree_size(ref, sizeof(zend_reference)); value = &tmp; } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else { value = Z_REFVAL_P(value); Z_TRY_ADDREF_P(value); } } else if (IS_CV == IS_CV) { Z_TRY_ADDREF_P(value); } } zend_hash_add_new(zobj->properties, Z_STR_P(property), value); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } goto exit_assign_obj; } } } if (!Z_OBJ_HT_P(object)->write_property) { zend_wrong_property_assignment(property OPLINE_CC EXECUTE_DATA_CC); goto exit_assign_obj; } if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } Z_OBJ_HT_P(object)->write_property(object, property, value, (IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } exit_assign_obj: /* assign_obj has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CONST == IS_CV || IS_CONST == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CONST == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CONST == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = RT_CONSTANT((opline+1), (opline+1)->op1); value = zend_assign_to_variable(variable_ptr, value, IS_CONST); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = RT_CONSTANT((opline+1), (opline+1)->op1); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_TMP_VAR == IS_CV || IS_TMP_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_TMP_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_TMP_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_TMP_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_tmp((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_VAR == IS_CV || IS_VAR == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zval_ptr_dtor_nogc(free_op_data); zend_cannot_add_element(); goto assign_dim_error; } else if (IS_VAR == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_VAR == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } zval_ptr_dtor_nogc(free_op_data); } } else if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_var((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_VAR); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_var_deref((opline+1)->op1.var, &free_op_data EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); zval_ptr_dtor_nogc(free_op_data); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: zval_ptr_dtor_nogc(EX_VAR((opline+1)->op1.var)); if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *object_ptr; zend_free_op free_op_data; zval *value; zval *variable_ptr; zval *dim; SAVE_OPLINE(); object_ptr = EX_VAR(opline->op1.var); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { try_assign_dim_array: SEPARATE_ARRAY(object_ptr); if (IS_CV == IS_UNUSED) { value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CV || IS_CV == IS_VAR) { ZVAL_DEREF(value); } variable_ptr = zend_hash_next_index_insert(Z_ARRVAL_P(object_ptr), value); if (UNEXPECTED(variable_ptr == NULL)) { zend_cannot_add_element(); goto assign_dim_error; } else if (IS_CV == IS_CV) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } else if (IS_CV == IS_VAR) { if (value != free_op_data) { if (Z_REFCOUNTED_P(value)) { Z_ADDREF_P(value); } } } else if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(value))) { Z_ADDREF_P(value); } } } else { dim = EX_VAR(opline->op2.var); if (IS_CV == IS_CONST) { variable_ptr = zend_fetch_dimension_address_inner_W_CONST(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } else { variable_ptr = zend_fetch_dimension_address_inner_W(Z_ARRVAL_P(object_ptr), dim EXECUTE_DATA_CC); } if (UNEXPECTED(variable_ptr == NULL)) { goto assign_dim_error; } value = _get_zval_ptr_cv_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); value = zend_assign_to_variable(variable_ptr, value, IS_CV); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), value); } } else { if (EXPECTED(Z_ISREF_P(object_ptr))) { object_ptr = Z_REFVAL_P(object_ptr); if (EXPECTED(Z_TYPE_P(object_ptr) == IS_ARRAY)) { goto try_assign_dim_array; } } if (EXPECTED(Z_TYPE_P(object_ptr) == IS_OBJECT)) { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST && Z_EXTRA_P(dim) == ZEND_EXTRA_VALUE) { dim++; } zend_assign_to_object_dim(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } else if (EXPECTED(Z_TYPE_P(object_ptr) == IS_STRING)) { if (IS_CV == IS_UNUSED) { zend_use_new_element_for_string(); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else { dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); value = _get_zval_ptr_cv_deref_BP_VAR_R((opline+1)->op1.var EXECUTE_DATA_CC); zend_assign_to_string_offset(object_ptr, dim, value OPLINE_CC EXECUTE_DATA_CC); } } else if (EXPECTED(Z_TYPE_P(object_ptr) <= IS_FALSE)) { ZVAL_ARR(object_ptr, zend_new_array(8)); goto try_assign_dim_array; } else { if (IS_CV != IS_VAR || EXPECTED(!Z_ISERROR_P(object_ptr))) { zend_use_scalar_as_array(); } dim = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); assign_dim_error: if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_NULL(EX_VAR(opline->result.var)); } } } if (IS_CV != IS_UNUSED) { } /* assign_dim has two opcodes! */ ZEND_VM_NEXT_OPCODE_EX(1, 2); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(0)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CV); if (UNEXPECTED(0)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *value; zval *variable_ptr; SAVE_OPLINE(); value = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { if (UNEXPECTED(1)) { ZVAL_NULL(EX_VAR(opline->result.var)); } } else { value = zend_assign_to_variable(variable_ptr, value, IS_CV); if (UNEXPECTED(1)) { ZVAL_COPY(EX_VAR(opline->result.var), value); } /* zend_assign_to_variable() always takes care of op2, never free it! */ } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *variable_ptr; zval *value_ptr; SAVE_OPLINE(); value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op2.var EXECUTE_DATA_CC); variable_ptr = EX_VAR(opline->op1.var); if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(variable_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_CV == IS_VAR && UNEXPECTED(Z_TYPE_P(EX_VAR(opline->op1.var)) != IS_INDIRECT)) { zend_throw_error(NULL, "Cannot assign by reference to overloaded object"); UNDEF_RESULT(); HANDLE_EXCEPTION(); } else if (IS_CV == IS_VAR && UNEXPECTED(Z_ISERROR_P(value_ptr))) { variable_ptr = &EG(uninitialized_zval); } else if (IS_CV == IS_VAR && opline->extended_value == ZEND_RETURNS_FUNCTION && UNEXPECTED(!Z_ISREF_P(value_ptr))) { if (UNEXPECTED(!zend_wrong_assign_to_variable_reference(variable_ptr, value_ptr, IS_CV OPLINE_CC EXECUTE_DATA_CC))) { UNDEF_RESULT(); HANDLE_EXCEPTION(); } /* op2 freed by assign_to_variable */ ZEND_VM_NEXT_OPCODE(); } else { zend_assign_to_variable_reference(variable_ptr, value_ptr); } if (UNEXPECTED(RETURN_VALUE_USED(opline))) { ZVAL_COPY(EX_VAR(opline->result.var), variable_ptr); } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *op1, *op2; zend_string *op1_str, *op2_str, *str; op1 = EX_VAR(opline->op1.var); op2 = EX_VAR(opline->op2.var); if ((IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op1) == IS_STRING)) && (IS_CV == IS_CONST || EXPECTED(Z_TYPE_P(op2) == IS_STRING))) { zend_string *op1_str = Z_STR_P(op1); zend_string *op2_str = Z_STR_P(op2); zend_string *str; if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op2_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op2_str); } } else if (IS_CV != IS_CONST && UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST || IS_CV == IS_CV) { ZVAL_STR_COPY(EX_VAR(opline->result.var), op1_str); } else { ZVAL_STR(EX_VAR(opline->result.var), op1_str); } } else if (IS_CV != IS_CONST && IS_CV != IS_CV && !ZSTR_IS_INTERNED(op1_str) && GC_REFCOUNT(op1_str) == 1) { size_t len = ZSTR_LEN(op1_str); if (UNEXPECTED(len > ZSTR_MAX_LEN - ZSTR_LEN(op2_str))) { zend_error_noreturn(E_ERROR, "Integer overflow in memory allocation"); } str = zend_string_extend(op1_str, len + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str) + len, ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } else { str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); } ZEND_VM_NEXT_OPCODE(); } SAVE_OPLINE(); if (IS_CV == IS_CONST) { op1_str = Z_STR_P(op1); } else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) { op1_str = zend_string_copy(Z_STR_P(op1)); } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op1) == IS_UNDEF)) { GET_OP1_UNDEF_CV(op1, BP_VAR_R); } op1_str = zval_get_string_func(op1); } if (IS_CV == IS_CONST) { op2_str = Z_STR_P(op2); } else if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) { op2_str = zend_string_copy(Z_STR_P(op2)); } else { if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(op2) == IS_UNDEF)) { GET_OP2_UNDEF_CV(op2, BP_VAR_R); } op2_str = zval_get_string_func(op2); } do { if (IS_CV != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op1_str) == 0)) { if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op2))) { GC_ADDREF(op2_str); } } ZVAL_STR(EX_VAR(opline->result.var), op2_str); zend_string_release_ex(op1_str, 0); break; } } if (IS_CV != IS_CONST) { if (UNEXPECTED(ZSTR_LEN(op2_str) == 0)) { if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_REFCOUNTED_P(op1))) { GC_ADDREF(op1_str); } } ZVAL_STR(EX_VAR(opline->result.var), op1_str); zend_string_release_ex(op2_str, 0); break; } } str = zend_string_alloc(ZSTR_LEN(op1_str) + ZSTR_LEN(op2_str), 0); memcpy(ZSTR_VAL(str), ZSTR_VAL(op1_str), ZSTR_LEN(op1_str)); memcpy(ZSTR_VAL(str) + ZSTR_LEN(op1_str), ZSTR_VAL(op2_str), ZSTR_LEN(op2_str)+1); ZVAL_NEW_STR(EX_VAR(opline->result.var), str); if (IS_CV != IS_CONST) { zend_string_release_ex(op1_str, 0); } if (IS_CV != IS_CONST) { zend_string_release_ex(op2_str, 0); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *function_name; zend_free_op free_op1; zval *object; zend_function *fbc; zend_class_entry *called_scope; zend_object *obj; zend_execute_data *call; uint32_t call_info; SAVE_OPLINE(); object = EX_VAR(opline->op1.var); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } if (IS_CV != IS_CONST) { function_name = EX_VAR(opline->op2.var); } if (IS_CV != IS_CONST && UNEXPECTED(Z_TYPE_P(function_name) != IS_STRING)) { do { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(function_name)) { function_name = Z_REFVAL_P(function_name); if (EXPECTED(Z_TYPE_P(function_name) == IS_STRING)) { break; } } else if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(function_name) == IS_UNDEF)) { GET_OP2_UNDEF_CV(function_name, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { HANDLE_EXCEPTION(); } } zend_throw_error(NULL, "Method name must be a string"); HANDLE_EXCEPTION(); } while (0); } if (IS_CV != IS_UNUSED) { do { if (IS_CV == IS_CONST || UNEXPECTED(Z_TYPE_P(object) != IS_OBJECT)) { if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(object))) { object = Z_REFVAL_P(object); if (EXPECTED(Z_TYPE_P(object) == IS_OBJECT)) { break; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(object) == IS_UNDEF)) { object = GET_OP1_UNDEF_CV(object, BP_VAR_R); if (UNEXPECTED(EG(exception) != NULL)) { if (IS_CV != IS_CONST) { } HANDLE_EXCEPTION(); } } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } zend_invalid_method_call(object, function_name); HANDLE_EXCEPTION(); } } while (0); } obj = Z_OBJ_P(object); called_scope = obj->ce; if (IS_CV == IS_CONST && EXPECTED(CACHED_PTR(opline->result.num) == called_scope)) { fbc = CACHED_PTR(opline->result.num + sizeof(void*)); } else { zend_object *orig_obj = obj; if (UNEXPECTED(obj->handlers->get_method == NULL)) { zend_throw_error(NULL, "Object does not support method calls"); HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST) { function_name = EX_VAR(opline->op2.var); } /* First, locate the function. */ fbc = obj->handlers->get_method(&obj, Z_STR_P(function_name), ((IS_CV == IS_CONST) ? (RT_CONSTANT(opline, opline->op2) + 1) : NULL)); if (UNEXPECTED(fbc == NULL)) { if (EXPECTED(!EG(exception))) { zend_undefined_method(obj->ce, Z_STR_P(function_name)); } HANDLE_EXCEPTION(); } if (IS_CV == IS_CONST && EXPECTED(fbc->type <= ZEND_USER_FUNCTION) && EXPECTED(!(fbc->common.fn_flags & (ZEND_ACC_CALL_VIA_TRAMPOLINE|ZEND_ACC_NEVER_CACHE))) && EXPECTED(obj == orig_obj)) { CACHE_POLYMORPHIC_PTR(opline->result.num, called_scope, fbc); } if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(obj != orig_obj)) { /* Reset "object" to trigger reference counting */ object = NULL; } if (EXPECTED(fbc->type == ZEND_USER_FUNCTION) && UNEXPECTED(!fbc->op_array.run_time_cache)) { init_func_run_time_cache(&fbc->op_array); } } if (IS_CV != IS_CONST) { } call_info = ZEND_CALL_NESTED_FUNCTION; if (UNEXPECTED((fbc->common.fn_flags & ZEND_ACC_STATIC) != 0)) { obj = NULL; if ((IS_CV & (IS_VAR|IS_TMP_VAR)) && UNEXPECTED(EG(exception))) { HANDLE_EXCEPTION(); } } else if (IS_CV & (IS_VAR|IS_TMP_VAR|IS_CV)) { /* CV may be changed indirectly (e.g. when it's a reference) */ call_info = ZEND_CALL_NESTED_FUNCTION | ZEND_CALL_RELEASE_THIS; if (IS_CV == IS_CV) { GC_ADDREF(obj); /* For $this pointer */ } else if (free_op1 != object) { GC_ADDREF(obj); /* For $this pointer */ } } call = zend_vm_stack_push_call_frame(call_info, fbc, opline->extended_value, called_scope, obj); call->prev_execute_data = EX(call); EX(call) = call; ZEND_VM_NEXT_OPCODE(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *expr_ptr, new_expr; SAVE_OPLINE(); if ((IS_CV == IS_VAR || IS_CV == IS_CV) && UNEXPECTED(opline->extended_value & ZEND_ARRAY_ELEMENT_REF)) { expr_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); if (Z_ISREF_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } else { ZVAL_MAKE_REF_EX(expr_ptr, 2); } } else { expr_ptr = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_TMP_VAR) { /* pass */ } else if (IS_CV == IS_CONST) { Z_TRY_ADDREF_P(expr_ptr); } else if (IS_CV == IS_CV) { ZVAL_DEREF(expr_ptr); Z_TRY_ADDREF_P(expr_ptr); } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(expr_ptr))) { zend_refcounted *ref = Z_COUNTED_P(expr_ptr); expr_ptr = Z_REFVAL_P(expr_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { ZVAL_COPY_VALUE(&new_expr, expr_ptr); expr_ptr = &new_expr; efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(expr_ptr)) { Z_ADDREF_P(expr_ptr); } } } } if (IS_CV != IS_UNUSED) { zval *offset = EX_VAR(opline->op2.var); zend_string *str; zend_ulong hval; add_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index; } } str_index: zend_hash_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), str, expr_ptr); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index: zend_hash_index_update(Z_ARRVAL_P(EX_VAR(opline->result.var)), hval, expr_ptr); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto add_again; } else if (Z_TYPE_P(offset) == IS_NULL) { str = ZSTR_EMPTY_ALLOC(); goto str_index; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); str = ZSTR_EMPTY_ALLOC(); goto str_index; } else { zend_illegal_offset(); zval_ptr_dtor_nogc(expr_ptr); } } else { if (!zend_hash_next_index_insert(Z_ARRVAL_P(EX_VAR(opline->result.var)), expr_ptr)) { zend_cannot_add_element(); zval_ptr_dtor_nogc(expr_ptr); } } ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { zval *array; uint32_t size; USE_OPLINE array = EX_VAR(opline->result.var); if (IS_CV != IS_UNUSED) { size = opline->extended_value >> ZEND_ARRAY_SIZE_SHIFT; ZVAL_ARR(array, zend_new_array(size)); /* Explicitly initialize array as not-packed if flag is set */ if (opline->extended_value & ZEND_ARRAY_NOT_PACKED) { zend_hash_real_init_mixed(Z_ARRVAL_P(array)); } ZEND_VM_TAIL_CALL(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } else { ZVAL_EMPTY_ARRAY(array); ZEND_VM_NEXT_OPCODE(); } } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; zend_ulong hval; zend_string *key; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); offset = EX_VAR(opline->op2.var); do { if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; unset_dim_array: SEPARATE_ARRAY(container); ht = Z_ARRVAL_P(container); offset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { key = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(key, hval)) { goto num_index_dim; } } str_index_dim: if (ht == &EG(symbol_table)) { zend_delete_global_variable(key); } else { zend_hash_del(ht, key); } } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_dim: zend_hash_index_del(ht, hval); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_TYPE_P(offset) == IS_REFERENCE)) { offset = Z_REFVAL_P(offset); goto offset_again; } else if (Z_TYPE_P(offset) == IS_DOUBLE) { hval = zend_dval_to_lval(Z_DVAL_P(offset)); goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_NULL) { key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else if (Z_TYPE_P(offset) == IS_FALSE) { hval = 0; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_TRUE) { hval = 1; goto num_index_dim; } else if (Z_TYPE_P(offset) == IS_RESOURCE) { hval = Z_RES_HANDLE_P(offset); goto num_index_dim; } else if (IS_CV == IS_CV && Z_TYPE_P(offset) == IS_UNDEF) { GET_OP2_UNDEF_CV(offset, BP_VAR_R); key = ZSTR_EMPTY_ALLOC(); goto str_index_dim; } else { zend_error(E_WARNING, "Illegal offset type in unset"); } break; } else if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto unset_dim_array; } } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { container = GET_OP1_UNDEF_CV(container, BP_VAR_R); } if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_P(offset) == IS_UNDEF)) { offset = GET_OP2_UNDEF_CV(offset, BP_VAR_R); } if (EXPECTED(Z_TYPE_P(container) == IS_OBJECT)) { if (UNEXPECTED(Z_OBJ_HT_P(container)->unset_dimension == NULL)) { zend_use_object_as_array(); } else { if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } Z_OBJ_HT_P(container)->unset_dimension(container, offset); } } else if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_STRING)) { zend_throw_error(NULL, "Cannot unset string offsets"); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_UNSET(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); do { if (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { if (Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (Z_TYPE_P(container) != IS_OBJECT) { break; } } else { break; } } if (Z_OBJ_HT_P(container)->unset_property) { Z_OBJ_HT_P(container)->unset_property(container, offset, ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value) : NULL)); } else { zend_wrong_property_unset(offset); } } while (0); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zend_ulong hval; zval *offset; SAVE_OPLINE(); container = EX_VAR(opline->op1.var); offset = EX_VAR(opline->op2.var); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { HashTable *ht; zval *value; zend_string *str; isset_dim_obj_array: ht = Z_ARRVAL_P(container); isset_again: if (EXPECTED(Z_TYPE_P(offset) == IS_STRING)) { str = Z_STR_P(offset); if (IS_CV != IS_CONST) { if (ZEND_HANDLE_NUMERIC(str, hval)) { goto num_index_prop; } } value = zend_hash_find_ex_ind(ht, str, IS_CV == IS_CONST); } else if (EXPECTED(Z_TYPE_P(offset) == IS_LONG)) { hval = Z_LVAL_P(offset); num_index_prop: value = zend_hash_index_find(ht, hval); } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(offset))) { offset = Z_REFVAL_P(offset); goto isset_again; } else { value = zend_find_array_dim_slow(ht, offset EXECUTE_DATA_CC); if (UNEXPECTED(EG(exception))) { result = 0; goto isset_dim_obj_exit; } } if (!(opline->extended_value & ZEND_ISEMPTY)) { /* > IS_NULL means not IS_UNDEF and not IS_NULL */ result = value != NULL && Z_TYPE_P(value) > IS_NULL && (!Z_ISREF_P(value) || Z_TYPE_P(Z_REFVAL_P(value)) != IS_NULL); } else { result = (value == NULL || !i_zend_is_true(value)); } goto isset_dim_obj_exit; } else if ((IS_CV & (IS_VAR|IS_CV)) && EXPECTED(Z_ISREF_P(container))) { container = Z_REFVAL_P(container); if (EXPECTED(Z_TYPE_P(container) == IS_ARRAY)) { goto isset_dim_obj_array; } } if (IS_CV == IS_CONST && Z_EXTRA_P(offset) == ZEND_EXTRA_VALUE) { offset++; } if (!(opline->extended_value & ZEND_ISEMPTY)) { result = zend_isset_dim_slow(container, offset EXECUTE_DATA_CC); } else { result = zend_isempty_dim_slow(container, offset EXECUTE_DATA_CC); } isset_dim_obj_exit: ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zval *container; int result; zval *offset; SAVE_OPLINE(); container = _get_zval_ptr_cv_BP_VAR_IS(opline->op1.var EXECUTE_DATA_CC); if (IS_CV == IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) == IS_UNDEF)) { ZEND_VM_TAIL_CALL(zend_this_not_in_object_context_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } offset = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); if (IS_CV == IS_CONST || (IS_CV != IS_UNUSED && UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT))) { if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(container)) { container = Z_REFVAL_P(container); if (UNEXPECTED(Z_TYPE_P(container) != IS_OBJECT)) { goto isset_no_object; } } else { goto isset_no_object; } } if (UNEXPECTED(!Z_OBJ_HT_P(container)->has_property)) { zend_wrong_property_check(offset); isset_no_object: result = (opline->extended_value & ZEND_ISEMPTY); } else { result = (opline->extended_value & ZEND_ISEMPTY) ^ Z_OBJ_HT_P(container)->has_property(container, offset, (opline->extended_value & ZEND_ISEMPTY), ((IS_CV == IS_CONST) ? CACHE_ADDR(opline->extended_value & ~ZEND_ISEMPTY) : NULL)); } ZEND_VM_SMART_BRANCH(result, 1); ZVAL_BOOL(EX_VAR(opline->result.var), result); ZEND_VM_NEXT_OPCODE_CHECK_EXCEPTION(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_generator *generator = zend_get_running_generator(EXECUTE_DATA_C); SAVE_OPLINE(); if (UNEXPECTED(generator->flags & ZEND_GENERATOR_FORCED_CLOSE)) { ZEND_VM_TAIL_CALL(zend_yield_in_closed_generator_helper_SPEC(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)); } /* Destroy the previously yielded value */ zval_ptr_dtor(&generator->value); /* Destroy the previously yielded key */ zval_ptr_dtor(&generator->key); /* Set the new yielded value */ if (IS_CV != IS_UNUSED) { if (UNEXPECTED(EX(func)->op_array.fn_flags & ZEND_ACC_RETURN_REFERENCE)) { /* Constants and temporary variables aren't yieldable by reference, * but we still allow them with a notice. */ if (IS_CV & (IS_CONST|IS_TMP_VAR)) { zval *value; zend_error(E_NOTICE, "Only variable references should be yielded by reference"); value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } } else { zval *value_ptr = _get_zval_ptr_cv_BP_VAR_W(opline->op1.var EXECUTE_DATA_CC); /* If a function call result is yielded and the function did * not return by reference we throw a notice. */ if (IS_CV == IS_VAR && (value_ptr == &EG(uninitialized_zval) || (opline->extended_value == ZEND_RETURNS_FUNCTION && !Z_ISREF_P(value_ptr)))) { zend_error(E_NOTICE, "Only variable references should be yielded by reference"); ZVAL_COPY(&generator->value, value_ptr); } else { if (Z_ISREF_P(value_ptr)) { Z_ADDREF_P(value_ptr); } else { ZVAL_MAKE_REF_EX(value_ptr, 2); } ZVAL_REF(&generator->value, Z_REF_P(value_ptr)); } } } else { zval *value = _get_zval_ptr_cv_BP_VAR_R(opline->op1.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->value, value); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->value))) { Z_ADDREF(generator->value); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->value, value); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(value)) { ZVAL_COPY(&generator->value, Z_REFVAL_P(value)); } else { ZVAL_COPY_VALUE(&generator->value, value); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(value)) Z_ADDREF_P(value); } } } } else { /* If no value was specified yield null */ ZVAL_NULL(&generator->value); } /* Set the new yielded key */ if (IS_CV != IS_UNUSED) { zval *key = _get_zval_ptr_cv_BP_VAR_R(opline->op2.var EXECUTE_DATA_CC); /* Consts, temporary variables and references need copying */ if (IS_CV == IS_CONST) { ZVAL_COPY_VALUE(&generator->key, key); if (UNEXPECTED(Z_OPT_REFCOUNTED(generator->key))) { Z_ADDREF(generator->key); } } else if (IS_CV == IS_TMP_VAR) { ZVAL_COPY_VALUE(&generator->key, key); } else if ((IS_CV & (IS_VAR|IS_CV)) && Z_ISREF_P(key)) { ZVAL_COPY(&generator->key, Z_REFVAL_P(key)); } else { ZVAL_COPY_VALUE(&generator->key, key); if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(key)) Z_ADDREF_P(key); } } if (Z_TYPE(generator->key) == IS_LONG && Z_LVAL(generator->key) > generator->largest_used_integer_key ) { generator->largest_used_integer_key = Z_LVAL(generator->key); } } else { /* If no key was specified we use auto-increment keys */ generator->largest_used_integer_key++; ZVAL_LONG(&generator->key, generator->largest_used_integer_key); } if (RETURN_VALUE_USED(opline)) { /* If the return value of yield is used set the send * target and initialize it to NULL */ generator->send_target = EX_VAR(opline->result.var); ZVAL_NULL(generator->send_target); } else { generator->send_target = NULL; } /* We increment to the next op, so we are at the correct position when the * generator is resumed. */ ZEND_VM_INC_OPCODE(); /* The GOTO VM uses a local opline variable. We need to set the opline * variable in execute_data so we don't resume at an old position. */ SAVE_OPLINE(); ZEND_VM_RETURN(); } static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS) { USE_OPLINE zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", OPLINE->opcode, OPLINE->op1_type, OPLINE->op2_type); ZEND_VM_NEXT_OPCODE(); /* Never reached */ } #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) # undef ZEND_VM_TAIL_CALL # undef ZEND_VM_CONTINUE # undef ZEND_VM_RETURN # define ZEND_VM_TAIL_CALL(call) call; ZEND_VM_CONTINUE() # define ZEND_VM_CONTINUE() HYBRID_NEXT() # define ZEND_VM_RETURN() goto HYBRID_HALT_LABEL #endif ZEND_API void execute_ex(zend_execute_data *ex) { DCL_OPLINE #ifdef ZEND_VM_IP_GLOBAL_REG const zend_op *orig_opline = opline; #endif #ifdef ZEND_VM_FP_GLOBAL_REG zend_execute_data *orig_execute_data = execute_data; execute_data = ex; #else zend_execute_data *execute_data = ex; #endif #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) if (UNEXPECTED(execute_data == NULL)) { static const void * const labels[] = { (void*)&&ZEND_NOP_SPEC_LABEL, (void*)&&ZEND_ADD_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_ADD_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_ADD_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_SPEC_CONST_CV_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ADD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ADD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_SPEC_CV_CV_LABEL, (void*)&&ZEND_SUB_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_SUB_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_SUB_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_SPEC_CONST_CV_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_SPEC_CV_CONST_LABEL, (void*)&&ZEND_SUB_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_SUB_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_SPEC_CV_CV_LABEL, (void*)&&ZEND_MUL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_MUL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_MUL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_MUL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_SPEC_CV_CV_LABEL, (void*)&&ZEND_DIV_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_DIV_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_DIV_SPEC_CONST_CV_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_DIV_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_DIV_SPEC_CV_CONST_LABEL, (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_DIV_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_DIV_SPEC_CV_CV_LABEL, (void*)&&ZEND_MOD_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_MOD_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_MOD_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MOD_SPEC_CONST_CV_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MOD_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MOD_SPEC_CV_CONST_LABEL, (void*)&&ZEND_MOD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_MOD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MOD_SPEC_CV_CV_LABEL, (void*)&&ZEND_SL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_SL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_SL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SL_SPEC_CONST_CV_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SL_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_SL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_SL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SL_SPEC_CV_CV_LABEL, (void*)&&ZEND_SR_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_SR_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_SR_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SR_SPEC_CONST_CV_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SR_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_SR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_SR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SR_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_CONCAT_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CONCAT_SPEC_CONST_CV_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CONCAT_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CONCAT_SPEC_CV_CONST_LABEL, (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_CONCAT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CONCAT_SPEC_CV_CV_LABEL, (void*)&&ZEND_BW_OR_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_OR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_OR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_BW_OR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_BW_OR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_OR_SPEC_CV_CV_LABEL, (void*)&&ZEND_BW_AND_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_AND_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_AND_SPEC_CV_CONST_LABEL, (void*)&&ZEND_BW_AND_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_BW_AND_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_AND_SPEC_CV_CV_LABEL, (void*)&&ZEND_BW_XOR_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_XOR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_BW_XOR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_BW_XOR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_XOR_SPEC_CV_CV_LABEL, (void*)&&ZEND_BW_NOT_SPEC_CONST_LABEL, (void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL, (void*)&&ZEND_BW_NOT_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BW_NOT_SPEC_CV_LABEL, (void*)&&ZEND_BOOL_NOT_SPEC_CONST_LABEL, (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL, (void*)&&ZEND_BOOL_NOT_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BOOL_NOT_SPEC_CV_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BOOL_XOR_SPEC_CV_CV_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_TMP_TMP_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_TMP_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_VAR_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_TMP_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_IDENTICAL_SPEC_CV_CV_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_SPEC_CV_CV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_SPEC_CV_CV_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CONST_CV_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_SPEC_CV_CV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_LABEL, (void*)&&ZEND_CAST_SPEC_CONST_LABEL, (void*)&&ZEND_CAST_SPEC_TMP_LABEL, (void*)&&ZEND_CAST_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CAST_SPEC_CV_LABEL, (void*)&&ZEND_QM_ASSIGN_SPEC_CONST_LABEL, (void*)&&ZEND_QM_ASSIGN_SPEC_TMP_LABEL, (void*)&&ZEND_QM_ASSIGN_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_QM_ASSIGN_SPEC_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_INC_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_INC_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_INC_SPEC_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_DEC_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_DEC_SPEC_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_REF_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_REF_SPEC_CV_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_REF_SPEC_CV_CV_LABEL, (void*)&&ZEND_ECHO_SPEC_CONST_LABEL, (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL, (void*)&&ZEND_ECHO_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ECHO_SPEC_CV_LABEL, (void*)&&ZEND_GENERATOR_CREATE_SPEC_LABEL, (void*)&&ZEND_JMP_SPEC_LABEL, (void*)&&ZEND_JMPZ_SPEC_CONST_LABEL, (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL, (void*)&&ZEND_JMPZ_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_JMPZ_SPEC_CV_LABEL, (void*)&&ZEND_JMPNZ_SPEC_CONST_LABEL, (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL, (void*)&&ZEND_JMPNZ_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_JMPNZ_SPEC_CV_LABEL, (void*)&&ZEND_JMPZNZ_SPEC_CONST_LABEL, (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL, (void*)&&ZEND_JMPZNZ_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_JMPZNZ_SPEC_CV_LABEL, (void*)&&ZEND_JMPZ_EX_SPEC_CONST_LABEL, (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL, (void*)&&ZEND_JMPZ_EX_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_JMPZ_EX_SPEC_CV_LABEL, (void*)&&ZEND_JMPNZ_EX_SPEC_CONST_LABEL, (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL, (void*)&&ZEND_JMPNZ_EX_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_JMPNZ_EX_SPEC_CV_LABEL, (void*)&&ZEND_CASE_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_CASE_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_CASE_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_CHECK_VAR_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_LABEL, (void*)&&ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MAKE_REF_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MAKE_REF_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_BOOL_SPEC_CONST_LABEL, (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_BOOL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BOOL_SPEC_CV_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FAST_CONCAT_SPEC_CV_CV_LABEL, (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ROPE_INIT_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ROPE_ADD_SPEC_TMP_CV_LABEL, (void*)&&ZEND_ROPE_END_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_ROPE_END_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ROPE_END_SPEC_TMP_CV_LABEL, (void*)&&ZEND_BEGIN_SILENCE_SPEC_LABEL, (void*)&&ZEND_END_SILENCE_SPEC_TMP_LABEL, (void*)&&ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_LABEL, (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_FCALL_SPEC_RETVAL_USED_LABEL, (void*)&&ZEND_INIT_FCALL_SPEC_CONST_LABEL, (void*)&&ZEND_RETURN_SPEC_CONST_LABEL, (void*)&&ZEND_RETURN_SPEC_TMP_LABEL, (void*)&&ZEND_RETURN_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_RETURN_SPEC_CV_LABEL, (void*)&&ZEND_RECV_SPEC_UNUSED_LABEL, (void*)&&ZEND_RECV_INIT_SPEC_CONST_LABEL, (void*)&&ZEND_SEND_VAL_SPEC_CONST_LABEL, (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_SEND_VAL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_LABEL, (void*)&&ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_LABEL, (void*)&&ZEND_SEND_VAR_EX_SPEC_CV_QUICK_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_REF_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_REF_SPEC_CV_LABEL, (void*)&&ZEND_NEW_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NEW_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_NEW_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_LABEL, (void*)&&ZEND_FREE_SPEC_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CONST_CV_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_TMP_CV_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CONST_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_INIT_ARRAY_SPEC_CV_CV_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CONST_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INCLUDE_OR_EVAL_SPEC_CV_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_VAR_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_CV_CONST_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_DIM_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_VAR_CV_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_FE_RESET_R_SPEC_CONST_LABEL, (void*)&&ZEND_FE_RESET_R_SPEC_TMP_LABEL, (void*)&&ZEND_FE_RESET_R_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FE_RESET_R_SPEC_CV_LABEL, (void*)&&ZEND_FE_FETCH_R_SPEC_VAR_LABEL, (void*)&&ZEND_EXIT_SPEC_CONST_LABEL, (void*)&&ZEND_EXIT_SPEC_TMPVAR_LABEL, (void*)&&ZEND_EXIT_SPEC_TMPVAR_LABEL, (void*)&&ZEND_EXIT_SPEC_UNUSED_LABEL, (void*)&&ZEND_EXIT_SPEC_CV_LABEL, (void*)&&ZEND_FETCH_R_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_R_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_R_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_W_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_W_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_W_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_VAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_W_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_RW_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_RW_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_RW_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_RW_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_IS_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_IS_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_IS_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_IS_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_UNSET_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_CONST_CV_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_LABEL, (void*)&&ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_LABEL, (void*)&&ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_LABEL, (void*)&&ZEND_EXT_STMT_SPEC_LABEL, (void*)&&ZEND_EXT_FCALL_BEGIN_SPEC_LABEL, (void*)&&ZEND_EXT_FCALL_END_SPEC_LABEL, (void*)&&ZEND_EXT_NOP_SPEC_LABEL, (void*)&&ZEND_TICKS_SPEC_LABEL, (void*)&&ZEND_SEND_VAR_NO_REF_SPEC_VAR_LABEL, (void*)&&ZEND_CATCH_SPEC_CONST_LABEL, (void*)&&ZEND_THROW_SPEC_CONST_LABEL, (void*)&&ZEND_THROW_SPEC_TMP_LABEL, (void*)&&ZEND_THROW_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_THROW_SPEC_CV_LABEL, (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_FETCH_CLASS_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_CLONE_SPEC_CONST_LABEL, (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL, (void*)&&ZEND_CLONE_SPEC_TMPVAR_LABEL, (void*)&&ZEND_CLONE_SPEC_UNUSED_LABEL, (void*)&&ZEND_CLONE_SPEC_CV_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_CONST_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_TMP_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_RETURN_BY_REF_SPEC_CV_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_METHOD_CALL_SPEC_CV_CV_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_LABEL, (void*)&&ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_LABEL, (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_LABEL, (void*)&&ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_SPEC_CV_LABEL, (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_USER_CALL_SPEC_CONST_CV_LABEL, (void*)&&ZEND_SEND_ARRAY_SPEC_LABEL, (void*)&&ZEND_SEND_USER_SPEC_CONST_LABEL, (void*)&&ZEND_SEND_USER_SPEC_TMP_LABEL, (void*)&&ZEND_SEND_USER_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_USER_SPEC_CV_LABEL, (void*)&&ZEND_STRLEN_SPEC_CONST_LABEL, (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL, (void*)&&ZEND_STRLEN_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_STRLEN_SPEC_CV_LABEL, (void*)&&ZEND_DEFINED_SPEC_CONST_LABEL, (void*)&&ZEND_TYPE_CHECK_SPEC_CONST_LABEL, (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL, (void*)&&ZEND_TYPE_CHECK_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_TYPE_CHECK_SPEC_CV_LABEL, (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FE_RESET_RW_SPEC_CONST_LABEL, (void*)&&ZEND_FE_RESET_RW_SPEC_TMP_LABEL, (void*)&&ZEND_FE_RESET_RW_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FE_RESET_RW_SPEC_CV_LABEL, (void*)&&ZEND_FE_FETCH_RW_SPEC_VAR_LABEL, (void*)&&ZEND_FE_FREE_SPEC_TMPVAR_LABEL, (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_LABEL, (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INIT_DYNAMIC_CALL_SPEC_CV_LABEL, (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_ICALL_SPEC_RETVAL_USED_LABEL, (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_UCALL_SPEC_RETVAL_USED_LABEL, (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_LABEL, (void*)&&ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_VAR_CV_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_INC_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_PRE_DEC_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_VAR_CV_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_INC_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_VAR_CV_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POST_DEC_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_CV_VAR_LABEL, (void*)&&ZEND_INSTANCEOF_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_DECLARE_CLASS_SPEC_CONST_LABEL, (void*)&&ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_DECLARE_FUNCTION_SPEC_LABEL, (void*)&&ZEND_YIELD_FROM_SPEC_CONST_LABEL, (void*)&&ZEND_YIELD_FROM_SPEC_TMP_LABEL, (void*)&&ZEND_YIELD_FROM_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_YIELD_FROM_SPEC_CV_LABEL, (void*)&&ZEND_DECLARE_CONST_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_ADD_INTERFACE_SPEC_CONST_LABEL, (void*)&&ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_VERIFY_ABSTRACT_CLASS_SPEC_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_LABEL, (void*)&&ZEND_HANDLE_EXCEPTION_SPEC_LABEL, (void*)&&ZEND_USER_OPCODE_SPEC_LABEL, (void*)&&ZEND_ASSERT_CHECK_SPEC_LABEL, (void*)&&ZEND_JMP_SET_SPEC_CONST_LABEL, (void*)&&ZEND_JMP_SET_SPEC_TMP_LABEL, (void*)&&ZEND_JMP_SET_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_JMP_SET_SPEC_CV_LABEL, (void*)&&ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_ADD_TRAIT_SPEC_LABEL, (void*)&&ZEND_BIND_TRAITS_SPEC_LABEL, (void*)&&ZEND_SEPARATE_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_LABEL, (void*)&&ZEND_CALL_TRAMPOLINE_SPEC_LABEL, (void*)&&ZEND_DISCARD_EXCEPTION_SPEC_LABEL, (void*)&&ZEND_YIELD_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_YIELD_SPEC_CONST_TMP_LABEL, (void*)&&ZEND_YIELD_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_YIELD_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_YIELD_SPEC_CONST_CV_LABEL, (void*)&&ZEND_YIELD_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_YIELD_SPEC_TMP_TMP_LABEL, (void*)&&ZEND_YIELD_SPEC_TMP_VAR_LABEL, (void*)&&ZEND_YIELD_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_YIELD_SPEC_TMP_CV_LABEL, (void*)&&ZEND_YIELD_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_YIELD_SPEC_VAR_TMP_LABEL, (void*)&&ZEND_YIELD_SPEC_VAR_VAR_LABEL, (void*)&&ZEND_YIELD_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_YIELD_SPEC_VAR_CV_LABEL, (void*)&&ZEND_YIELD_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_YIELD_SPEC_UNUSED_TMP_LABEL, (void*)&&ZEND_YIELD_SPEC_UNUSED_VAR_LABEL, (void*)&&ZEND_YIELD_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_YIELD_SPEC_UNUSED_CV_LABEL, (void*)&&ZEND_YIELD_SPEC_CV_CONST_LABEL, (void*)&&ZEND_YIELD_SPEC_CV_TMP_LABEL, (void*)&&ZEND_YIELD_SPEC_CV_VAR_LABEL, (void*)&&ZEND_YIELD_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_YIELD_SPEC_CV_CV_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_CONST_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_TMP_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_GENERATOR_RETURN_SPEC_CV_LABEL, (void*)&&ZEND_FAST_CALL_SPEC_LABEL, (void*)&&ZEND_FAST_RET_SPEC_LABEL, (void*)&&ZEND_RECV_VARIADIC_SPEC_UNUSED_LABEL, (void*)&&ZEND_SEND_UNPACK_SPEC_LABEL, (void*)&&ZEND_POW_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_POW_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POW_SPEC_CONST_CV_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POW_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POW_SPEC_CV_CONST_LABEL, (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_POW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_POW_SPEC_CV_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_LABEL, (void*)&&ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_LABEL, (void*)&&ZEND_BIND_GLOBAL_SPEC_CV_CONST_LABEL, (void*)&&ZEND_COALESCE_SPEC_CONST_LABEL, (void*)&&ZEND_COALESCE_SPEC_TMPVAR_LABEL, (void*)&&ZEND_COALESCE_SPEC_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_COALESCE_SPEC_CV_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CONST_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CONST_CV_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_TMPVAR_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CV_CONST_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CV_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SPACESHIP_SPEC_CV_CV_LABEL, (void*)&&ZEND_DECLARE_ANON_CLASS_SPEC_LABEL, (void*)&&ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_LABEL, (void*)&&ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_LABEL, (void*)&&ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_BIND_LEXICAL_SPEC_TMP_CV_LABEL, (void*)&&ZEND_BIND_STATIC_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_SEND_FUNC_ARG_SPEC_VAR_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_SWITCH_LONG_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SWITCH_STRING_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IN_ARRAY_SPEC_CONST_CONST_LABEL, (void*)&&ZEND_IN_ARRAY_SPEC_TMP_CONST_LABEL, (void*)&&ZEND_IN_ARRAY_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IN_ARRAY_SPEC_CV_CONST_LABEL, (void*)&&ZEND_COUNT_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_COUNT_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_COUNT_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_COUNT_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_GET_CLASS_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_GET_CLASS_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_GET_CLASS_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_GET_CLASS_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_GET_TYPE_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_GET_TYPE_SPEC_TMP_UNUSED_LABEL, (void*)&&ZEND_GET_TYPE_SPEC_VAR_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_GET_TYPE_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_UNSET_CV_SPEC_CV_UNUSED_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_LABEL, (void*)&&ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_LABEL, (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CONST_LABEL, (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_LIST_W_SPEC_VAR_CV_LABEL, (void*)&&ZEND_JMP_FORWARD_SPEC_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_LABEL, (void*)&&ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_LABEL, (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_LABEL, (void*)&&ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_LABEL, (void*)&&ZEND_POST_INC_LONG_SPEC_CV_LABEL, (void*)&&ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_LABEL, (void*)&&ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_LABEL, (void*)&&ZEND_POST_DEC_LONG_SPEC_CV_LABEL, (void*)&&ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_LABEL, (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_LABEL, (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL, (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_LABEL, (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_CONST_LABEL, (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL, (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_SIMPLE_SPEC_CV_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_LABEL, (void*)&&ZEND_NULL_LABEL, (void*)&&ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_LABEL, (void*)&&ZEND_SEND_VAL_SIMPLE_SPEC_CONST_LABEL, (void*)&&ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_LABEL, (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_LABEL, (void*)&&ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_LABEL, (void*)&&ZEND_NULL_LABEL }; zend_opcode_handlers = (const void **) labels; zend_handlers_count = sizeof(labels) / sizeof(void*); memset(&hybrid_halt_op, 0, sizeof(hybrid_halt_op)); hybrid_halt_op.handler = (void*)&&HYBRID_HALT_LABEL; goto HYBRID_HALT_LABEL; } #endif LOAD_OPLINE(); ZEND_VM_LOOP_INTERRUPT_CHECK(); while (1) { #if !defined(ZEND_VM_FP_GLOBAL_REG) || !defined(ZEND_VM_IP_GLOBAL_REG) int ret; #endif #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) HYBRID_SWITCH() { #else #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG) ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); if (UNEXPECTED(!OPLINE)) { #else if (UNEXPECTED((ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU)) != 0)) { #endif #endif #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) zend_leave_helper_SPEC_LABEL: { zend_execute_data *old_execute_data; uint32_t call_info = EX_CALL_INFO(); if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(execute_data->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } EG(vm_stack_top) = (zval*)execute_data; execute_data = EX(prev_execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { zend_clean_and_cache_symbol_table(EX(symbol_table)); } /* Free extra args before releasing the closure, * as that may free the op_array. */ zend_vm_stack_free_extra_args_ex(call_info, execute_data); if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { zend_object *object = Z_OBJ(execute_data->This); #if 0 if (UNEXPECTED(EG(exception) != NULL) && (EX(opline)->op1.num & ZEND_CALL_CTOR)) { #else if (UNEXPECTED(EG(exception) != NULL) && (call_info & ZEND_CALL_CTOR)) { #endif GC_DELREF(object); zend_object_store_ctor_failed(object); } OBJ_RELEASE(object); } else if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } old_execute_data = execute_data; execute_data = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else if (EXPECTED((call_info & ZEND_CALL_TOP) == 0)) { zend_detach_symbol_table(execute_data); destroy_op_array(&EX(func)->op_array); efree_size(EX(func), sizeof(zend_op_array)); old_execute_data = execute_data; execute_data = EG(current_execute_data) = EX(prev_execute_data); zend_vm_stack_free_call_frame_ex(call_info, old_execute_data); zend_attach_symbol_table(execute_data); if (UNEXPECTED(EG(exception) != NULL)) { zend_rethrow_exception(execute_data); HANDLE_EXCEPTION_LEAVE(); } LOAD_NEXT_OPLINE(); ZEND_VM_LEAVE(); } else { if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { EG(current_execute_data) = EX(prev_execute_data); i_free_compiled_variables(execute_data); if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { zend_clean_and_cache_symbol_table(EX(symbol_table)); } zend_vm_stack_free_extra_args_ex(call_info, execute_data); } if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { OBJ_RELEASE(ZEND_CLOSURE_OBJECT(EX(func))); } ZEND_VM_RETURN(); } else /* if (call_kind == ZEND_CALL_TOP_CODE) */ { zend_array *symbol_table = EX(symbol_table); zend_detach_symbol_table(execute_data); old_execute_data = EX(prev_execute_data); while (old_execute_data) { if (old_execute_data->func && (ZEND_CALL_INFO(old_execute_data) & ZEND_CALL_HAS_SYMBOL_TABLE)) { if (old_execute_data->symbol_table == symbol_table) { zend_attach_symbol_table(old_execute_data); } break; } old_execute_data = old_execute_data->prev_execute_data; } EG(current_execute_data) = EX(prev_execute_data); ZEND_VM_RETURN(); } } } HYBRID_CASE(ZEND_JMP_SPEC): VM_TRACE(ZEND_JMP_SPEC) ZEND_JMP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED): VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_ICALL_SPEC_RETVAL_USED): VM_TRACE(ZEND_DO_ICALL_SPEC_RETVAL_USED) ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED): VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_UCALL_SPEC_RETVAL_USED): VM_TRACE(ZEND_DO_UCALL_SPEC_RETVAL_USED) ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED): VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED): VM_TRACE(ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED): VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DO_FCALL_SPEC_RETVAL_USED): VM_TRACE(ZEND_DO_FCALL_SPEC_RETVAL_USED) ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_CREATE_SPEC): VM_TRACE(ZEND_GENERATOR_CREATE_SPEC) ZEND_GENERATOR_CREATE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_UNPACK_SPEC): VM_TRACE(ZEND_SEND_UNPACK_SPEC) ZEND_SEND_UNPACK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_ARRAY_SPEC): VM_TRACE(ZEND_SEND_ARRAY_SPEC) ZEND_SEND_ARRAY_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BEGIN_SILENCE_SPEC): VM_TRACE(ZEND_BEGIN_SILENCE_SPEC) ZEND_BEGIN_SILENCE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXT_STMT_SPEC): VM_TRACE(ZEND_EXT_STMT_SPEC) ZEND_EXT_STMT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXT_FCALL_BEGIN_SPEC): VM_TRACE(ZEND_EXT_FCALL_BEGIN_SPEC) ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXT_FCALL_END_SPEC): VM_TRACE(ZEND_EXT_FCALL_END_SPEC) ZEND_EXT_FCALL_END_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_ANON_CLASS_SPEC): VM_TRACE(ZEND_DECLARE_ANON_CLASS_SPEC) ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_FUNCTION_SPEC): VM_TRACE(ZEND_DECLARE_FUNCTION_SPEC) ZEND_DECLARE_FUNCTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_TICKS_SPEC): VM_TRACE(ZEND_TICKS_SPEC) ZEND_TICKS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXT_NOP_SPEC): VM_TRACE(ZEND_EXT_NOP_SPEC) ZEND_EXT_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_NOP_SPEC): VM_TRACE(ZEND_NOP_SPEC) ZEND_NOP_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_TRAIT_SPEC): VM_TRACE(ZEND_ADD_TRAIT_SPEC) ZEND_ADD_TRAIT_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BIND_TRAITS_SPEC): VM_TRACE(ZEND_BIND_TRAITS_SPEC) ZEND_BIND_TRAITS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_HANDLE_EXCEPTION_SPEC): VM_TRACE(ZEND_HANDLE_EXCEPTION_SPEC) ZEND_HANDLE_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_VERIFY_ABSTRACT_CLASS_SPEC): VM_TRACE(ZEND_VERIFY_ABSTRACT_CLASS_SPEC) ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_USER_OPCODE_SPEC): VM_TRACE(ZEND_USER_OPCODE_SPEC) ZEND_USER_OPCODE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DISCARD_EXCEPTION_SPEC): VM_TRACE(ZEND_DISCARD_EXCEPTION_SPEC) ZEND_DISCARD_EXCEPTION_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CALL_SPEC): VM_TRACE(ZEND_FAST_CALL_SPEC) ZEND_FAST_CALL_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_RET_SPEC): VM_TRACE(ZEND_FAST_RET_SPEC) ZEND_FAST_RET_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSERT_CHECK_SPEC): VM_TRACE(ZEND_ASSERT_CHECK_SPEC) ZEND_ASSERT_CHECK_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CALL_TRAMPOLINE_SPEC): VM_TRACE(ZEND_CALL_TRAMPOLINE_SPEC) ZEND_CALL_TRAMPOLINE_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMP_FORWARD_SPEC): VM_TRACE(ZEND_JMP_FORWARD_SPEC) ZEND_JMP_FORWARD_SPEC_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST): VM_TRACE(ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST): VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST): VM_TRACE(ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_FCALL_SPEC_CONST): VM_TRACE(ZEND_INIT_FCALL_SPEC_CONST) ZEND_INIT_FCALL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RECV_INIT_SPEC_CONST): VM_TRACE(ZEND_RECV_INIT_SPEC_CONST) ZEND_RECV_INIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_INTERFACE_SPEC_CONST): VM_TRACE(ZEND_ADD_INTERFACE_SPEC_CONST) ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR): VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RECV_SPEC_UNUSED): VM_TRACE(ZEND_RECV_SPEC_UNUSED) ZEND_RECV_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RECV_VARIADIC_SPEC_UNUSED): VM_TRACE(ZEND_RECV_VARIADIC_SPEC_UNUSED) ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV): VM_TRACE(ZEND_INIT_DYNAMIC_CALL_SPEC_CV) ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_NOT_SPEC_CONST): VM_TRACE(ZEND_BW_NOT_SPEC_CONST) ZEND_BW_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CONST): VM_TRACE(ZEND_BOOL_NOT_SPEC_CONST) ZEND_BOOL_NOT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ECHO_SPEC_CONST): VM_TRACE(ZEND_ECHO_SPEC_CONST) ZEND_ECHO_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZ_SPEC_CONST): VM_TRACE(ZEND_JMPZ_SPEC_CONST) ZEND_JMPZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPNZ_SPEC_CONST): VM_TRACE(ZEND_JMPNZ_SPEC_CONST) ZEND_JMPNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZNZ_SPEC_CONST): VM_TRACE(ZEND_JMPZNZ_SPEC_CONST) ZEND_JMPZNZ_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CONST): VM_TRACE(ZEND_JMPZ_EX_SPEC_CONST) ZEND_JMPZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CONST): VM_TRACE(ZEND_JMPNZ_EX_SPEC_CONST) ZEND_JMPNZ_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RETURN_SPEC_CONST): VM_TRACE(ZEND_RETURN_SPEC_CONST) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = RT_CONSTANT(opline, opline->op1); return_value = EX(return_value); if (IS_CONST == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_CONST & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_CONST & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_CONST == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_CONST == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_CONST == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } goto zend_leave_helper_SPEC_LABEL; } HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CONST): VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CONST) ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CONST): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CONST) ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_THROW_SPEC_CONST): VM_TRACE(ZEND_THROW_SPEC_CONST) ZEND_THROW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CATCH_SPEC_CONST): VM_TRACE(ZEND_CATCH_SPEC_CONST) ZEND_CATCH_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_SPEC_CONST): VM_TRACE(ZEND_SEND_VAL_SPEC_CONST) ZEND_SEND_VAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST): VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST) ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK): VM_TRACE(ZEND_SEND_VAL_EX_SPEC_CONST_QUICK) ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_USER_SPEC_CONST): VM_TRACE(ZEND_SEND_USER_SPEC_CONST) ZEND_SEND_USER_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_SPEC_CONST): VM_TRACE(ZEND_BOOL_SPEC_CONST) ZEND_BOOL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CLONE_SPEC_CONST): VM_TRACE(ZEND_CLONE_SPEC_CONST) ZEND_CLONE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CAST_SPEC_CONST): VM_TRACE(ZEND_CAST_SPEC_CONST) ZEND_CAST_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST): VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CONST) ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CONST): VM_TRACE(ZEND_FE_RESET_R_SPEC_CONST) ZEND_FE_RESET_R_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CONST): VM_TRACE(ZEND_FE_RESET_RW_SPEC_CONST) ZEND_FE_RESET_RW_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXIT_SPEC_CONST): VM_TRACE(ZEND_EXIT_SPEC_CONST) ZEND_EXIT_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMP_SET_SPEC_CONST): VM_TRACE(ZEND_JMP_SET_SPEC_CONST) ZEND_JMP_SET_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COALESCE_SPEC_CONST): VM_TRACE(ZEND_COALESCE_SPEC_CONST) ZEND_COALESCE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CONST): VM_TRACE(ZEND_QM_ASSIGN_SPEC_CONST) ZEND_QM_ASSIGN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_CLASS_SPEC_CONST): VM_TRACE(ZEND_DECLARE_CLASS_SPEC_CONST) ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CONST): VM_TRACE(ZEND_YIELD_FROM_SPEC_CONST) ZEND_YIELD_FROM_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_STRLEN_SPEC_CONST): VM_TRACE(ZEND_STRLEN_SPEC_CONST) ZEND_STRLEN_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CONST): VM_TRACE(ZEND_TYPE_CHECK_SPEC_CONST) ZEND_TYPE_CHECK_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DEFINED_SPEC_CONST): VM_TRACE(ZEND_DEFINED_SPEC_CONST) ZEND_DEFINED_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST): VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST): VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_CONST) ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST): VM_TRACE(ZEND_SEND_VAL_SIMPLE_SPEC_CONST) ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST): VM_TRACE(ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_CONST_CONST): VM_TRACE(ZEND_ADD_SPEC_CONST_CONST) ZEND_ADD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_CONST_CONST): VM_TRACE(ZEND_SUB_SPEC_CONST_CONST) ZEND_SUB_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_SPEC_CONST_CONST): VM_TRACE(ZEND_MUL_SPEC_CONST_CONST) ZEND_MUL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_CONST_CONST): VM_TRACE(ZEND_DIV_SPEC_CONST_CONST) ZEND_DIV_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_CONST_CONST): VM_TRACE(ZEND_MOD_SPEC_CONST_CONST) ZEND_MOD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_CONST_CONST): VM_TRACE(ZEND_SL_SPEC_CONST_CONST) ZEND_SL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_CONST_CONST): VM_TRACE(ZEND_SR_SPEC_CONST_CONST) ZEND_SR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_CONST_CONST): VM_TRACE(ZEND_POW_SPEC_CONST_CONST) ZEND_POW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CONST_CONST) ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST) ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CONST_CONST): VM_TRACE(ZEND_IS_EQUAL_SPEC_CONST_CONST) ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST): VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST) ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CONST): VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CONST) ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST) ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CONST): VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CONST) ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_OR_SPEC_CONST_CONST): VM_TRACE(ZEND_BW_OR_SPEC_CONST_CONST) ZEND_BW_OR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_AND_SPEC_CONST_CONST): VM_TRACE(ZEND_BW_AND_SPEC_CONST_CONST) ZEND_BW_AND_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_XOR_SPEC_CONST_CONST): VM_TRACE(ZEND_BW_XOR_SPEC_CONST_CONST) ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CONST_CONST): VM_TRACE(ZEND_BOOL_XOR_SPEC_CONST_CONST) ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST) ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST) ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST) ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST) ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CONST) ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CONST) ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CONST): VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CONST) ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST): VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CONST) ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST): VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CONST): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CONST) ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST) ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST): VM_TRACE(ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST) ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST): VM_TRACE(ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST) ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST): VM_TRACE(ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST) ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_CONST_SPEC_CONST_CONST): VM_TRACE(ZEND_DECLARE_CONST_SPEC_CONST_CONST) ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CONST): VM_TRACE(ZEND_YIELD_SPEC_CONST_CONST) ZEND_YIELD_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_CONST_CONST): VM_TRACE(ZEND_SWITCH_LONG_SPEC_CONST_CONST) ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_CONST_CONST): VM_TRACE(ZEND_SWITCH_STRING_SPEC_CONST_CONST) ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CONST_CONST): VM_TRACE(ZEND_IN_ARRAY_SPEC_CONST_CONST) ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV): VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_ADD_SPEC_CONST_TMPVAR) ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_SUB_SPEC_CONST_TMPVAR) ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_DIV_SPEC_CONST_TMPVAR) ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_MOD_SPEC_CONST_TMPVAR) ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_SL_SPEC_CONST_TMPVAR) ZEND_SL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_SR_SPEC_CONST_TMPVAR) ZEND_SR_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_POW_SPEC_CONST_TMPVAR) ZEND_POW_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_CONCAT_SPEC_CONST_TMPVAR) ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_TMPVAR) ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR) ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_TMPVAR) ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CONST_TMP): VM_TRACE(ZEND_YIELD_SPEC_CONST_TMP) ZEND_YIELD_SPEC_CONST_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR) ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR) ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR) ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR) ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR) ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CONST_VAR): VM_TRACE(ZEND_YIELD_SPEC_CONST_VAR) ZEND_YIELD_SPEC_CONST_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_R_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_R_SPEC_CONST_UNUSED) ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_W_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_W_SPEC_CONST_UNUSED) ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_RW_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_RW_SPEC_CONST_UNUSED) ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_IS_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_IS_SPEC_CONST_UNUSED) ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED) ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED) ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED) ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED) ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED): VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_NEW_SPEC_CONST_UNUSED): VM_TRACE(ZEND_NEW_SPEC_CONST_UNUSED) ZEND_NEW_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED): VM_TRACE(ZEND_UNSET_VAR_SPEC_CONST_UNUSED) ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED) ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED): VM_TRACE(ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED) ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CONST_UNUSED): VM_TRACE(ZEND_YIELD_SPEC_CONST_UNUSED) ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COUNT_SPEC_CONST_UNUSED): VM_TRACE(ZEND_COUNT_SPEC_CONST_UNUSED) ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_CLASS_SPEC_CONST_UNUSED): VM_TRACE(ZEND_GET_CLASS_SPEC_CONST_UNUSED) ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_TYPE_SPEC_CONST_UNUSED): VM_TRACE(ZEND_GET_TYPE_SPEC_CONST_UNUSED) ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED): VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_CONST_CV): VM_TRACE(ZEND_ADD_SPEC_CONST_CV) ZEND_ADD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_CONST_CV): VM_TRACE(ZEND_SUB_SPEC_CONST_CV) ZEND_SUB_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_CONST_CV): VM_TRACE(ZEND_DIV_SPEC_CONST_CV) ZEND_DIV_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_CONST_CV): VM_TRACE(ZEND_MOD_SPEC_CONST_CV) ZEND_MOD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_CONST_CV): VM_TRACE(ZEND_SL_SPEC_CONST_CV) ZEND_SL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_CONST_CV): VM_TRACE(ZEND_SR_SPEC_CONST_CV) ZEND_SR_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_CONST_CV): VM_TRACE(ZEND_POW_SPEC_CONST_CV) ZEND_POW_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_CONST_CV): VM_TRACE(ZEND_CONCAT_SPEC_CONST_CV) ZEND_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CONST_CV): VM_TRACE(ZEND_IS_SMALLER_SPEC_CONST_CV) ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV) ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_CONST_CV): VM_TRACE(ZEND_SPACESHIP_SPEC_CONST_CV) ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CONST_CV) ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CONST_CV) ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CONST_CV) ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_CONST_CV): VM_TRACE(ZEND_FETCH_LIST_R_SPEC_CONST_CV) ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CONST_CV): VM_TRACE(ZEND_FAST_CONCAT_SPEC_CONST_CV) ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_USER_CALL_SPEC_CONST_CV): VM_TRACE(ZEND_INIT_USER_CALL_SPEC_CONST_CV) ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CONST_CV): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CONST_CV) ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CONST_CV): VM_TRACE(ZEND_YIELD_SPEC_CONST_CV) ZEND_YIELD_SPEC_CONST_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV): VM_TRACE(ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV): VM_TRACE(ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR): VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV): VM_TRACE(ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_NOT_SPEC_TMPVAR): VM_TRACE(ZEND_BW_NOT_SPEC_TMPVAR) ZEND_BW_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_NOT_SPEC_TMPVAR): VM_TRACE(ZEND_BOOL_NOT_SPEC_TMPVAR) ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ECHO_SPEC_TMPVAR): VM_TRACE(ZEND_ECHO_SPEC_TMPVAR) ZEND_ECHO_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZ_SPEC_TMPVAR): VM_TRACE(ZEND_JMPZ_SPEC_TMPVAR) ZEND_JMPZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPNZ_SPEC_TMPVAR): VM_TRACE(ZEND_JMPNZ_SPEC_TMPVAR) ZEND_JMPNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZNZ_SPEC_TMPVAR): VM_TRACE(ZEND_JMPZNZ_SPEC_TMPVAR) ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZ_EX_SPEC_TMPVAR): VM_TRACE(ZEND_JMPZ_EX_SPEC_TMPVAR) ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_TMPVAR): VM_TRACE(ZEND_JMPNZ_EX_SPEC_TMPVAR) ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FREE_SPEC_TMPVAR): VM_TRACE(ZEND_FREE_SPEC_TMPVAR) ZEND_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_FREE_SPEC_TMPVAR): VM_TRACE(ZEND_FE_FREE_SPEC_TMPVAR) ZEND_FE_FREE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_SPEC_TMPVAR): VM_TRACE(ZEND_SEND_VAL_SPEC_TMPVAR) ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_SPEC_TMPVAR): VM_TRACE(ZEND_BOOL_SPEC_TMPVAR) ZEND_BOOL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CLONE_SPEC_TMPVAR): VM_TRACE(ZEND_CLONE_SPEC_TMPVAR) ZEND_CLONE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR): VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXIT_SPEC_TMPVAR): VM_TRACE(ZEND_EXIT_SPEC_TMPVAR) ZEND_EXIT_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COALESCE_SPEC_TMPVAR): VM_TRACE(ZEND_COALESCE_SPEC_TMPVAR) ZEND_COALESCE_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_STRLEN_SPEC_TMPVAR): VM_TRACE(ZEND_STRLEN_SPEC_TMPVAR) ZEND_STRLEN_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_TMPVAR): VM_TRACE(ZEND_TYPE_CHECK_SPEC_TMPVAR) ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_ADD_SPEC_TMPVAR_CONST) ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_SUB_SPEC_TMPVAR_CONST) ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_MUL_SPEC_TMPVAR_CONST) ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CONST) ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_MOD_SPEC_TMPVAR_CONST) ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_SL_SPEC_TMPVAR_CONST) ZEND_SL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_SR_SPEC_TMPVAR_CONST) ZEND_SR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_POW_SPEC_TMPVAR_CONST) ZEND_POW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CONST) ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_CONST) ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST) ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVAR_CONST) ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST) ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CONST) ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_BW_OR_SPEC_TMPVAR_CONST) ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_BW_AND_SPEC_TMPVAR_CONST) ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_BW_XOR_SPEC_TMPVAR_CONST) ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_CONST) ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST) ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST) ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST) ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST) ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CONST) ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST) ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST): VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV): VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_ADD_SPEC_TMPVAR_TMPVAR) ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_SUB_SPEC_TMPVAR_TMPVAR) ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_MUL_SPEC_TMPVAR_TMPVAR) ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_DIV_SPEC_TMPVAR_TMPVAR) ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_MOD_SPEC_TMPVAR_TMPVAR) ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_SL_SPEC_TMPVAR_TMPVAR) ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_SR_SPEC_TMPVAR_TMPVAR) ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_POW_SPEC_TMPVAR_TMPVAR) ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR) ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR) ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_OR_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_AND_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_CASE_SPEC_TMPVAR_TMPVAR) ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR) ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR) ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR) ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR) ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR) ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR): VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED) ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED) ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED) ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED) ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED) ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED): VM_TRACE(ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_TMPVAR_CV): VM_TRACE(ZEND_ADD_SPEC_TMPVAR_CV) ZEND_ADD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_TMPVAR_CV): VM_TRACE(ZEND_SUB_SPEC_TMPVAR_CV) ZEND_SUB_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_TMPVAR_CV): VM_TRACE(ZEND_DIV_SPEC_TMPVAR_CV) ZEND_DIV_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_TMPVAR_CV): VM_TRACE(ZEND_MOD_SPEC_TMPVAR_CV) ZEND_MOD_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_TMPVAR_CV): VM_TRACE(ZEND_SL_SPEC_TMPVAR_CV) ZEND_SL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_TMPVAR_CV): VM_TRACE(ZEND_SR_SPEC_TMPVAR_CV) ZEND_SR_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_TMPVAR_CV): VM_TRACE(ZEND_POW_SPEC_TMPVAR_CV) ZEND_POW_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_TMPVAR_CV): VM_TRACE(ZEND_CONCAT_SPEC_TMPVAR_CV) ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_TMPVAR_CV): VM_TRACE(ZEND_IS_SMALLER_SPEC_TMPVAR_CV) ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV) ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_TMPVAR_CV): VM_TRACE(ZEND_SPACESHIP_SPEC_TMPVAR_CV) ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV): VM_TRACE(ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CASE_SPEC_TMPVAR_CV): VM_TRACE(ZEND_CASE_SPEC_TMPVAR_CV) ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RETURN_SPEC_TMP): VM_TRACE(ZEND_RETURN_SPEC_TMP) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = _get_zval_ptr_tmp(opline->op1.var, &free_op1 EXECUTE_DATA_CC); return_value = EX(return_value); if (IS_TMP_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_TMP_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_TMP_VAR & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_TMP_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_TMP_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_TMP_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } goto zend_leave_helper_SPEC_LABEL; } HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_TMP): VM_TRACE(ZEND_RETURN_BY_REF_SPEC_TMP) ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_TMP): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_TMP) ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_THROW_SPEC_TMP): VM_TRACE(ZEND_THROW_SPEC_TMP) ZEND_THROW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP): VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP) ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK): VM_TRACE(ZEND_SEND_VAL_EX_SPEC_TMP_QUICK) ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_USER_SPEC_TMP): VM_TRACE(ZEND_SEND_USER_SPEC_TMP) ZEND_SEND_USER_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CAST_SPEC_TMP): VM_TRACE(ZEND_CAST_SPEC_TMP) ZEND_CAST_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_R_SPEC_TMP): VM_TRACE(ZEND_FE_RESET_R_SPEC_TMP) ZEND_FE_RESET_R_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_TMP): VM_TRACE(ZEND_FE_RESET_RW_SPEC_TMP) ZEND_FE_RESET_RW_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_END_SILENCE_SPEC_TMP): VM_TRACE(ZEND_END_SILENCE_SPEC_TMP) ZEND_END_SILENCE_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMP_SET_SPEC_TMP): VM_TRACE(ZEND_JMP_SET_SPEC_TMP) ZEND_JMP_SET_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_TMP): VM_TRACE(ZEND_QM_ASSIGN_SPEC_TMP) ZEND_QM_ASSIGN_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_FROM_SPEC_TMP): VM_TRACE(ZEND_YIELD_FROM_SPEC_TMP) ZEND_YIELD_FROM_SPEC_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_CONST) ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST) ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CONST): VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CONST) ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CONST): VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CONST) ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CONST): VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CONST) ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CONST): VM_TRACE(ZEND_YIELD_SPEC_TMP_CONST) ZEND_YIELD_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IN_ARRAY_SPEC_TMP_CONST): VM_TRACE(ZEND_IN_ARRAY_SPEC_TMP_CONST) ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR): VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_TMPVAR): VM_TRACE(ZEND_ROPE_END_SPEC_TMP_TMPVAR) ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR): VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_TMP_TMP) ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP) ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_TMP_TMP): VM_TRACE(ZEND_YIELD_SPEC_TMP_TMP) ZEND_YIELD_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_TMP_VAR): VM_TRACE(ZEND_YIELD_SPEC_TMP_VAR) ZEND_YIELD_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED): VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED): VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_TMP_UNUSED): VM_TRACE(ZEND_YIELD_SPEC_TMP_UNUSED) ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COUNT_SPEC_TMP_UNUSED): VM_TRACE(ZEND_COUNT_SPEC_TMP_UNUSED) ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_CLASS_SPEC_TMP_UNUSED): VM_TRACE(ZEND_GET_CLASS_SPEC_TMP_UNUSED) ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_TYPE_SPEC_TMP_UNUSED): VM_TRACE(ZEND_GET_TYPE_SPEC_TMP_UNUSED) ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_ADD_SPEC_TMP_CV): VM_TRACE(ZEND_ROPE_ADD_SPEC_TMP_CV) ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_END_SPEC_TMP_CV): VM_TRACE(ZEND_ROPE_END_SPEC_TMP_CV) ZEND_ROPE_END_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_TMP_CV): VM_TRACE(ZEND_INIT_ARRAY_SPEC_TMP_CV) ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_TMP_CV): VM_TRACE(ZEND_YIELD_SPEC_TMP_CV) ZEND_YIELD_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BIND_LEXICAL_SPEC_TMP_CV): VM_TRACE(ZEND_BIND_LEXICAL_SPEC_TMP_CV) ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED) ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED): VM_TRACE(ZEND_PRE_INC_SPEC_VAR_RETVAL_USED) ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED) ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED): VM_TRACE(ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED) ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_SPEC_VAR): VM_TRACE(ZEND_POST_INC_SPEC_VAR) ZEND_POST_INC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_SPEC_VAR): VM_TRACE(ZEND_POST_DEC_SPEC_VAR) ZEND_POST_DEC_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RETURN_SPEC_VAR): VM_TRACE(ZEND_RETURN_SPEC_VAR) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = _get_zval_ptr_var(opline->op1.var, &free_op1 EXECUTE_DATA_CC); return_value = EX(return_value); if (IS_VAR == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_VAR & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_VAR & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_VAR == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_VAR == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_VAR == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } goto zend_leave_helper_SPEC_LABEL; } HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_VAR): VM_TRACE(ZEND_RETURN_BY_REF_SPEC_VAR) ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_VAR): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_VAR) ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_THROW_SPEC_VAR): VM_TRACE(ZEND_THROW_SPEC_VAR) ZEND_THROW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_SPEC_VAR): VM_TRACE(ZEND_SEND_VAR_SPEC_VAR) ZEND_SEND_VAR_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_NO_REF_SPEC_VAR): VM_TRACE(ZEND_SEND_VAR_NO_REF_SPEC_VAR) ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR): VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR) ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK): VM_TRACE(ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK) ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_REF_SPEC_VAR): VM_TRACE(ZEND_SEND_REF_SPEC_VAR) ZEND_SEND_REF_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR): VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR) ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK): VM_TRACE(ZEND_SEND_VAR_EX_SPEC_VAR_QUICK) ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_FUNC_ARG_SPEC_VAR): VM_TRACE(ZEND_SEND_FUNC_ARG_SPEC_VAR) ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_USER_SPEC_VAR): VM_TRACE(ZEND_SEND_USER_SPEC_VAR) ZEND_SEND_USER_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CAST_SPEC_VAR): VM_TRACE(ZEND_CAST_SPEC_VAR) ZEND_CAST_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_R_SPEC_VAR): VM_TRACE(ZEND_FE_RESET_R_SPEC_VAR) ZEND_FE_RESET_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_VAR): VM_TRACE(ZEND_FE_RESET_RW_SPEC_VAR) ZEND_FE_RESET_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_FETCH_R_SPEC_VAR): VM_TRACE(ZEND_FE_FETCH_R_SPEC_VAR) ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_FETCH_RW_SPEC_VAR): VM_TRACE(ZEND_FE_FETCH_RW_SPEC_VAR) ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMP_SET_SPEC_VAR): VM_TRACE(ZEND_JMP_SET_SPEC_VAR) ZEND_JMP_SET_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_VAR): VM_TRACE(ZEND_QM_ASSIGN_SPEC_VAR) ZEND_QM_ASSIGN_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_FROM_SPEC_VAR): VM_TRACE(ZEND_YIELD_FROM_SPEC_VAR) ZEND_YIELD_FROM_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR): VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_VAR) ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR): VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR) ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_CONST) ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST) ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST) ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST) ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST) ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST) ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST) ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CONST) ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CONST) ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST) ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST) ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST) ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST) ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CONST) ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM) ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ) ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST) ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CONST) ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_CONST): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_VAR_CONST) ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CONST) ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CONST) ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED) ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST): VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CONST): VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CONST) ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CONST): VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CONST) ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CONST): VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CONST) ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CONST): VM_TRACE(ZEND_YIELD_SPEC_VAR_CONST) ZEND_YIELD_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IN_ARRAY_SPEC_VAR_CONST): VM_TRACE(ZEND_IN_ARRAY_SPEC_VAR_CONST) ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR) ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR) ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR) ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR) ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR) ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR) ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR) ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR) ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR) ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR) ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR) ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR) ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM) ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ) ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR) ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR) ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR): VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_TMP) ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP) ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED) ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_VAR_TMP): VM_TRACE(ZEND_YIELD_SPEC_VAR_TMP) ZEND_YIELD_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_VAR_VAR) ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR) ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED) ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_VAR): VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_VAR) ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_VAR_VAR): VM_TRACE(ZEND_YIELD_SPEC_VAR_VAR) ZEND_YIELD_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM) ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED): VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_NEW_SPEC_VAR_UNUSED): VM_TRACE(ZEND_NEW_SPEC_VAR_UNUSED) ZEND_NEW_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED): VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEPARATE_SPEC_VAR_UNUSED): VM_TRACE(ZEND_SEPARATE_SPEC_VAR_UNUSED) ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_VAR_UNUSED): VM_TRACE(ZEND_YIELD_SPEC_VAR_UNUSED) ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MAKE_REF_SPEC_VAR_UNUSED): VM_TRACE(ZEND_MAKE_REF_SPEC_VAR_UNUSED) ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COUNT_SPEC_VAR_UNUSED): VM_TRACE(ZEND_COUNT_SPEC_VAR_UNUSED) ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_CLASS_SPEC_VAR_UNUSED): VM_TRACE(ZEND_GET_CLASS_SPEC_VAR_UNUSED) ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_TYPE_SPEC_VAR_UNUSED): VM_TRACE(ZEND_GET_TYPE_SPEC_VAR_UNUSED) ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CV) ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM) ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CV) ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM) ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CV) ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM) ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CV) ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM) ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CV) ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM) ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CV) ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM) ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CV) ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM) ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV) ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM) ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV) ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM) ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV) ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM) ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV) ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM) ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CV) ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM) ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ) ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_VAR_CV) ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CV): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_VAR_CV) ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_VAR_CV): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_VAR_CV) ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_VAR_CV): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_VAR_CV) ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_VAR_CV) ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_VAR_CV) ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_VAR_CV) ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_LIST_W_SPEC_VAR_CV): VM_TRACE(ZEND_FETCH_LIST_W_SPEC_VAR_CV) ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED) ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_VAR_CV): VM_TRACE(ZEND_ASSIGN_REF_SPEC_VAR_CV) ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_VAR_CV): VM_TRACE(ZEND_INIT_ARRAY_SPEC_VAR_CV) ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_DIM_SPEC_VAR_CV): VM_TRACE(ZEND_UNSET_DIM_SPEC_VAR_CV) ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_VAR_CV): VM_TRACE(ZEND_UNSET_OBJ_SPEC_VAR_CV) ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_VAR_CV): VM_TRACE(ZEND_YIELD_SPEC_VAR_CV) ZEND_YIELD_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED): VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED): VM_TRACE(ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED): VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED) ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK): VM_TRACE(ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK) ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CLONE_SPEC_UNUSED): VM_TRACE(ZEND_CLONE_SPEC_UNUSED) ZEND_CLONE_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXIT_SPEC_UNUSED): VM_TRACE(ZEND_EXIT_SPEC_UNUSED) ZEND_EXIT_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED): VM_TRACE(ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ) ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST) ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST) ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST): VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CONST) ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST): VM_TRACE(ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST): VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CONST): VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CONST) ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ) ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR) ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR) ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_TMP): VM_TRACE(ZEND_YIELD_SPEC_UNUSED_TMP) ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_VAR): VM_TRACE(ZEND_YIELD_SPEC_UNUSED_VAR) ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_NEW_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_NEW_SPEC_UNUSED_UNUSED) ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_YIELD_SPEC_UNUSED_UNUSED) ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED): VM_TRACE(ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ) ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV) ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV) ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ROPE_INIT_SPEC_UNUSED_CV): VM_TRACE(ZEND_ROPE_INIT_SPEC_UNUSED_CV) ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV): VM_TRACE(ZEND_FETCH_CLASS_SPEC_UNUSED_CV) ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV): VM_TRACE(ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV): VM_TRACE(ZEND_UNSET_OBJ_SPEC_UNUSED_CV) ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_UNUSED_CV): VM_TRACE(ZEND_YIELD_SPEC_UNUSED_CV) ZEND_YIELD_SPEC_UNUSED_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_NOT_SPEC_CV): VM_TRACE(ZEND_BW_NOT_SPEC_CV) ZEND_BW_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_NOT_SPEC_CV): VM_TRACE(ZEND_BOOL_NOT_SPEC_CV) ZEND_BOOL_NOT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_INC_SPEC_CV_RETVAL_USED) ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_DEC_SPEC_CV_RETVAL_USED) ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_SPEC_CV): VM_TRACE(ZEND_POST_INC_SPEC_CV) ZEND_POST_INC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_SPEC_CV): VM_TRACE(ZEND_POST_DEC_SPEC_CV) ZEND_POST_DEC_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ECHO_SPEC_CV): VM_TRACE(ZEND_ECHO_SPEC_CV) ZEND_ECHO_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZ_SPEC_CV): VM_TRACE(ZEND_JMPZ_SPEC_CV) ZEND_JMPZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPNZ_SPEC_CV): VM_TRACE(ZEND_JMPNZ_SPEC_CV) ZEND_JMPNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZNZ_SPEC_CV): VM_TRACE(ZEND_JMPZNZ_SPEC_CV) ZEND_JMPZNZ_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPZ_EX_SPEC_CV): VM_TRACE(ZEND_JMPZ_EX_SPEC_CV) ZEND_JMPZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMPNZ_EX_SPEC_CV): VM_TRACE(ZEND_JMPNZ_EX_SPEC_CV) ZEND_JMPNZ_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_RETURN_SPEC_CV): VM_TRACE(ZEND_RETURN_SPEC_CV) { USE_OPLINE zval *retval_ptr; zval *return_value; zend_free_op free_op1; retval_ptr = EX_VAR(opline->op1.var); return_value = EX(return_value); if (IS_CV == IS_CV && UNEXPECTED(Z_TYPE_INFO_P(retval_ptr) == IS_UNDEF)) { SAVE_OPLINE(); retval_ptr = GET_OP1_UNDEF_CV(retval_ptr, BP_VAR_R); if (return_value) { ZVAL_NULL(return_value); } } else if (!return_value) { if (IS_CV & (IS_VAR|IS_TMP_VAR)) { if (Z_REFCOUNTED_P(free_op1) && !Z_DELREF_P(free_op1)) { SAVE_OPLINE(); rc_dtor_func(Z_COUNTED_P(free_op1)); } } } else { if ((IS_CV & (IS_CONST|IS_TMP_VAR))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (IS_CV == IS_CONST) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(return_value))) { Z_ADDREF_P(return_value); } } } else if (IS_CV == IS_CV) { if (Z_OPT_REFCOUNTED_P(retval_ptr)) { if (EXPECTED(!Z_OPT_ISREF_P(retval_ptr))) { ZVAL_COPY_VALUE(return_value, retval_ptr); if (EXPECTED(!(EX_CALL_INFO() & ZEND_CALL_CODE))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); if (GC_MAY_LEAK(ref)) { gc_possible_root(ref); } ZVAL_NULL(retval_ptr); } else { Z_ADDREF_P(return_value); } } else { retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY(return_value, retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } else /* if (IS_CV == IS_VAR) */ { if (UNEXPECTED(Z_ISREF_P(retval_ptr))) { zend_refcounted *ref = Z_COUNTED_P(retval_ptr); retval_ptr = Z_REFVAL_P(retval_ptr); ZVAL_COPY_VALUE(return_value, retval_ptr); if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(retval_ptr)) { Z_ADDREF_P(retval_ptr); } } else { ZVAL_COPY_VALUE(return_value, retval_ptr); } } } goto zend_leave_helper_SPEC_LABEL; } HYBRID_CASE(ZEND_RETURN_BY_REF_SPEC_CV): VM_TRACE(ZEND_RETURN_BY_REF_SPEC_CV) ZEND_RETURN_BY_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GENERATOR_RETURN_SPEC_CV): VM_TRACE(ZEND_GENERATOR_RETURN_SPEC_CV) ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_THROW_SPEC_CV): VM_TRACE(ZEND_THROW_SPEC_CV) ZEND_THROW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_SPEC_CV): VM_TRACE(ZEND_SEND_VAR_SPEC_CV) ZEND_SEND_VAR_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_REF_SPEC_CV): VM_TRACE(ZEND_SEND_REF_SPEC_CV) ZEND_SEND_REF_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV): VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV) ZEND_SEND_VAR_EX_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK): VM_TRACE(ZEND_SEND_VAR_EX_SPEC_CV_QUICK) ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_USER_SPEC_CV): VM_TRACE(ZEND_SEND_USER_SPEC_CV) ZEND_SEND_USER_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_SPEC_CV): VM_TRACE(ZEND_BOOL_SPEC_CV) ZEND_BOOL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CLONE_SPEC_CV): VM_TRACE(ZEND_CLONE_SPEC_CV) ZEND_CLONE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CAST_SPEC_CV): VM_TRACE(ZEND_CAST_SPEC_CV) ZEND_CAST_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INCLUDE_OR_EVAL_SPEC_CV): VM_TRACE(ZEND_INCLUDE_OR_EVAL_SPEC_CV) ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_R_SPEC_CV): VM_TRACE(ZEND_FE_RESET_R_SPEC_CV) ZEND_FE_RESET_R_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FE_RESET_RW_SPEC_CV): VM_TRACE(ZEND_FE_RESET_RW_SPEC_CV) ZEND_FE_RESET_RW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_EXIT_SPEC_CV): VM_TRACE(ZEND_EXIT_SPEC_CV) ZEND_EXIT_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_JMP_SET_SPEC_CV): VM_TRACE(ZEND_JMP_SET_SPEC_CV) ZEND_JMP_SET_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COALESCE_SPEC_CV): VM_TRACE(ZEND_COALESCE_SPEC_CV) ZEND_COALESCE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_QM_ASSIGN_SPEC_CV): VM_TRACE(ZEND_QM_ASSIGN_SPEC_CV) ZEND_QM_ASSIGN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_FROM_SPEC_CV): VM_TRACE(ZEND_YIELD_FROM_SPEC_CV) ZEND_YIELD_FROM_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_STRLEN_SPEC_CV): VM_TRACE(ZEND_STRLEN_SPEC_CV) ZEND_STRLEN_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_TYPE_CHECK_SPEC_CV): VM_TRACE(ZEND_TYPE_CHECK_SPEC_CV) ZEND_TYPE_CHECK_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED) ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED): VM_TRACE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED) ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED): VM_TRACE(ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED) ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV): VM_TRACE(ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_LONG_SPEC_CV): VM_TRACE(ZEND_POST_INC_LONG_SPEC_CV) ZEND_POST_INC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV): VM_TRACE(ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV) ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV): VM_TRACE(ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_LONG_SPEC_CV): VM_TRACE(ZEND_POST_DEC_LONG_SPEC_CV) ZEND_POST_DEC_LONG_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV): VM_TRACE(ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV) ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_SIMPLE_SPEC_CV): VM_TRACE(ZEND_SEND_VAR_SIMPLE_SPEC_CV) ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV): VM_TRACE(ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV) ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_CV_CONST): VM_TRACE(ZEND_ADD_SPEC_CV_CONST) ZEND_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_CV_CONST): VM_TRACE(ZEND_SUB_SPEC_CV_CONST) ZEND_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_SPEC_CV_CONST): VM_TRACE(ZEND_MUL_SPEC_CV_CONST) ZEND_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_CV_CONST): VM_TRACE(ZEND_DIV_SPEC_CV_CONST) ZEND_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_CV_CONST): VM_TRACE(ZEND_MOD_SPEC_CV_CONST) ZEND_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_CV_CONST): VM_TRACE(ZEND_SL_SPEC_CV_CONST) ZEND_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_CV_CONST): VM_TRACE(ZEND_SR_SPEC_CV_CONST) ZEND_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_CV_CONST): VM_TRACE(ZEND_POW_SPEC_CV_CONST) ZEND_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CONST): VM_TRACE(ZEND_CONCAT_SPEC_CV_CONST) ZEND_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CONST): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CONST) ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST) ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CONST): VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CONST) ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST): VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CONST) ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_CONST): VM_TRACE(ZEND_IS_SMALLER_SPEC_CV_CONST) ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST) ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CONST): VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CONST) ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_OR_SPEC_CV_CONST): VM_TRACE(ZEND_BW_OR_SPEC_CV_CONST) ZEND_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_AND_SPEC_CV_CONST): VM_TRACE(ZEND_BW_AND_SPEC_CV_CONST) ZEND_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_CONST): VM_TRACE(ZEND_BW_XOR_SPEC_CV_CONST) ZEND_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CONST): VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CONST) ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CONST) ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM) ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CONST) ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM) ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CONST) ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM) ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CONST) ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM) ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CONST) ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM) ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CONST) ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM) ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CONST) ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM) ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST) ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM) ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST) ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM) ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST) ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM) ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST) ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM) ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CONST) ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM) ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ) ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CONST) ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_CV_CONST) ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CONST) ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_CV_CONST) ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST) ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST) ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST) ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST) ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CONST) ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CONST) ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CONST) ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CONST) ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CONST) ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CONST) ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED) ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CONST): VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CONST) ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CONST): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CONST) ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST) ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CONST): VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CONST) ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CONST) ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_CONST): VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_CONST) ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CV_CONST): VM_TRACE(ZEND_YIELD_SPEC_CV_CONST) ZEND_YIELD_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BIND_GLOBAL_SPEC_CV_CONST): VM_TRACE(ZEND_BIND_GLOBAL_SPEC_CV_CONST) ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BIND_STATIC_SPEC_CV_CONST): VM_TRACE(ZEND_BIND_STATIC_SPEC_CV_CONST) ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IN_ARRAY_SPEC_CV_CONST): VM_TRACE(ZEND_IN_ARRAY_SPEC_CV_CONST) ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST): VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV): VM_TRACE(ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ADD_SPEC_CV_TMPVAR) ZEND_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_CV_TMPVAR): VM_TRACE(ZEND_SUB_SPEC_CV_TMPVAR) ZEND_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_MUL_SPEC_CV_TMPVAR) ZEND_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_CV_TMPVAR): VM_TRACE(ZEND_DIV_SPEC_CV_TMPVAR) ZEND_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_CV_TMPVAR): VM_TRACE(ZEND_MOD_SPEC_CV_TMPVAR) ZEND_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_SL_SPEC_CV_TMPVAR) ZEND_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_SR_SPEC_CV_TMPVAR) ZEND_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_CV_TMPVAR): VM_TRACE(ZEND_POW_SPEC_CV_TMPVAR) ZEND_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_CV_TMPVAR): VM_TRACE(ZEND_CONCAT_SPEC_CV_TMPVAR) ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_TMPVAR) ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR) ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_TMPVAR): VM_TRACE(ZEND_IS_SMALLER_SPEC_CV_TMPVAR) ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR) ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_TMPVAR): VM_TRACE(ZEND_SPACESHIP_SPEC_CV_TMPVAR) ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_OR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_BW_OR_SPEC_CV_TMPVAR) ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_AND_SPEC_CV_TMPVAR): VM_TRACE(ZEND_BW_AND_SPEC_CV_TMPVAR) ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_BW_XOR_SPEC_CV_TMPVAR) ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_TMPVAR) ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR) ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR) ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR) ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR) ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR) ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR) ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR) ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR) ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR) ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR) ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR) ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR) ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM) ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ) ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR) ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR) ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR): VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR): VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_TMPVAR) ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_TMP): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_TMP) ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP) ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED) ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CV_TMP): VM_TRACE(ZEND_YIELD_SPEC_CV_TMP) ZEND_YIELD_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_VAR): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_VAR) ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR) ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR) ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR) ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR) ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR) ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED) ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_VAR): VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_VAR) ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR) ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_VAR): VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_VAR) ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CV_VAR): VM_TRACE(ZEND_YIELD_SPEC_CV_VAR) ZEND_YIELD_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM) ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_R_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_R_SPEC_CV_UNUSED) ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_W_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_W_SPEC_CV_UNUSED) ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_RW_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_RW_SPEC_CV_UNUSED) ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_UNSET_SPEC_CV_UNUSED) ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_IS_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_IS_SPEC_CV_UNUSED) ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED) ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED) ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED) ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED) ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED) ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED) ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED): VM_TRACE(ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_UNUSED) ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_CV_SPEC_CV_UNUSED): VM_TRACE(ZEND_UNSET_CV_SPEC_CV_UNUSED) ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_VAR_SPEC_CV_UNUSED): VM_TRACE(ZEND_UNSET_VAR_SPEC_CV_UNUSED) ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED): VM_TRACE(ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED) ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET): VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY): VM_TRACE(ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED): VM_TRACE(ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED) ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INSTANCEOF_SPEC_CV_UNUSED): VM_TRACE(ZEND_INSTANCEOF_SPEC_CV_UNUSED) ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CV_UNUSED): VM_TRACE(ZEND_YIELD_SPEC_CV_UNUSED) ZEND_YIELD_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CHECK_VAR_SPEC_CV_UNUSED): VM_TRACE(ZEND_CHECK_VAR_SPEC_CV_UNUSED) ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MAKE_REF_SPEC_CV_UNUSED): VM_TRACE(ZEND_MAKE_REF_SPEC_CV_UNUSED) ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_COUNT_SPEC_CV_UNUSED): VM_TRACE(ZEND_COUNT_SPEC_CV_UNUSED) ZEND_COUNT_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_CLASS_SPEC_CV_UNUSED): VM_TRACE(ZEND_GET_CLASS_SPEC_CV_UNUSED) ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_GET_TYPE_SPEC_CV_UNUSED): VM_TRACE(ZEND_GET_TYPE_SPEC_CV_UNUSED) ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_SPEC_CV_CV): VM_TRACE(ZEND_ADD_SPEC_CV_CV) ZEND_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SUB_SPEC_CV_CV): VM_TRACE(ZEND_SUB_SPEC_CV_CV) ZEND_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MUL_SPEC_CV_CV): VM_TRACE(ZEND_MUL_SPEC_CV_CV) ZEND_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_DIV_SPEC_CV_CV): VM_TRACE(ZEND_DIV_SPEC_CV_CV) ZEND_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_MOD_SPEC_CV_CV): VM_TRACE(ZEND_MOD_SPEC_CV_CV) ZEND_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SL_SPEC_CV_CV): VM_TRACE(ZEND_SL_SPEC_CV_CV) ZEND_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SR_SPEC_CV_CV): VM_TRACE(ZEND_SR_SPEC_CV_CV) ZEND_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POW_SPEC_CV_CV): VM_TRACE(ZEND_POW_SPEC_CV_CV) ZEND_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_CONCAT_SPEC_CV_CV): VM_TRACE(ZEND_CONCAT_SPEC_CV_CV) ZEND_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_IDENTICAL_SPEC_CV_CV): VM_TRACE(ZEND_IS_IDENTICAL_SPEC_CV_CV) ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV): VM_TRACE(ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV) ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_EQUAL_SPEC_CV_CV): VM_TRACE(ZEND_IS_EQUAL_SPEC_CV_CV) ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV): VM_TRACE(ZEND_IS_NOT_EQUAL_SPEC_CV_CV) ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_SPEC_CV_CV): VM_TRACE(ZEND_IS_SMALLER_SPEC_CV_CV) ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV): VM_TRACE(ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV) ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_SPACESHIP_SPEC_CV_CV): VM_TRACE(ZEND_SPACESHIP_SPEC_CV_CV) ZEND_SPACESHIP_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_OR_SPEC_CV_CV): VM_TRACE(ZEND_BW_OR_SPEC_CV_CV) ZEND_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_AND_SPEC_CV_CV): VM_TRACE(ZEND_BW_AND_SPEC_CV_CV) ZEND_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BW_XOR_SPEC_CV_CV): VM_TRACE(ZEND_BW_XOR_SPEC_CV_CV) ZEND_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_BOOL_XOR_SPEC_CV_CV): VM_TRACE(ZEND_BOOL_XOR_SPEC_CV_CV) ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CV) ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM) ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ) ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CV) ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM) ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ) ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CV) ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM) ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ) ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CV) ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM) ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ) ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CV) ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM) ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ) ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CV) ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CV_DIM) ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ) ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CV) ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CV_DIM) ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ) ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV) ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM) ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ) ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV) ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM) ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ) ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV) ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM) ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ) ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV) ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM) ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ) ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CV) ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV_DIM): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CV_DIM) ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ): VM_TRACE(ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ) ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_INC_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_PRE_INC_OBJ_SPEC_CV_CV) ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_PRE_DEC_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_PRE_DEC_OBJ_SPEC_CV_CV) ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_INC_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_POST_INC_OBJ_SPEC_CV_CV) ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_POST_DEC_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_POST_DEC_OBJ_SPEC_CV_CV) ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_R_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_DIM_R_SPEC_CV_CV) ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_W_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_DIM_W_SPEC_CV_CV) ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_RW_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_DIM_RW_SPEC_CV_CV) ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_IS_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_DIM_IS_SPEC_CV_CV) ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_R_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_OBJ_R_SPEC_CV_CV) ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_W_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_OBJ_W_SPEC_CV_CV) ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_OBJ_RW_SPEC_CV_CV) ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_OBJ_IS_SPEC_CV_CV) ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV): VM_TRACE(ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST) ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP) ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR) ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV) ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST) ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV): VM_TRACE(ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED) ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED): VM_TRACE(ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED) ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ASSIGN_REF_SPEC_CV_CV): VM_TRACE(ZEND_ASSIGN_REF_SPEC_CV_CV) ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_FAST_CONCAT_SPEC_CV_CV): VM_TRACE(ZEND_FAST_CONCAT_SPEC_CV_CV) ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV): VM_TRACE(ZEND_INIT_METHOD_CALL_SPEC_CV_CV) ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV): VM_TRACE(ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_INIT_ARRAY_SPEC_CV_CV): VM_TRACE(ZEND_INIT_ARRAY_SPEC_CV_CV) ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_DIM_SPEC_CV_CV): VM_TRACE(ZEND_UNSET_DIM_SPEC_CV_CV) ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_UNSET_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_UNSET_OBJ_SPEC_CV_CV) ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV): VM_TRACE(ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(ZEND_YIELD_SPEC_CV_CV): VM_TRACE(ZEND_YIELD_SPEC_CV_CV) ZEND_YIELD_SPEC_CV_CV_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); HYBRID_CASE(HYBRID_HALT): execute_data = orig_execute_data; opline = orig_opline; return; HYBRID_DEFAULT: VM_TRACE(ZEND_NULL) ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); HYBRID_BREAK(); /* Never reached */ #else #ifdef ZEND_VM_FP_GLOBAL_REG execute_data = orig_execute_data; # ifdef ZEND_VM_IP_GLOBAL_REG opline = orig_opline; # endif return; #else if (EXPECTED(ret > 0)) { execute_data = EG(current_execute_data); ZEND_VM_LOOP_INTERRUPT_CHECK(); } else { # ifdef ZEND_VM_IP_GLOBAL_REG opline = orig_opline; # endif return; } #endif #endif } } zend_error_noreturn(E_CORE_ERROR, "Arrived at end of main loop which shouldn't happen"); } ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value) { zend_execute_data *execute_data; if (EG(exception) != NULL) { return; } execute_data = zend_vm_stack_push_call_frame(ZEND_CALL_TOP_CODE | ZEND_CALL_HAS_SYMBOL_TABLE, (zend_function*)op_array, 0, zend_get_called_scope(EG(current_execute_data)), zend_get_this_object(EG(current_execute_data))); if (EG(current_execute_data)) { execute_data->symbol_table = zend_rebuild_symbol_table(); } else { execute_data->symbol_table = &EG(symbol_table); } EX(prev_execute_data) = EG(current_execute_data); i_init_code_execute_data(execute_data, op_array, return_value); zend_execute_ex(execute_data); zend_vm_stack_free_call_frame(execute_data); } void zend_vm_init(void) { static const void * const labels[] = { ZEND_NOP_SPEC_HANDLER, ZEND_ADD_SPEC_CONST_CONST_HANDLER, ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER, ZEND_ADD_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_SPEC_CONST_CV_HANDLER, ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER, ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_SPEC_TMPVAR_CV_HANDLER, ZEND_ADD_SPEC_TMPVAR_CONST_HANDLER, ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_ADD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_SPEC_CV_CONST_HANDLER, ZEND_ADD_SPEC_CV_TMPVAR_HANDLER, ZEND_ADD_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_SPEC_CV_CV_HANDLER, ZEND_SUB_SPEC_CONST_CONST_HANDLER, ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER, ZEND_SUB_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_SPEC_CONST_CV_HANDLER, ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER, ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_SPEC_TMPVAR_CV_HANDLER, ZEND_SUB_SPEC_TMPVAR_CONST_HANDLER, ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SUB_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_SPEC_CV_CONST_HANDLER, ZEND_SUB_SPEC_CV_TMPVAR_HANDLER, ZEND_SUB_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_SPEC_CV_CV_HANDLER, ZEND_MUL_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER, ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_SPEC_TMPVAR_CONST_HANDLER, ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_MUL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_SPEC_CV_CONST_HANDLER, ZEND_MUL_SPEC_CV_TMPVAR_HANDLER, ZEND_MUL_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_SPEC_CV_CV_HANDLER, ZEND_DIV_SPEC_CONST_CONST_HANDLER, ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER, ZEND_DIV_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_DIV_SPEC_CONST_CV_HANDLER, ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER, ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_DIV_SPEC_TMPVAR_CV_HANDLER, ZEND_DIV_SPEC_TMPVAR_CONST_HANDLER, ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_DIV_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_DIV_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_DIV_SPEC_CV_CONST_HANDLER, ZEND_DIV_SPEC_CV_TMPVAR_HANDLER, ZEND_DIV_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_DIV_SPEC_CV_CV_HANDLER, ZEND_MOD_SPEC_CONST_CONST_HANDLER, ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER, ZEND_MOD_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_MOD_SPEC_CONST_CV_HANDLER, ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER, ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_MOD_SPEC_TMPVAR_CV_HANDLER, ZEND_MOD_SPEC_TMPVAR_CONST_HANDLER, ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_MOD_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_MOD_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MOD_SPEC_CV_CONST_HANDLER, ZEND_MOD_SPEC_CV_TMPVAR_HANDLER, ZEND_MOD_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_MOD_SPEC_CV_CV_HANDLER, ZEND_SL_SPEC_CONST_CONST_HANDLER, ZEND_SL_SPEC_CONST_TMPVAR_HANDLER, ZEND_SL_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SL_SPEC_CONST_CV_HANDLER, ZEND_SL_SPEC_TMPVAR_CONST_HANDLER, ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SL_SPEC_TMPVAR_CV_HANDLER, ZEND_SL_SPEC_TMPVAR_CONST_HANDLER, ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SL_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SL_SPEC_CV_CONST_HANDLER, ZEND_SL_SPEC_CV_TMPVAR_HANDLER, ZEND_SL_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SL_SPEC_CV_CV_HANDLER, ZEND_SR_SPEC_CONST_CONST_HANDLER, ZEND_SR_SPEC_CONST_TMPVAR_HANDLER, ZEND_SR_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SR_SPEC_CONST_CV_HANDLER, ZEND_SR_SPEC_TMPVAR_CONST_HANDLER, ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SR_SPEC_TMPVAR_CV_HANDLER, ZEND_SR_SPEC_TMPVAR_CONST_HANDLER, ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SR_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SR_SPEC_CV_CONST_HANDLER, ZEND_SR_SPEC_CV_TMPVAR_HANDLER, ZEND_SR_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SR_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER, ZEND_CONCAT_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_CONCAT_SPEC_CONST_CV_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_CONST_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_CONCAT_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_CONCAT_SPEC_CV_CONST_HANDLER, ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER, ZEND_CONCAT_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_CONCAT_SPEC_CV_CV_HANDLER, ZEND_BW_OR_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_OR_SPEC_TMPVAR_CONST_HANDLER, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_OR_SPEC_CV_CONST_HANDLER, ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER, ZEND_BW_OR_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_OR_SPEC_CV_CV_HANDLER, ZEND_BW_AND_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_AND_SPEC_TMPVAR_CONST_HANDLER, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_AND_SPEC_CV_CONST_HANDLER, ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER, ZEND_BW_AND_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_AND_SPEC_CV_CV_HANDLER, ZEND_BW_XOR_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_XOR_SPEC_TMPVAR_CONST_HANDLER, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_XOR_SPEC_CV_CONST_HANDLER, ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER, ZEND_BW_XOR_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_XOR_SPEC_CV_CV_HANDLER, ZEND_BW_NOT_SPEC_CONST_HANDLER, ZEND_BW_NOT_SPEC_TMPVAR_HANDLER, ZEND_BW_NOT_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BW_NOT_SPEC_CV_HANDLER, ZEND_BOOL_NOT_SPEC_CONST_HANDLER, ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER, ZEND_BOOL_NOT_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BOOL_NOT_SPEC_CV_HANDLER, ZEND_BOOL_XOR_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BOOL_XOR_SPEC_TMPVAR_CONST_HANDLER, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_BOOL_XOR_SPEC_CV_CONST_HANDLER, ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER, ZEND_BOOL_XOR_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BOOL_XOR_SPEC_CV_CV_HANDLER, ZEND_IS_IDENTICAL_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_IDENTICAL_SPEC_TMP_CONST_HANDLER, ZEND_IS_IDENTICAL_SPEC_TMP_TMP_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_IDENTICAL_SPEC_VAR_CONST_HANDLER, ZEND_IS_IDENTICAL_SPEC_VAR_TMP_HANDLER, ZEND_IS_IDENTICAL_SPEC_VAR_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_IDENTICAL_SPEC_CV_CONST_HANDLER, ZEND_IS_IDENTICAL_SPEC_CV_TMP_HANDLER, ZEND_IS_IDENTICAL_SPEC_CV_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_IDENTICAL_SPEC_CV_CV_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV_HANDLER, ZEND_IS_EQUAL_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER, ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER, ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLER, ZEND_IS_SMALLER_SPEC_CONST_CONST_HANDLER, ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER, ZEND_IS_SMALLER_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_SPEC_CONST_CV_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_SPEC_CV_CONST_HANDLER, ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER, ZEND_IS_SMALLER_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_SPEC_CV_CV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV_HANDLER, ZEND_CAST_SPEC_CONST_HANDLER, ZEND_CAST_SPEC_TMP_HANDLER, ZEND_CAST_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_CAST_SPEC_CV_HANDLER, ZEND_QM_ASSIGN_SPEC_CONST_HANDLER, ZEND_QM_ASSIGN_SPEC_TMP_HANDLER, ZEND_QM_ASSIGN_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_QM_ASSIGN_SPEC_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED_HANDLER, ZEND_PRE_INC_SPEC_VAR_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_INC_SPEC_CV_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED_HANDLER, ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_DEC_SPEC_CV_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_INC_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_INC_SPEC_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_DEC_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_DEC_SPEC_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED_HANDLER, ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED_HANDLER, ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED_HANDLER, ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED_HANDLER, ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED_HANDLER, ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_REF_SPEC_VAR_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_REF_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_REF_SPEC_CV_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_REF_SPEC_CV_CV_HANDLER, ZEND_ECHO_SPEC_CONST_HANDLER, ZEND_ECHO_SPEC_TMPVAR_HANDLER, ZEND_ECHO_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ECHO_SPEC_CV_HANDLER, ZEND_GENERATOR_CREATE_SPEC_HANDLER, ZEND_JMP_SPEC_HANDLER, ZEND_JMPZ_SPEC_CONST_HANDLER, ZEND_JMPZ_SPEC_TMPVAR_HANDLER, ZEND_JMPZ_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_JMPZ_SPEC_CV_HANDLER, ZEND_JMPNZ_SPEC_CONST_HANDLER, ZEND_JMPNZ_SPEC_TMPVAR_HANDLER, ZEND_JMPNZ_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_JMPNZ_SPEC_CV_HANDLER, ZEND_JMPZNZ_SPEC_CONST_HANDLER, ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER, ZEND_JMPZNZ_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_JMPZNZ_SPEC_CV_HANDLER, ZEND_JMPZ_EX_SPEC_CONST_HANDLER, ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER, ZEND_JMPZ_EX_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_JMPZ_EX_SPEC_CV_HANDLER, ZEND_JMPNZ_EX_SPEC_CONST_HANDLER, ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER, ZEND_JMPNZ_EX_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_JMPNZ_EX_SPEC_CV_HANDLER, ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER, ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_CASE_SPEC_TMPVAR_CV_HANDLER, ZEND_CHECK_VAR_SPEC_CV_UNUSED_HANDLER, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_HANDLER, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MAKE_REF_SPEC_VAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_MAKE_REF_SPEC_CV_UNUSED_HANDLER, ZEND_BOOL_SPEC_CONST_HANDLER, ZEND_BOOL_SPEC_TMPVAR_HANDLER, ZEND_BOOL_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_BOOL_SPEC_CV_HANDLER, ZEND_FAST_CONCAT_SPEC_CONST_CONST_HANDLER, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FAST_CONCAT_SPEC_CONST_CV_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FAST_CONCAT_SPEC_CV_CONST_HANDLER, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FAST_CONCAT_SPEC_CV_CV_HANDLER, ZEND_ROPE_INIT_SPEC_UNUSED_CONST_HANDLER, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ROPE_INIT_SPEC_UNUSED_CV_HANDLER, ZEND_ROPE_ADD_SPEC_TMP_CONST_HANDLER, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ROPE_ADD_SPEC_TMP_CV_HANDLER, ZEND_ROPE_END_SPEC_TMP_CONST_HANDLER, ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER, ZEND_ROPE_END_SPEC_TMP_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ROPE_END_SPEC_TMP_CV_HANDLER, ZEND_BEGIN_SILENCE_SPEC_HANDLER, ZEND_END_SILENCE_SPEC_TMP_HANDLER, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST_HANDLER, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_FCALL_SPEC_RETVAL_USED_HANDLER, ZEND_INIT_FCALL_SPEC_CONST_HANDLER, ZEND_RETURN_SPEC_CONST_HANDLER, ZEND_RETURN_SPEC_TMP_HANDLER, ZEND_RETURN_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_RETURN_SPEC_CV_HANDLER, ZEND_RECV_SPEC_UNUSED_HANDLER, ZEND_RECV_INIT_SPEC_CONST_HANDLER, ZEND_SEND_VAL_SPEC_CONST_HANDLER, ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER, ZEND_SEND_VAL_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_EX_SPEC_VAR_HANDLER, ZEND_SEND_VAR_EX_SPEC_VAR_QUICK_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_EX_SPEC_CV_HANDLER, ZEND_SEND_VAR_EX_SPEC_CV_QUICK_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_REF_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_REF_SPEC_CV_HANDLER, ZEND_NEW_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NEW_SPEC_VAR_UNUSED_HANDLER, ZEND_NEW_SPEC_UNUSED_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST_HANDLER, ZEND_FREE_SPEC_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_CONST_CONST_HANDLER, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED_HANDLER, ZEND_INIT_ARRAY_SPEC_CONST_CV_HANDLER, ZEND_INIT_ARRAY_SPEC_TMP_CONST_HANDLER, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED_HANDLER, ZEND_INIT_ARRAY_SPEC_TMP_CV_HANDLER, ZEND_INIT_ARRAY_SPEC_VAR_CONST_HANDLER, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED_HANDLER, ZEND_INIT_ARRAY_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_ARRAY_SPEC_CV_CONST_HANDLER, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR_HANDLER, ZEND_INIT_ARRAY_SPEC_CV_UNUSED_HANDLER, ZEND_INIT_ARRAY_SPEC_CV_CV_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED_HANDLER, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_CONST_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INCLUDE_OR_EVAL_SPEC_CV_HANDLER, ZEND_UNSET_VAR_SPEC_CONST_UNUSED_HANDLER, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_VAR_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_DIM_SPEC_VAR_CONST_HANDLER, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_DIM_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_DIM_SPEC_CV_CONST_HANDLER, ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER, ZEND_UNSET_DIM_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_DIM_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_OBJ_SPEC_VAR_CONST_HANDLER, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_OBJ_SPEC_VAR_CV_HANDLER, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST_HANDLER, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_OBJ_SPEC_UNUSED_CV_HANDLER, ZEND_UNSET_OBJ_SPEC_CV_CONST_HANDLER, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_OBJ_SPEC_CV_CV_HANDLER, ZEND_FE_RESET_R_SPEC_CONST_HANDLER, ZEND_FE_RESET_R_SPEC_TMP_HANDLER, ZEND_FE_RESET_R_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FE_RESET_R_SPEC_CV_HANDLER, ZEND_FE_FETCH_R_SPEC_VAR_HANDLER, ZEND_EXIT_SPEC_CONST_HANDLER, ZEND_EXIT_SPEC_TMPVAR_HANDLER, ZEND_EXIT_SPEC_TMPVAR_HANDLER, ZEND_EXIT_SPEC_UNUSED_HANDLER, ZEND_EXIT_SPEC_CV_HANDLER, ZEND_FETCH_R_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_R_SPEC_CV_UNUSED_HANDLER, ZEND_FETCH_DIM_R_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_SPEC_CONST_CV_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_SPEC_CV_CV_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV_HANDLER, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER, ZEND_FETCH_W_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_W_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_W_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED_HANDLER, ZEND_FETCH_DIM_W_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_W_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED_HANDLER, ZEND_FETCH_DIM_W_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_W_SPEC_VAR_CV_HANDLER, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV_HANDLER, ZEND_FETCH_OBJ_W_SPEC_CV_CONST_HANDLER, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_W_SPEC_CV_CV_HANDLER, ZEND_FETCH_RW_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_RW_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED_HANDLER, ZEND_FETCH_DIM_RW_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_RW_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED_HANDLER, ZEND_FETCH_DIM_RW_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_RW_SPEC_CV_CV_HANDLER, ZEND_FETCH_IS_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_IS_SPEC_CV_UNUSED_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CONST_CV_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_IS_SPEC_CV_CV_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLER, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED_HANDLER, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV_HANDLER, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED_HANDLER, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_UNSET_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV_HANDLER, ZEND_FETCH_LIST_R_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_LIST_R_SPEC_CONST_CV_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV_HANDLER, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST_HANDLER, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_HANDLER, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK_HANDLER, ZEND_EXT_STMT_SPEC_HANDLER, ZEND_EXT_FCALL_BEGIN_SPEC_HANDLER, ZEND_EXT_FCALL_END_SPEC_HANDLER, ZEND_EXT_NOP_SPEC_HANDLER, ZEND_TICKS_SPEC_HANDLER, ZEND_SEND_VAR_NO_REF_SPEC_VAR_HANDLER, ZEND_CATCH_SPEC_CONST_HANDLER, ZEND_THROW_SPEC_CONST_HANDLER, ZEND_THROW_SPEC_TMP_HANDLER, ZEND_THROW_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_THROW_SPEC_CV_HANDLER, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST_HANDLER, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_FETCH_CLASS_SPEC_UNUSED_CV_HANDLER, ZEND_CLONE_SPEC_CONST_HANDLER, ZEND_CLONE_SPEC_TMPVAR_HANDLER, ZEND_CLONE_SPEC_TMPVAR_HANDLER, ZEND_CLONE_SPEC_UNUSED_HANDLER, ZEND_CLONE_SPEC_CV_HANDLER, ZEND_RETURN_BY_REF_SPEC_CONST_HANDLER, ZEND_RETURN_BY_REF_SPEC_TMP_HANDLER, ZEND_RETURN_BY_REF_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_RETURN_BY_REF_SPEC_CV_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED_HANDLER, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED_HANDLER, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV_HANDLER, ZEND_SEND_VAL_EX_SPEC_CONST_HANDLER, ZEND_SEND_VAL_EX_SPEC_CONST_QUICK_HANDLER, ZEND_SEND_VAL_EX_SPEC_TMP_HANDLER, ZEND_SEND_VAL_EX_SPEC_TMP_QUICK_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_SPEC_CV_HANDLER, ZEND_INIT_USER_CALL_SPEC_CONST_CONST_HANDLER, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_USER_CALL_SPEC_CONST_CV_HANDLER, ZEND_SEND_ARRAY_SPEC_HANDLER, ZEND_SEND_USER_SPEC_CONST_HANDLER, ZEND_SEND_USER_SPEC_TMP_HANDLER, ZEND_SEND_USER_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_USER_SPEC_CV_HANDLER, ZEND_STRLEN_SPEC_CONST_HANDLER, ZEND_STRLEN_SPEC_TMPVAR_HANDLER, ZEND_STRLEN_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_STRLEN_SPEC_CV_HANDLER, ZEND_DEFINED_SPEC_CONST_HANDLER, ZEND_TYPE_CHECK_SPEC_CONST_HANDLER, ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER, ZEND_TYPE_CHECK_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_TYPE_CHECK_SPEC_CV_HANDLER, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED_HANDLER, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED_HANDLER, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED_HANDLER, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED_HANDLER, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED_HANDLER, ZEND_FE_RESET_RW_SPEC_CONST_HANDLER, ZEND_FE_RESET_RW_SPEC_TMP_HANDLER, ZEND_FE_RESET_RW_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FE_RESET_RW_SPEC_CV_HANDLER, ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER, ZEND_FE_FREE_SPEC_TMPVAR_HANDLER, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST_HANDLER, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_INIT_DYNAMIC_CALL_SPEC_CV_HANDLER, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_ICALL_SPEC_RETVAL_USED_HANDLER, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_UCALL_SPEC_RETVAL_USED_HANDLER, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED_HANDLER, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST_HANDLER, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_INC_OBJ_SPEC_VAR_CV_HANDLER, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST_HANDLER, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV_HANDLER, ZEND_PRE_INC_OBJ_SPEC_CV_CONST_HANDLER, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_INC_OBJ_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_VAR_CV_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_CV_CONST_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_PRE_DEC_OBJ_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_INC_OBJ_SPEC_VAR_CONST_HANDLER, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_INC_OBJ_SPEC_VAR_CV_HANDLER, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST_HANDLER, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV_HANDLER, ZEND_POST_INC_OBJ_SPEC_CV_CONST_HANDLER, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_INC_OBJ_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_DEC_OBJ_SPEC_VAR_CONST_HANDLER, ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_DEC_OBJ_SPEC_VAR_CV_HANDLER, ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST_HANDLER, ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV_HANDLER, ZEND_POST_DEC_OBJ_SPEC_CV_CONST_HANDLER, ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POST_DEC_OBJ_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR_HANDLER, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_INSTANCEOF_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_INSTANCEOF_SPEC_CV_VAR_HANDLER, ZEND_INSTANCEOF_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_DECLARE_CLASS_SPEC_CONST_HANDLER, ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER, ZEND_DECLARE_FUNCTION_SPEC_HANDLER, ZEND_YIELD_FROM_SPEC_CONST_HANDLER, ZEND_YIELD_FROM_SPEC_TMP_HANDLER, ZEND_YIELD_FROM_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_YIELD_FROM_SPEC_CV_HANDLER, ZEND_DECLARE_CONST_SPEC_CONST_CONST_HANDLER, ZEND_ADD_INTERFACE_SPEC_CONST_HANDLER, ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST_HANDLER, ZEND_VERIFY_ABSTRACT_CLASS_SPEC_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV_HANDLER, ZEND_HANDLE_EXCEPTION_SPEC_HANDLER, ZEND_USER_OPCODE_SPEC_HANDLER, ZEND_ASSERT_CHECK_SPEC_HANDLER, ZEND_JMP_SET_SPEC_CONST_HANDLER, ZEND_JMP_SET_SPEC_TMP_HANDLER, ZEND_JMP_SET_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_JMP_SET_SPEC_CV_HANDLER, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER, ZEND_ADD_TRAIT_SPEC_HANDLER, ZEND_BIND_TRAITS_SPEC_HANDLER, ZEND_SEPARATE_SPEC_VAR_UNUSED_HANDLER, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED_HANDLER, ZEND_CALL_TRAMPOLINE_SPEC_HANDLER, ZEND_DISCARD_EXCEPTION_SPEC_HANDLER, ZEND_YIELD_SPEC_CONST_CONST_HANDLER, ZEND_YIELD_SPEC_CONST_TMP_HANDLER, ZEND_YIELD_SPEC_CONST_VAR_HANDLER, ZEND_YIELD_SPEC_CONST_UNUSED_HANDLER, ZEND_YIELD_SPEC_CONST_CV_HANDLER, ZEND_YIELD_SPEC_TMP_CONST_HANDLER, ZEND_YIELD_SPEC_TMP_TMP_HANDLER, ZEND_YIELD_SPEC_TMP_VAR_HANDLER, ZEND_YIELD_SPEC_TMP_UNUSED_HANDLER, ZEND_YIELD_SPEC_TMP_CV_HANDLER, ZEND_YIELD_SPEC_VAR_CONST_HANDLER, ZEND_YIELD_SPEC_VAR_TMP_HANDLER, ZEND_YIELD_SPEC_VAR_VAR_HANDLER, ZEND_YIELD_SPEC_VAR_UNUSED_HANDLER, ZEND_YIELD_SPEC_VAR_CV_HANDLER, ZEND_YIELD_SPEC_UNUSED_CONST_HANDLER, ZEND_YIELD_SPEC_UNUSED_TMP_HANDLER, ZEND_YIELD_SPEC_UNUSED_VAR_HANDLER, ZEND_YIELD_SPEC_UNUSED_UNUSED_HANDLER, ZEND_YIELD_SPEC_UNUSED_CV_HANDLER, ZEND_YIELD_SPEC_CV_CONST_HANDLER, ZEND_YIELD_SPEC_CV_TMP_HANDLER, ZEND_YIELD_SPEC_CV_VAR_HANDLER, ZEND_YIELD_SPEC_CV_UNUSED_HANDLER, ZEND_YIELD_SPEC_CV_CV_HANDLER, ZEND_GENERATOR_RETURN_SPEC_CONST_HANDLER, ZEND_GENERATOR_RETURN_SPEC_TMP_HANDLER, ZEND_GENERATOR_RETURN_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_GENERATOR_RETURN_SPEC_CV_HANDLER, ZEND_FAST_CALL_SPEC_HANDLER, ZEND_FAST_RET_SPEC_HANDLER, ZEND_RECV_VARIADIC_SPEC_UNUSED_HANDLER, ZEND_SEND_UNPACK_SPEC_HANDLER, ZEND_POW_SPEC_CONST_CONST_HANDLER, ZEND_POW_SPEC_CONST_TMPVAR_HANDLER, ZEND_POW_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POW_SPEC_CONST_CV_HANDLER, ZEND_POW_SPEC_TMPVAR_CONST_HANDLER, ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POW_SPEC_TMPVAR_CV_HANDLER, ZEND_POW_SPEC_TMPVAR_CONST_HANDLER, ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_POW_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POW_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_POW_SPEC_CV_CONST_HANDLER, ZEND_POW_SPEC_CV_TMPVAR_HANDLER, ZEND_POW_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_POW_SPEC_CV_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_CONST_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_CV_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_CONST_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM_HANDLER, ZEND_NULL_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_CV_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_CV_DIM_HANDLER, ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ_HANDLER, ZEND_BIND_GLOBAL_SPEC_CV_CONST_HANDLER, ZEND_COALESCE_SPEC_CONST_HANDLER, ZEND_COALESCE_SPEC_TMPVAR_HANDLER, ZEND_COALESCE_SPEC_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_COALESCE_SPEC_CV_HANDLER, ZEND_SPACESHIP_SPEC_CONST_CONST_HANDLER, ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER, ZEND_SPACESHIP_SPEC_CONST_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SPACESHIP_SPEC_CONST_CV_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_CONST_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SPACESHIP_SPEC_TMPVAR_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SPACESHIP_SPEC_CV_CONST_HANDLER, ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER, ZEND_SPACESHIP_SPEC_CV_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SPACESHIP_SPEC_CV_CV_HANDLER, ZEND_DECLARE_ANON_CLASS_SPEC_HANDLER, ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR_HANDLER, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR_HANDLER, ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR_HANDLER, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_BIND_LEXICAL_SPEC_TMP_CV_HANDLER, ZEND_BIND_STATIC_SPEC_CV_CONST_HANDLER, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_SEND_FUNC_ARG_SPEC_VAR_HANDLER, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_SWITCH_LONG_SPEC_CONST_CONST_HANDLER, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SWITCH_STRING_SPEC_CONST_CONST_HANDLER, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IN_ARRAY_SPEC_CONST_CONST_HANDLER, ZEND_IN_ARRAY_SPEC_TMP_CONST_HANDLER, ZEND_IN_ARRAY_SPEC_VAR_CONST_HANDLER, ZEND_NULL_HANDLER, ZEND_IN_ARRAY_SPEC_CV_CONST_HANDLER, ZEND_COUNT_SPEC_CONST_UNUSED_HANDLER, ZEND_COUNT_SPEC_TMP_UNUSED_HANDLER, ZEND_COUNT_SPEC_VAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_COUNT_SPEC_CV_UNUSED_HANDLER, ZEND_GET_CLASS_SPEC_CONST_UNUSED_HANDLER, ZEND_GET_CLASS_SPEC_TMP_UNUSED_HANDLER, ZEND_GET_CLASS_SPEC_VAR_UNUSED_HANDLER, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_GET_CLASS_SPEC_CV_UNUSED_HANDLER, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_GET_TYPE_SPEC_CONST_UNUSED_HANDLER, ZEND_GET_TYPE_SPEC_TMP_UNUSED_HANDLER, ZEND_GET_TYPE_SPEC_VAR_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_GET_TYPE_SPEC_CV_UNUSED_HANDLER, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED_HANDLER, ZEND_NULL_HANDLER, ZEND_UNSET_CV_SPEC_CV_UNUSED_HANDLER, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET_HANDLER, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY_HANDLER, ZEND_FETCH_LIST_W_SPEC_VAR_CONST_HANDLER, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_LIST_W_SPEC_VAR_CV_HANDLER, ZEND_JMP_FORWARD_SPEC_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ_HANDLER, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ_HANDLER, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED_HANDLER, ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED_HANDLER, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED_HANDLER, ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED_HANDLER, ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED_HANDLER, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER, ZEND_POST_INC_LONG_SPEC_CV_HANDLER, ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV_HANDLER, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV_HANDLER, ZEND_POST_DEC_LONG_SPEC_CV_HANDLER, ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV_HANDLER, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST_HANDLER, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV_HANDLER, ZEND_QM_ASSIGN_NOREF_SPEC_CONST_HANDLER, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_SIMPLE_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_SIMPLE_SPEC_CV_HANDLER, ZEND_NULL_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR_HANDLER, ZEND_NULL_HANDLER, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV_HANDLER, ZEND_SEND_VAL_SIMPLE_SPEC_CONST_HANDLER, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST_HANDLER, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED_HANDLER, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED_HANDLER, ZEND_NULL_HANDLER }; static const uint32_t specs[] = { 0, 1 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 26 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 51 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 76 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 101 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 126 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 151 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 176 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 201 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 226 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 251 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 276 | SPEC_RULE_OP1, 281 | SPEC_RULE_OP1, 286 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 311 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 336 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 361 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 386 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE, 411 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 436 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 461 | SPEC_RULE_OP1, 466 | SPEC_RULE_OP1, 471 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 546 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 621 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 696 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 771 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 846 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 921 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 996 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 1071 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 1146 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 1221 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 1296 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL, 1306 | SPEC_RULE_OP1 | SPEC_RULE_RETVAL, 1316 | SPEC_RULE_OP1, 1321 | SPEC_RULE_OP1, 1326 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_RETVAL, 1376 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1401 | SPEC_RULE_OP1, 1406, 1407, 1408 | SPEC_RULE_OP1, 1413 | SPEC_RULE_OP1, 1418 | SPEC_RULE_OP1, 1423 | SPEC_RULE_OP1, 1428 | SPEC_RULE_OP1, 1433 | SPEC_RULE_OP2, 1438, 1439 | SPEC_RULE_QUICK_ARG, 1441 | SPEC_RULE_OP1, 1446 | SPEC_RULE_OP1, 1451 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1476 | SPEC_RULE_OP2, 1481 | SPEC_RULE_OP2, 1486 | SPEC_RULE_OP2, 1491, 1492, 1493, 1494 | SPEC_RULE_RETVAL, 1496, 1497 | SPEC_RULE_OP1, 1502, 1503, 1504 | SPEC_RULE_OP1, 1509 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG, 1519 | SPEC_RULE_OP1, 1524 | SPEC_RULE_OP1, 1529, 1530, 1531 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1556 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1581 | SPEC_RULE_OP1, 1586 | SPEC_RULE_OP1, 1591 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1616 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1641 | SPEC_RULE_OP1, 1646, 1647 | SPEC_RULE_OP1, 1652 | SPEC_RULE_OP1, 1657 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1682 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1707 | SPEC_RULE_OP1, 1712 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1737 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1762 | SPEC_RULE_OP1, 1767 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1792 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1817 | SPEC_RULE_OP1, 1822 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1847 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1872 | SPEC_RULE_OP1, 1877 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1902 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1927 | SPEC_RULE_OP1, 1932 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1957 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 1982 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2007, 2008 | SPEC_RULE_QUICK_ARG, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017 | SPEC_RULE_OP1, 2022 | SPEC_RULE_OP2, 2027 | SPEC_RULE_OP1, 2032 | SPEC_RULE_OP1, 2037 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2062 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2087 | SPEC_RULE_OP1, 2092 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2117 | SPEC_RULE_OP1 | SPEC_RULE_QUICK_ARG, 2127 | SPEC_RULE_OP1, 2132 | SPEC_RULE_OP2, 2137, 2138 | SPEC_RULE_OP1, 2143 | SPEC_RULE_OP1, 2148, 2149 | SPEC_RULE_OP1, 2154 | SPEC_RULE_OP1, 2159 | SPEC_RULE_OP1, 2164, 2165, 2166 | SPEC_RULE_OP2, 2171 | SPEC_RULE_RETVAL, 2173 | SPEC_RULE_RETVAL, 2175 | SPEC_RULE_RETVAL, 2177 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2202 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2227 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2252 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2277 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA, 2402, 2403 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2428, 2429, 2430, 2431 | SPEC_RULE_OP1, 2436, 2437, 2438, 2439, 2440 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_OP_DATA, 2565 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2590, 2591, 2592, 2593 | SPEC_RULE_OP1, 2598, 2599, 2600, 2601, 2602, 2603, 2604, 2605 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2630 | SPEC_RULE_OP1, 2635, 2636, 2637, 2638, 2639 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2664 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_DIM_OBJ, 2739, 2740 | SPEC_RULE_OP1, 2745 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2770, 2771, 2772 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2797 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2822 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2847 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2872 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2897 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2922 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2947 | SPEC_RULE_OP1 | SPEC_RULE_OP2, 2972 | SPEC_RULE_OP1, 2977, 2978, 2979, 2980, 2981, 2982 | SPEC_RULE_OP1, 2987 | SPEC_RULE_OP1, 2992 | SPEC_RULE_OP1, 2997 | SPEC_RULE_OP1, 3002 | SPEC_RULE_OP1, 3007, 3008 | SPEC_RULE_OP1, 3013, 3014 | SPEC_RULE_OP1, 3019, 3020 | SPEC_RULE_ISSET, 3022 | SPEC_RULE_OP2, 3920 }; #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) zend_opcode_handler_funcs = labels; zend_spec_handlers = specs; execute_ex(NULL); #else zend_opcode_handlers = labels; zend_handlers_count = sizeof(labels) / sizeof(void*); zend_spec_handlers = specs; #endif VM_TRACE_START(); } void zend_vm_dtor(void) { VM_TRACE_END(); } static HashTable *zend_handlers_table = NULL; static void init_opcode_serialiser(void) { int i; zval tmp; zend_handlers_table = malloc(sizeof(HashTable)); zend_hash_init_ex(zend_handlers_table, zend_handlers_count, NULL, NULL, 1, 0); zend_hash_real_init(zend_handlers_table, 0); Z_TYPE_INFO(tmp) = IS_LONG; for (i = 0; i < zend_handlers_count; i++) { Z_LVAL(tmp) = i; zend_hash_index_add(zend_handlers_table, (zend_long)(zend_uintptr_t)zend_opcode_handlers[i], &tmp); } } ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op) { zval *zv; if (!zend_handlers_table) { init_opcode_serialiser(); } zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler); ZEND_ASSERT(zv != NULL); op->handler = (const void *)(zend_uintptr_t)Z_LVAL_P(zv); } ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op) { op->handler = zend_opcode_handlers[(zend_uintptr_t)op->handler]; } ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op) { #if ZEND_VM_KIND == ZEND_VM_KIND_CALL return op->handler; #elif ZEND_VM_KIND == ZEND_VM_KIND_HYBRID zval *zv; if (!zend_handlers_table) { init_opcode_serialiser(); } zv = zend_hash_index_find(zend_handlers_table, (zend_long)(zend_uintptr_t)op->handler); ZEND_ASSERT(zv != NULL); return zend_opcode_handler_funcs[Z_LVAL_P(zv)]; #else return NULL; #endif } ZEND_API const zend_op *zend_get_halt_op(void) { #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID return &hybrid_halt_op; #else return NULL; #endif } ZEND_API int zend_vm_kind(void) { return ZEND_VM_KIND; } static const void* ZEND_FASTCALL zend_vm_get_opcode_handler_ex(uint32_t spec, const zend_op* op) { static const int zend_vm_decode[] = { _UNUSED_CODE, /* 0 = IS_UNUSED */ _CONST_CODE, /* 1 = IS_CONST */ _TMP_CODE, /* 2 = IS_TMP_VAR */ _UNUSED_CODE, /* 3 */ _VAR_CODE, /* 4 = IS_VAR */ _UNUSED_CODE, /* 5 */ _UNUSED_CODE, /* 6 */ _UNUSED_CODE, /* 7 */ _CV_CODE /* 8 = IS_CV */ }; uint32_t offset = 0; if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type]; if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type]; if (spec & SPEC_EXTRA_MASK) { if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type]; else if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED); else if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM); else if (spec & SPEC_RULE_SMART_BRANCH) { offset = offset * 3; if ((op+1)->opcode == ZEND_JMPZ) { offset += 1; } else if ((op+1)->opcode == ZEND_JMPNZ) { offset += 2; } } else if (spec & SPEC_RULE_DIM_OBJ) { offset = offset * 3; if (op->extended_value == ZEND_ASSIGN_DIM) { offset += 1; } else if (op->extended_value == ZEND_ASSIGN_OBJ) { offset += 2; } } else if (spec & SPEC_RULE_ISSET) offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY); } return zend_opcode_handlers[(spec & SPEC_START_MASK) + offset]; } #if (ZEND_VM_KIND != ZEND_VM_KIND_HYBRID) || !ZEND_VM_SPEC static const void *zend_vm_get_opcode_handler(zend_uchar opcode, const zend_op* op) { return zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op); } #endif #if ZEND_VM_KIND == ZEND_VM_KIND_HYBRID static const void *zend_vm_get_opcode_handler_func(zend_uchar opcode, const zend_op* op) { uint32_t spec = zend_spec_handlers[opcode]; static const int zend_vm_decode[] = { _UNUSED_CODE, /* 0 = IS_UNUSED */ _CONST_CODE, /* 1 = IS_CONST */ _TMP_CODE, /* 2 = IS_TMP_VAR */ _UNUSED_CODE, /* 3 */ _VAR_CODE, /* 4 = IS_VAR */ _UNUSED_CODE, /* 5 */ _UNUSED_CODE, /* 6 */ _UNUSED_CODE, /* 7 */ _CV_CODE /* 8 = IS_CV */ }; uint32_t offset = 0; if (spec & SPEC_RULE_OP1) offset = offset * 5 + zend_vm_decode[op->op1_type]; if (spec & SPEC_RULE_OP2) offset = offset * 5 + zend_vm_decode[op->op2_type]; if (spec & SPEC_EXTRA_MASK) { if (spec & SPEC_RULE_OP_DATA) offset = offset * 5 + zend_vm_decode[(op + 1)->op1_type]; else if (spec & SPEC_RULE_RETVAL) offset = offset * 2 + (op->result_type != IS_UNUSED); else if (spec & SPEC_RULE_QUICK_ARG) offset = offset * 2 + (op->op2.num <= MAX_ARG_FLAG_NUM); else if (spec & SPEC_RULE_SMART_BRANCH) { offset = offset * 3; if ((op+1)->opcode == ZEND_JMPZ) { offset += 1; } else if ((op+1)->opcode == ZEND_JMPNZ) { offset += 2; } } else if (spec & SPEC_RULE_DIM_OBJ) { offset = offset * 3; if (op->extended_value == ZEND_ASSIGN_DIM) { offset += 1; } else if (op->extended_value == ZEND_ASSIGN_OBJ) { offset += 2; } } else if (spec & SPEC_RULE_ISSET) offset = offset * 2 + (op->extended_value & ZEND_ISEMPTY); } return zend_opcode_handler_funcs[(spec & SPEC_START_MASK) + offset]; } #endif ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* op) { zend_uchar opcode = zend_user_opcodes[op->opcode]; if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) { if (op->op1_type < op->op2_type) { zend_swap_operands(op); } } op->handler = zend_vm_get_opcode_handler_ex(zend_spec_handlers[opcode], op); } ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* op, uint32_t op1_info, uint32_t op2_info, uint32_t res_info) { zend_uchar opcode = zend_user_opcodes[op->opcode]; uint32_t spec = zend_spec_handlers[opcode]; switch (opcode) { case ZEND_ADD: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3028 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; if (op->op1_type < op->op2_type) { zend_swap_operands(op); } } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3053 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; if (op->op1_type < op->op2_type) { zend_swap_operands(op); } } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3078 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; if (op->op1_type < op->op2_type) { zend_swap_operands(op); } } break; case ZEND_SUB: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3103 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3128 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3153 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } break; case ZEND_MUL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3178 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3203 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3228 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_EQUAL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3253 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3328 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_NOT_EQUAL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3403 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3478 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH | SPEC_RULE_COMMUTATIVE; } break; case ZEND_IS_SMALLER: if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3553 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3628 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } break; case ZEND_IS_SMALLER_OR_EQUAL: if (op1_info == MAY_BE_LONG && op2_info == MAY_BE_LONG) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3703 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } else if (op1_info == MAY_BE_DOUBLE && op2_info == MAY_BE_DOUBLE) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3778 | SPEC_RULE_OP1 | SPEC_RULE_OP2 | SPEC_RULE_SMART_BRANCH; } break; case ZEND_QM_ASSIGN: if (op1_info == MAY_BE_DOUBLE) { spec = 3871 | SPEC_RULE_OP1; } else if ((op->op1_type == IS_CONST) ? !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1)) : (!(op1_info & ((MAY_BE_ANY|MAY_BE_UNDEF)-(MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE))))) { spec = 3876 | SPEC_RULE_OP1; } break; case ZEND_PRE_INC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { spec = 3853 | SPEC_RULE_RETVAL; } else if (op1_info == MAY_BE_LONG) { spec = 3855 | SPEC_RULE_RETVAL; } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) { spec = 3857 | SPEC_RULE_RETVAL; } break; case ZEND_PRE_DEC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { spec = 3859 | SPEC_RULE_RETVAL; } else if (op1_info == MAY_BE_LONG) { spec = 3861 | SPEC_RULE_RETVAL; } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) { spec = 3863 | SPEC_RULE_RETVAL; } break; case ZEND_POST_INC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { spec = 3865; } else if (op1_info == MAY_BE_LONG) { spec = 3866; } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) { spec = 3867; } break; case ZEND_POST_DEC: if (res_info == MAY_BE_LONG && op1_info == MAY_BE_LONG) { spec = 3868; } else if (op1_info == MAY_BE_LONG) { spec = 3869; } else if (op1_info == (MAY_BE_LONG|MAY_BE_DOUBLE)) { spec = 3870; } break; case ZEND_JMP: if (OP_JMP_ADDR(op, op->op1) > op) { spec = 3027; } break; case ZEND_SEND_VAL: if (op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) { spec = 3916; } break; case ZEND_SEND_VAR_EX: if (op->op2.num <= MAX_ARG_FLAG_NUM && (op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) { spec = 3911 | SPEC_RULE_OP1; } break; case ZEND_FE_FETCH_R: if (op->op2_type == IS_CV && (op1_info & (MAY_BE_UNDEF|MAY_BE_ANY|MAY_BE_REF)) == MAY_BE_ARRAY) { spec = 3918 | SPEC_RULE_RETVAL; } break; case ZEND_FETCH_DIM_R: if (!(op2_info & (MAY_BE_UNDEF|MAY_BE_NULL|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE|MAY_BE_REF))) { if (op->op1_type == IS_CONST && op->op2_type == IS_CONST) { break; } spec = 3881 | SPEC_RULE_OP1 | SPEC_RULE_OP2; } break; case ZEND_SEND_VAL_EX: if (op->op2.num <= MAX_ARG_FLAG_NUM && op->op1_type == IS_CONST && !Z_REFCOUNTED_P(RT_CONSTANT(op, op->op1))) { spec = 3917; } break; case ZEND_SEND_VAR: if ((op1_info & (MAY_BE_UNDEF|MAY_BE_REF)) == 0) { spec = 3906 | SPEC_RULE_OP1; } break; case ZEND_BW_OR: case ZEND_BW_AND: case ZEND_BW_XOR: case ZEND_BOOL_XOR: case ZEND_IS_IDENTICAL: case ZEND_IS_NOT_IDENTICAL: if (op->op1_type < op->op2_type) { zend_swap_operands(op); } break; case ZEND_USER_OPCODE: if (zend_spec_handlers[op->opcode] & SPEC_RULE_COMMUTATIVE) { if (op->op1_type < op->op2_type) { zend_swap_operands(op); } } break; default: break; } op->handler = zend_vm_get_opcode_handler_ex(spec, op); } ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data* ex) { #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) opcode_handler_t handler; #endif int ret; #ifdef ZEND_VM_IP_GLOBAL_REG const zend_op *orig_opline = opline; #endif #ifdef ZEND_VM_FP_GLOBAL_REG zend_execute_data *orig_execute_data = execute_data; execute_data = ex; #else zend_execute_data *execute_data = ex; #endif LOAD_OPLINE(); #if defined(ZEND_VM_FP_GLOBAL_REG) && defined(ZEND_VM_IP_GLOBAL_REG) #if (ZEND_VM_KIND == ZEND_VM_KIND_HYBRID) handler = (opcode_handler_t)zend_vm_get_opcode_handler_func(zend_user_opcodes[opline->opcode], opline); handler(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); if (EXPECTED(opline != &hybrid_halt_op)) { #else ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); if (EXPECTED(opline)) { #endif ret = execute_data != ex ? (int)(execute_data->prev_execute_data != ex) + 1 : 0; SAVE_OPLINE(); } else { ret = -1; } #else ret = ((opcode_handler_t)OPLINE->handler)(ZEND_OPCODE_HANDLER_ARGS_PASSTHRU); SAVE_OPLINE(); #endif #ifdef ZEND_VM_FP_GLOBAL_REG execute_data = orig_execute_data; #endif #ifdef ZEND_VM_IP_GLOBAL_REG opline = orig_opline; #endif return ret; } PK!xuhhZend/zend_ptr_stack.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_PTR_STACK_H #define ZEND_PTR_STACK_H typedef struct _zend_ptr_stack { int top, max; void **elements; void **top_element; zend_bool persistent; } zend_ptr_stack; #define PTR_STACK_BLOCK_SIZE 64 BEGIN_EXTERN_C() ZEND_API void zend_ptr_stack_init(zend_ptr_stack *stack); ZEND_API void zend_ptr_stack_init_ex(zend_ptr_stack *stack, zend_bool persistent); ZEND_API void zend_ptr_stack_n_push(zend_ptr_stack *stack, int count, ...); ZEND_API void zend_ptr_stack_n_pop(zend_ptr_stack *stack, int count, ...); ZEND_API void zend_ptr_stack_destroy(zend_ptr_stack *stack); ZEND_API void zend_ptr_stack_apply(zend_ptr_stack *stack, void (*func)(void *)); ZEND_API void zend_ptr_stack_reverse_apply(zend_ptr_stack *stack, void (*func)(void *)); ZEND_API void zend_ptr_stack_clean(zend_ptr_stack *stack, void (*func)(void *), zend_bool free_elements); ZEND_API int zend_ptr_stack_num_elements(zend_ptr_stack *stack); END_EXTERN_C() #define ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, count) \ if (stack->top+count > stack->max) { \ /* we need to allocate more memory */ \ do { \ stack->max += PTR_STACK_BLOCK_SIZE; \ } while (stack->top+count > stack->max); \ stack->elements = (void **) perealloc(stack->elements, (sizeof(void *) * (stack->max)), stack->persistent); \ stack->top_element = stack->elements+stack->top; \ } /* Not doing this with a macro because of the loop unrolling in the element assignment. Just using a macro for 3 in the body for readability sake. */ static zend_always_inline void zend_ptr_stack_3_push(zend_ptr_stack *stack, void *a, void *b, void *c) { #define ZEND_PTR_STACK_NUM_ARGS 3 ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, ZEND_PTR_STACK_NUM_ARGS) stack->top += ZEND_PTR_STACK_NUM_ARGS; *(stack->top_element++) = a; *(stack->top_element++) = b; *(stack->top_element++) = c; #undef ZEND_PTR_STACK_NUM_ARGS } static zend_always_inline void zend_ptr_stack_2_push(zend_ptr_stack *stack, void *a, void *b) { #define ZEND_PTR_STACK_NUM_ARGS 2 ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, ZEND_PTR_STACK_NUM_ARGS) stack->top += ZEND_PTR_STACK_NUM_ARGS; *(stack->top_element++) = a; *(stack->top_element++) = b; #undef ZEND_PTR_STACK_NUM_ARGS } static zend_always_inline void zend_ptr_stack_3_pop(zend_ptr_stack *stack, void **a, void **b, void **c) { *a = *(--stack->top_element); *b = *(--stack->top_element); *c = *(--stack->top_element); stack->top -= 3; } static zend_always_inline void zend_ptr_stack_2_pop(zend_ptr_stack *stack, void **a, void **b) { *a = *(--stack->top_element); *b = *(--stack->top_element); stack->top -= 2; } static zend_always_inline void zend_ptr_stack_push(zend_ptr_stack *stack, void *ptr) { ZEND_PTR_STACK_RESIZE_IF_NEEDED(stack, 1) stack->top++; *(stack->top_element++) = ptr; } static zend_always_inline void *zend_ptr_stack_pop(zend_ptr_stack *stack) { stack->top--; return *(--stack->top_element); } static zend_always_inline void *zend_ptr_stack_top(zend_ptr_stack *stack) { return stack->elements[stack->top - 1]; } #endif /* ZEND_PTR_STACK_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!G]Zend/zend_smart_string.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | | Xinchen Hui | +----------------------------------------------------------------------+ */ #ifndef PHP_SMART_STRING_H #define PHP_SMART_STRING_H #include "zend_smart_string_public.h" #include #include /* wrapper */ #define smart_string_appends_ex(str, src, what) \ smart_string_appendl_ex((str), (src), strlen(src), (what)) #define smart_string_appends(str, src) \ smart_string_appendl((str), (src), strlen(src)) #define smart_string_append_ex(str, src, what) \ smart_string_appendl_ex((str), ((smart_string *)(src))->c, \ ((smart_string *)(src))->len, (what)); #define smart_string_sets(str, src) \ smart_string_setl((str), (src), strlen(src)); #define smart_string_appendc(str, c) \ smart_string_appendc_ex((str), (c), 0) #define smart_string_free(s) \ smart_string_free_ex((s), 0) #define smart_string_appendl(str, src, len) \ smart_string_appendl_ex((str), (src), (len), 0) #define smart_string_append(str, src) \ smart_string_append_ex((str), (src), 0) #define smart_string_append_long(str, val) \ smart_string_append_long_ex((str), (val), 0) #define smart_string_append_unsigned(str, val) \ smart_string_append_unsigned_ex((str), (val), 0) ZEND_API void ZEND_FASTCALL _smart_string_alloc_persistent(smart_string *str, size_t len); ZEND_API void ZEND_FASTCALL _smart_string_alloc(smart_string *str, size_t len); static zend_always_inline size_t smart_string_alloc(smart_string *str, size_t len, zend_bool persistent) { if (UNEXPECTED(!str->c) || UNEXPECTED(len >= str->a - str->len)) { if (persistent) { _smart_string_alloc_persistent(str, len); } else { _smart_string_alloc(str, len); } } return str->len + len; } static zend_always_inline void smart_string_free_ex(smart_string *str, zend_bool persistent) { if (str->c) { pefree(str->c, persistent); str->c = NULL; } str->a = str->len = 0; } static zend_always_inline void smart_string_0(smart_string *str) { if (str->c) { str->c[str->len] = '\0'; } } static zend_always_inline void smart_string_appendc_ex(smart_string *dest, char ch, zend_bool persistent) { dest->len = smart_string_alloc(dest, 1, persistent); dest->c[dest->len - 1] = ch; } static zend_always_inline void smart_string_appendl_ex(smart_string *dest, const char *str, size_t len, zend_bool persistent) { size_t new_len = smart_string_alloc(dest, len, persistent); memcpy(dest->c + dest->len, str, len); dest->len = new_len; } static zend_always_inline void smart_string_append_long_ex(smart_string *dest, zend_long num, zend_bool persistent) { char buf[32]; char *result = zend_print_long_to_buf(buf + sizeof(buf) - 1, num); smart_string_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent); } static zend_always_inline void smart_string_append_unsigned_ex(smart_string *dest, zend_ulong num, zend_bool persistent) { char buf[32]; char *result = zend_print_ulong_to_buf(buf + sizeof(buf) - 1, num); smart_string_appendl_ex(dest, result, buf + sizeof(buf) - 1 - result, persistent); } static zend_always_inline void smart_string_setl(smart_string *dest, char *src, size_t len) { dest->len = len; dest->a = len + 1; dest->c = src; } static zend_always_inline void smart_string_reset(smart_string *str) { str->len = 0; } #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!*Zend/zend_strtod.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Derick Rethans | +----------------------------------------------------------------------+ */ /* This is a header file for the strtod implementation by David M. Gay which * can be found in zend_strtod.c */ #ifndef ZEND_STRTOD_H #define ZEND_STRTOD_H #include BEGIN_EXTERN_C() ZEND_API void zend_freedtoa(char *s); ZEND_API char * zend_dtoa(double _d, int mode, int ndigits, int *decpt, int *sign, char **rve); ZEND_API double zend_strtod(const char *s00, const char **se); ZEND_API double zend_hex_strtod(const char *str, const char **endptr); ZEND_API double zend_oct_strtod(const char *str, const char **endptr); ZEND_API double zend_bin_strtod(const char *str, const char **endptr); ZEND_API int zend_startup_strtod(void); ZEND_API int zend_shutdown_strtod(void); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!@<<Zend/zend_execute.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_EXECUTE_H #define ZEND_EXECUTE_H #include "zend_compile.h" #include "zend_hash.h" #include "zend_operators.h" #include "zend_variables.h" BEGIN_EXTERN_C() struct _zend_fcall_info; ZEND_API extern void (*zend_execute_ex)(zend_execute_data *execute_data); ZEND_API extern void (*zend_execute_internal)(zend_execute_data *execute_data, zval *return_value); void init_executor(void); void shutdown_executor(void); void shutdown_destructors(void); ZEND_API void zend_init_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value); ZEND_API void zend_init_func_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value); ZEND_API void zend_init_code_execute_data(zend_execute_data *execute_data, zend_op_array *op_array, zval *return_value); ZEND_API void zend_execute(zend_op_array *op_array, zval *return_value); ZEND_API void execute_ex(zend_execute_data *execute_data); ZEND_API void execute_internal(zend_execute_data *execute_data, zval *return_value); ZEND_API zend_class_entry *zend_lookup_class(zend_string *name); ZEND_API zend_class_entry *zend_lookup_class_ex(zend_string *name, const zval *key, int use_autoload); ZEND_API zend_class_entry *zend_get_called_scope(zend_execute_data *ex); ZEND_API zend_object *zend_get_this_object(zend_execute_data *ex); ZEND_API int zend_eval_string(char *str, zval *retval_ptr, char *string_name); ZEND_API int zend_eval_stringl(char *str, size_t str_len, zval *retval_ptr, char *string_name); ZEND_API int zend_eval_string_ex(char *str, zval *retval_ptr, char *string_name, int handle_exceptions); ZEND_API int zend_eval_stringl_ex(char *str, size_t str_len, zval *retval_ptr, char *string_name, int handle_exceptions); /* export zend_pass_function to allow comparisons against it */ extern ZEND_API const zend_internal_function zend_pass_function; ZEND_API void ZEND_FASTCALL zend_check_internal_arg_type(zend_function *zf, uint32_t arg_num, zval *arg); ZEND_API int ZEND_FASTCALL zend_check_arg_type(zend_function *zf, uint32_t arg_num, zval *arg, zval *default_value, void **cache_slot); ZEND_API ZEND_COLD void ZEND_FASTCALL zend_missing_arg_error(zend_execute_data *execute_data); static zend_always_inline zval* zend_assign_to_variable(zval *variable_ptr, zval *value, zend_uchar value_type) { zend_refcounted *ref = NULL; if (ZEND_CONST_COND(value_type & (IS_VAR|IS_CV), 1) && Z_ISREF_P(value)) { ref = Z_COUNTED_P(value); value = Z_REFVAL_P(value); } do { if (UNEXPECTED(Z_REFCOUNTED_P(variable_ptr))) { zend_refcounted *garbage; if (Z_ISREF_P(variable_ptr)) { variable_ptr = Z_REFVAL_P(variable_ptr); if (EXPECTED(!Z_REFCOUNTED_P(variable_ptr))) { break; } } if (Z_TYPE_P(variable_ptr) == IS_OBJECT && UNEXPECTED(Z_OBJ_HANDLER_P(variable_ptr, set) != NULL)) { Z_OBJ_HANDLER_P(variable_ptr, set)(variable_ptr, value); return variable_ptr; } if (ZEND_CONST_COND(value_type & (IS_VAR|IS_CV), 1) && variable_ptr == value) { if (value_type == IS_VAR && ref) { ZEND_ASSERT(GC_REFCOUNT(ref) > 1); GC_DELREF(ref); } return variable_ptr; } garbage = Z_COUNTED_P(variable_ptr); if (GC_DELREF(garbage) == 0) { ZVAL_COPY_VALUE(variable_ptr, value); if (ZEND_CONST_COND(value_type == IS_CONST, 0)) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(variable_ptr))) { Z_ADDREF_P(variable_ptr); } } else if (value_type & (IS_CONST|IS_CV)) { if (Z_OPT_REFCOUNTED_P(variable_ptr)) { Z_ADDREF_P(variable_ptr); } } else if (ZEND_CONST_COND(value_type == IS_VAR, 1) && UNEXPECTED(ref)) { if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(variable_ptr)) { Z_ADDREF_P(variable_ptr); } } rc_dtor_func(garbage); return variable_ptr; } else { /* we need to split */ /* optimized version of GC_ZVAL_CHECK_POSSIBLE_ROOT(variable_ptr) */ if (UNEXPECTED(GC_MAY_LEAK(garbage))) { gc_possible_root(garbage); } } } } while (0); ZVAL_COPY_VALUE(variable_ptr, value); if (ZEND_CONST_COND(value_type == IS_CONST, 0)) { if (UNEXPECTED(Z_OPT_REFCOUNTED_P(variable_ptr))) { Z_ADDREF_P(variable_ptr); } } else if (value_type & (IS_CONST|IS_CV)) { if (Z_OPT_REFCOUNTED_P(variable_ptr)) { Z_ADDREF_P(variable_ptr); } } else if (ZEND_CONST_COND(value_type == IS_VAR, 1) && UNEXPECTED(ref)) { if (UNEXPECTED(GC_DELREF(ref) == 0)) { efree_size(ref, sizeof(zend_reference)); } else if (Z_OPT_REFCOUNTED_P(variable_ptr)) { Z_ADDREF_P(variable_ptr); } } return variable_ptr; } ZEND_API int zval_update_constant(zval *pp); ZEND_API int zval_update_constant_ex(zval *pp, zend_class_entry *scope); ZEND_API int zend_use_undefined_constant(zend_string *name, zend_ast_attr attr, zval *result); /* dedicated Zend executor functions - do not use! */ struct _zend_vm_stack { zval *top; zval *end; zend_vm_stack prev; }; #define ZEND_VM_STACK_HEADER_SLOTS \ ((ZEND_MM_ALIGNED_SIZE(sizeof(struct _zend_vm_stack)) + ZEND_MM_ALIGNED_SIZE(sizeof(zval)) - 1) / ZEND_MM_ALIGNED_SIZE(sizeof(zval))) #define ZEND_VM_STACK_ELEMENTS(stack) \ (((zval*)(stack)) + ZEND_VM_STACK_HEADER_SLOTS) /* * In general in RELEASE build ZEND_ASSERT() must be zero-cost, but for some * reason, GCC generated worse code, performing CSE on assertion code and the * following "slow path" and moving memory read operatins from slow path into * common header. This made a degradation for the fast path. * The following "#if ZEND_DEBUG" eliminates it. */ #if ZEND_DEBUG # define ZEND_ASSERT_VM_STACK(stack) ZEND_ASSERT(stack->top > (zval *) stack && stack->end > (zval *) stack && stack->top <= stack->end) # define ZEND_ASSERT_VM_STACK_GLOBAL ZEND_ASSERT(EG(vm_stack_top) > (zval *) EG(vm_stack) && EG(vm_stack_end) > (zval *) EG(vm_stack) && EG(vm_stack_top) <= EG(vm_stack_end)) #else # define ZEND_ASSERT_VM_STACK(stack) # define ZEND_ASSERT_VM_STACK_GLOBAL #endif ZEND_API void zend_vm_stack_init(void); ZEND_API void zend_vm_stack_init_ex(size_t page_size); ZEND_API void zend_vm_stack_destroy(void); ZEND_API void* zend_vm_stack_extend(size_t size); static zend_always_inline void zend_vm_init_call_frame(zend_execute_data *call, uint32_t call_info, zend_function *func, uint32_t num_args, zend_class_entry *called_scope, zend_object *object) { call->func = func; if (object) { Z_OBJ(call->This) = object; ZEND_SET_CALL_INFO(call, 1, call_info); } else { Z_CE(call->This) = called_scope; ZEND_SET_CALL_INFO(call, 0, call_info); } ZEND_CALL_NUM_ARGS(call) = num_args; } static zend_always_inline zend_execute_data *zend_vm_stack_push_call_frame_ex(uint32_t used_stack, uint32_t call_info, zend_function *func, uint32_t num_args, zend_class_entry *called_scope, zend_object *object) { zend_execute_data *call = (zend_execute_data*)EG(vm_stack_top); ZEND_ASSERT_VM_STACK_GLOBAL; if (UNEXPECTED(used_stack > (size_t)(((char*)EG(vm_stack_end)) - (char*)call))) { call = (zend_execute_data*)zend_vm_stack_extend(used_stack); ZEND_ASSERT_VM_STACK_GLOBAL; zend_vm_init_call_frame(call, call_info | ZEND_CALL_ALLOCATED, func, num_args, called_scope, object); return call; } else { EG(vm_stack_top) = (zval*)((char*)call + used_stack); zend_vm_init_call_frame(call, call_info, func, num_args, called_scope, object); return call; } } static zend_always_inline uint32_t zend_vm_calc_used_stack(uint32_t num_args, zend_function *func) { uint32_t used_stack = ZEND_CALL_FRAME_SLOT + num_args; if (EXPECTED(ZEND_USER_CODE(func->type))) { used_stack += func->op_array.last_var + func->op_array.T - MIN(func->op_array.num_args, num_args); } return used_stack * sizeof(zval); } static zend_always_inline zend_execute_data *zend_vm_stack_push_call_frame(uint32_t call_info, zend_function *func, uint32_t num_args, zend_class_entry *called_scope, zend_object *object) { uint32_t used_stack = zend_vm_calc_used_stack(num_args, func); return zend_vm_stack_push_call_frame_ex(used_stack, call_info, func, num_args, called_scope, object); } static zend_always_inline void zend_vm_stack_free_extra_args_ex(uint32_t call_info, zend_execute_data *call) { if (UNEXPECTED(call_info & ZEND_CALL_FREE_EXTRA_ARGS)) { uint32_t count = ZEND_CALL_NUM_ARGS(call) - call->func->op_array.num_args; zval *p = ZEND_CALL_VAR_NUM(call, call->func->op_array.last_var + call->func->op_array.T); do { if (Z_REFCOUNTED_P(p)) { zend_refcounted *r = Z_COUNTED_P(p); if (!GC_DELREF(r)) { ZVAL_NULL(p); rc_dtor_func(r); } else { gc_check_possible_root(r); } } p++; } while (--count); } } static zend_always_inline void zend_vm_stack_free_extra_args(zend_execute_data *call) { zend_vm_stack_free_extra_args_ex(ZEND_CALL_INFO(call), call); } static zend_always_inline void zend_vm_stack_free_args(zend_execute_data *call) { uint32_t num_args = ZEND_CALL_NUM_ARGS(call); if (EXPECTED(num_args > 0)) { zval *p = ZEND_CALL_ARG(call, 1); do { if (Z_REFCOUNTED_P(p)) { zend_refcounted *r = Z_COUNTED_P(p); if (!GC_DELREF(r)) { ZVAL_NULL(p); rc_dtor_func(r); } } p++; } while (--num_args); } } static zend_always_inline void zend_vm_stack_free_call_frame_ex(uint32_t call_info, zend_execute_data *call) { ZEND_ASSERT_VM_STACK_GLOBAL; if (UNEXPECTED(call_info & ZEND_CALL_ALLOCATED)) { zend_vm_stack p = EG(vm_stack); zend_vm_stack prev = p->prev; ZEND_ASSERT(call == (zend_execute_data*)ZEND_VM_STACK_ELEMENTS(EG(vm_stack))); EG(vm_stack_top) = prev->top; EG(vm_stack_end) = prev->end; EG(vm_stack) = prev; efree(p); } else { EG(vm_stack_top) = (zval*)call; } ZEND_ASSERT_VM_STACK_GLOBAL; } static zend_always_inline void zend_vm_stack_free_call_frame(zend_execute_data *call) { zend_vm_stack_free_call_frame_ex(ZEND_CALL_INFO(call), call); } /* services */ ZEND_API const char *get_active_class_name(const char **space); ZEND_API const char *get_active_function_name(void); ZEND_API const char *zend_get_executed_filename(void); ZEND_API zend_string *zend_get_executed_filename_ex(void); ZEND_API uint32_t zend_get_executed_lineno(void); ZEND_API zend_class_entry *zend_get_executed_scope(void); ZEND_API zend_bool zend_is_executing(void); ZEND_API void zend_set_timeout(zend_long seconds, int reset_signals); ZEND_API void zend_unset_timeout(void); ZEND_API ZEND_NORETURN void zend_timeout(int dummy); ZEND_API zend_class_entry *zend_fetch_class(zend_string *class_name, int fetch_type); ZEND_API zend_class_entry *zend_fetch_class_by_name(zend_string *class_name, const zval *key, int fetch_type); void zend_verify_abstract_class(zend_class_entry *ce); ZEND_API zend_function * ZEND_FASTCALL zend_fetch_function(zend_string *name); ZEND_API zend_function * ZEND_FASTCALL zend_fetch_function_str(const char *name, size_t len); ZEND_API void zend_fetch_dimension_const(zval *result, zval *container, zval *dim, int type); ZEND_API zval* zend_get_compiled_variable_value(const zend_execute_data *execute_data_ptr, uint32_t var); #define ZEND_USER_OPCODE_CONTINUE 0 /* execute next opcode */ #define ZEND_USER_OPCODE_RETURN 1 /* exit from executor (return from function) */ #define ZEND_USER_OPCODE_DISPATCH 2 /* call original opcode handler */ #define ZEND_USER_OPCODE_ENTER 3 /* enter into new op_array without recursion */ #define ZEND_USER_OPCODE_LEAVE 4 /* return to calling op_array within the same executor */ #define ZEND_USER_OPCODE_DISPATCH_TO 0x100 /* call original handler of returned opcode */ ZEND_API int zend_set_user_opcode_handler(zend_uchar opcode, user_opcode_handler_t handler); ZEND_API user_opcode_handler_t zend_get_user_opcode_handler(zend_uchar opcode); /* former zend_execute_locks.h */ typedef zval* zend_free_op; ZEND_API zval *zend_get_zval_ptr(const zend_op *opline, int op_type, const znode_op *node, const zend_execute_data *execute_data, zend_free_op *should_free, int type); ZEND_API void zend_clean_and_cache_symbol_table(zend_array *symbol_table); ZEND_API void zend_free_compiled_variables(zend_execute_data *execute_data); ZEND_API void zend_cleanup_unfinished_execution(zend_execute_data *execute_data, uint32_t op_num, uint32_t catch_op_num); ZEND_API int ZEND_FASTCALL zend_do_fcall_overloaded(zend_execute_data *call, zval *ret); #define CACHE_ADDR(num) \ ((void**)((char*)EX_RUN_TIME_CACHE() + (num))) #define CACHED_PTR(num) \ ((void**)((char*)EX_RUN_TIME_CACHE() + (num)))[0] #define CACHE_PTR(num, ptr) do { \ ((void**)((char*)EX_RUN_TIME_CACHE() + (num)))[0] = (ptr); \ } while (0) #define CACHED_POLYMORPHIC_PTR(num, ce) \ (EXPECTED(((void**)((char*)EX_RUN_TIME_CACHE() + (num)))[0] == (void*)(ce)) ? \ ((void**)((char*)EX_RUN_TIME_CACHE() + (num)))[1] : \ NULL) #define CACHE_POLYMORPHIC_PTR(num, ce, ptr) do { \ void **slot = (void**)((char*)EX_RUN_TIME_CACHE() + (num)); \ slot[0] = (ce); \ slot[1] = (ptr); \ } while (0) #define CACHED_PTR_EX(slot) \ (slot)[0] #define CACHE_PTR_EX(slot, ptr) do { \ (slot)[0] = (ptr); \ } while (0) #define CACHED_POLYMORPHIC_PTR_EX(slot, ce) \ (EXPECTED((slot)[0] == (ce)) ? (slot)[1] : NULL) #define CACHE_POLYMORPHIC_PTR_EX(slot, ce, ptr) do { \ (slot)[0] = (ce); \ (slot)[1] = (ptr); \ } while (0) #define CACHE_SPECIAL (1<<0) #define IS_SPECIAL_CACHE_VAL(ptr) \ (((uintptr_t)(ptr)) & CACHE_SPECIAL) #define ENCODE_SPECIAL_CACHE_NUM(num) \ ((void*)((((uintptr_t)(num)) << 1) | CACHE_SPECIAL)) #define DECODE_SPECIAL_CACHE_NUM(ptr) \ (((uintptr_t)(ptr)) >> 1) #define ENCODE_SPECIAL_CACHE_PTR(ptr) \ ((void*)(((uintptr_t)(ptr)) | CACHE_SPECIAL)) #define DECODE_SPECIAL_CACHE_PTR(ptr) \ ((void*)(((uintptr_t)(ptr)) & ~CACHE_SPECIAL)) #define SKIP_EXT_OPLINE(opline) do { \ while (UNEXPECTED((opline)->opcode >= ZEND_EXT_STMT \ && (opline)->opcode <= ZEND_TICKS)) { \ (opline)--; \ } \ } while (0) END_EXTERN_C() #endif /* ZEND_EXECUTE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!!Q Zend/zend_list.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_LIST_H #define ZEND_LIST_H #include "zend_hash.h" #include "zend_globals.h" BEGIN_EXTERN_C() typedef void (*rsrc_dtor_func_t)(zend_resource *res); #define ZEND_RSRC_DTOR_FUNC(name) void name(zend_resource *res) typedef struct _zend_rsrc_list_dtors_entry { rsrc_dtor_func_t list_dtor_ex; rsrc_dtor_func_t plist_dtor_ex; const char *type_name; int module_number; int resource_id; } zend_rsrc_list_dtors_entry; ZEND_API int zend_register_list_destructors_ex(rsrc_dtor_func_t ld, rsrc_dtor_func_t pld, const char *type_name, int module_number); void list_entry_destructor(zval *ptr); void plist_entry_destructor(zval *ptr); void zend_clean_module_rsrc_dtors(int module_number); int zend_init_rsrc_list(void); int zend_init_rsrc_plist(void); void zend_close_rsrc_list(HashTable *ht); void zend_destroy_rsrc_list(HashTable *ht); int zend_init_rsrc_list_dtors(void); void zend_destroy_rsrc_list_dtors(void); ZEND_API zval* ZEND_FASTCALL zend_list_insert(void *ptr, int type); ZEND_API int ZEND_FASTCALL zend_list_free(zend_resource *res); ZEND_API int ZEND_FASTCALL zend_list_delete(zend_resource *res); ZEND_API int ZEND_FASTCALL zend_list_close(zend_resource *res); ZEND_API zend_resource *zend_register_resource(void *rsrc_pointer, int rsrc_type); ZEND_API void *zend_fetch_resource(zend_resource *res, const char *resource_type_name, int resource_type); ZEND_API void *zend_fetch_resource2(zend_resource *res, const char *resource_type_name, int resource_type, int resource_type2); ZEND_API void *zend_fetch_resource_ex(zval *res, const char *resource_type_name, int resource_type); ZEND_API void *zend_fetch_resource2_ex(zval *res, const char *resource_type_name, int resource_type, int resource_type2); ZEND_API const char *zend_rsrc_list_get_rsrc_type(zend_resource *res); ZEND_API int zend_fetch_list_dtor_id(const char *type_name); ZEND_API zend_resource* zend_register_persistent_resource(const char *key, size_t key_len, void *rsrc_pointer, int rsrc_type); ZEND_API zend_resource* zend_register_persistent_resource_ex(zend_string *key, void *rsrc_pointer, int rsrc_type); extern ZEND_API int le_index_ptr; /* list entry type for index pointers */ END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!E4%K%KZend/zend_portability.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_PORTABILITY_H #define ZEND_PORTABILITY_H #ifdef __cplusplus #define BEGIN_EXTERN_C() extern "C" { #define END_EXTERN_C() } #else #define BEGIN_EXTERN_C() #define END_EXTERN_C() #endif /* * general definitions */ #ifdef ZEND_WIN32 # include "zend_config.w32.h" # define ZEND_PATHS_SEPARATOR ';' #elif defined(__riscos__) # include # define ZEND_PATHS_SEPARATOR ';' #else # include # define ZEND_PATHS_SEPARATOR ':' #endif #include "../TSRM/TSRM.h" #include #include #include #ifdef HAVE_UNIX_H # include #endif #ifdef HAVE_STDARG_H # include #endif #ifdef HAVE_DLFCN_H # include #endif #ifdef HAVE_LIMITS_H # include #endif #if HAVE_ALLOCA_H && !defined(_ALLOCA_H) # include #endif #if defined(ZEND_WIN32) && !defined(__clang__) #include #endif #include "zend_range_check.h" /* GCC x.y.z supplies __GNUC__ = x and __GNUC_MINOR__ = y */ #ifdef __GNUC__ # define ZEND_GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) #else # define ZEND_GCC_VERSION 0 #endif /* Compatibility with non-clang compilers */ #ifndef __has_attribute # define __has_attribute(x) 0 #endif #ifndef __has_builtin # define __has_builtin(x) 0 #endif #if defined(ZEND_WIN32) && !defined(__clang__) # define ZEND_ASSUME(c) __assume(c) #elif ((defined(__GNUC__) && ZEND_GCC_VERSION >= 4005) || __has_builtin(__builtin_unreachable)) && PHP_HAVE_BUILTIN_EXPECT # define ZEND_ASSUME(c) do { \ if (__builtin_expect(!(c), 0)) __builtin_unreachable(); \ } while (0) #else # define ZEND_ASSUME(c) #endif #if ZEND_DEBUG # define ZEND_ASSERT(c) assert(c) #else # define ZEND_ASSERT(c) ZEND_ASSUME(c) #endif /* Only use this macro if you know for sure that all of the switches values are covered by its case statements */ #if ZEND_DEBUG # define EMPTY_SWITCH_DEFAULT_CASE() default: ZEND_ASSERT(0); break; #else # define EMPTY_SWITCH_DEFAULT_CASE() default: ZEND_ASSUME(0); break; #endif #if defined(__GNUC__) && __GNUC__ >= 4 # define ZEND_IGNORE_VALUE(x) (({ __typeof__ (x) __x = (x); (void) __x; })) #else # define ZEND_IGNORE_VALUE(x) ((void) (x)) #endif #define zend_quiet_write(...) ZEND_IGNORE_VALUE(write(__VA_ARGS__)) /* all HAVE_XXX test have to be after the include of zend_config above */ #if defined(HAVE_LIBDL) && !defined(ZEND_WIN32) # if defined(__has_feature) # if __has_feature(address_sanitizer) # define __SANITIZE_ADDRESS__ # endif # endif # ifndef RTLD_LAZY # define RTLD_LAZY 1 /* Solaris 1, FreeBSD's (2.1.7.1 and older) */ # endif # ifndef RTLD_GLOBAL # define RTLD_GLOBAL 0 # endif # if defined(RTLD_GROUP) && defined(RTLD_WORLD) && defined(RTLD_PARENT) # define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_GROUP | RTLD_WORLD | RTLD_PARENT) # elif defined(RTLD_DEEPBIND) && !defined(__SANITIZE_ADDRESS__) # define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL | RTLD_DEEPBIND) # else # define DL_LOAD(libname) dlopen(libname, RTLD_LAZY | RTLD_GLOBAL) # endif # define DL_UNLOAD dlclose # if defined(DLSYM_NEEDS_UNDERSCORE) # define DL_FETCH_SYMBOL(h,s) dlsym((h), "_" s) # else # define DL_FETCH_SYMBOL dlsym # endif # define DL_ERROR dlerror # define DL_HANDLE void * # define ZEND_EXTENSIONS_SUPPORT 1 #elif defined(ZEND_WIN32) # define DL_LOAD(libname) LoadLibrary(libname) # define DL_FETCH_SYMBOL GetProcAddress # define DL_UNLOAD FreeLibrary # define DL_HANDLE HMODULE # define ZEND_EXTENSIONS_SUPPORT 1 #else # define DL_HANDLE void * # define ZEND_EXTENSIONS_SUPPORT 0 #endif /* AIX requires this to be the first thing in the file. */ #ifndef __GNUC__ # ifndef HAVE_ALLOCA_H # ifdef _AIX # pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca(); # endif # endif # endif #endif #if ZEND_GCC_VERSION >= 2096 || __has_attribute(__malloc__) # define ZEND_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define ZEND_ATTRIBUTE_MALLOC #endif #if ZEND_GCC_VERSION >= 4003 || __has_attribute(alloc_size) # define ZEND_ATTRIBUTE_ALLOC_SIZE(X) __attribute__ ((alloc_size(X))) # define ZEND_ATTRIBUTE_ALLOC_SIZE2(X,Y) __attribute__ ((alloc_size(X,Y))) #else # define ZEND_ATTRIBUTE_ALLOC_SIZE(X) # define ZEND_ATTRIBUTE_ALLOC_SIZE2(X,Y) #endif #if ZEND_GCC_VERSION >= 2007 || __has_attribute(format) # define ZEND_ATTRIBUTE_FORMAT(type, idx, first) __attribute__ ((format(type, idx, first))) #else # define ZEND_ATTRIBUTE_FORMAT(type, idx, first) #endif #if (ZEND_GCC_VERSION >= 3001 && !defined(__INTEL_COMPILER)) || __has_attribute(format) # define ZEND_ATTRIBUTE_PTR_FORMAT(type, idx, first) __attribute__ ((format(type, idx, first))) #else # define ZEND_ATTRIBUTE_PTR_FORMAT(type, idx, first) #endif #if ZEND_GCC_VERSION >= 3001 || __has_attribute(deprecated) # define ZEND_ATTRIBUTE_DEPRECATED __attribute__((deprecated)) #elif defined(ZEND_WIN32) # define ZEND_ATTRIBUTE_DEPRECATED __declspec(deprecated) #else # define ZEND_ATTRIBUTE_DEPRECATED #endif #if defined(__GNUC__) && ZEND_GCC_VERSION >= 4003 # define ZEND_ATTRIBUTE_UNUSED __attribute__((unused)) # define ZEND_COLD __attribute__((cold)) # define ZEND_HOT __attribute__((hot)) # ifdef __OPTIMIZE__ # define ZEND_OPT_SIZE __attribute__((optimize("Os"))) # define ZEND_OPT_SPEED __attribute__((optimize("Ofast"))) # else # define ZEND_OPT_SIZE # define ZEND_OPT_SPEED # endif #else # define ZEND_ATTRIBUTE_UNUSED # define ZEND_COLD # define ZEND_HOT # define ZEND_OPT_SIZE # define ZEND_OPT_SPEED #endif #if defined(__GNUC__) && ZEND_GCC_VERSION >= 5000 # define ZEND_ATTRIBUTE_UNUSED_LABEL __attribute__((cold, unused)); # define ZEND_ATTRIBUTE_COLD_LABEL __attribute__((cold)); # define ZEND_ATTRIBUTE_HOT_LABEL __attribute__((hot)); #else # define ZEND_ATTRIBUTE_UNUSED_LABEL # define ZEND_ATTRIBUTE_COLD_LABEL # define ZEND_ATTRIBUTE_HOT_LABEL #endif #if defined(__GNUC__) && ZEND_GCC_VERSION >= 3004 && defined(__i386__) # define ZEND_FASTCALL __attribute__((fastcall)) #elif defined(_MSC_VER) && defined(_M_IX86) && _MSC_VER == 1700 # define ZEND_FASTCALL __fastcall #elif defined(_MSC_VER) && _MSC_VER >= 1800 && !defined(__clang__) # define ZEND_FASTCALL __vectorcall #else # define ZEND_FASTCALL #endif #ifndef restrict # if defined(__GNUC__) && ZEND_GCC_VERSION >= 3004 # else # define __restrict__ # endif # define restrict __restrict__ #endif #if (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)) || __has_attribute(noreturn) # define HAVE_NORETURN # define ZEND_NORETURN __attribute__((noreturn)) #elif defined(ZEND_WIN32) # define HAVE_NORETURN # define ZEND_NORETURN __declspec(noreturn) #else # define ZEND_NORETURN #endif #if (defined(__GNUC__) && __GNUC__ >= 3 && !defined(__INTEL_COMPILER) && !defined(DARWIN) && !defined(__hpux) && !defined(_AIX) && !defined(__osf__)) # define HAVE_NORETURN_ALIAS # define HAVE_ATTRIBUTE_WEAK #endif #if ZEND_GCC_VERSION >= 3001 || __has_builtin(__builtin_constant_p) # define HAVE_BUILTIN_CONSTANT_P #endif #ifdef HAVE_BUILTIN_CONSTANT_P # define ZEND_CONST_COND(_condition, _default) \ (__builtin_constant_p(_condition) ? (_condition) : (_default)) #else # define ZEND_CONST_COND(_condition, _default) \ (_default) #endif #if ZEND_DEBUG # define zend_always_inline inline # define zend_never_inline #else # if defined(__GNUC__) # if __GNUC__ >= 3 # define zend_always_inline inline __attribute__((always_inline)) # define zend_never_inline __attribute__((noinline)) # else # define zend_always_inline inline # define zend_never_inline # endif # elif defined(_MSC_VER) # define zend_always_inline __forceinline # define zend_never_inline __declspec(noinline) # else # if __has_attribute(always_inline) # define zend_always_inline inline __attribute__((always_inline)) # else # define zend_always_inline inline # endif # if __has_attribute(noinline) # define zend_never_inline __attribute__((noinline)) # else # define zend_never_inline # endif # endif #endif /* ZEND_DEBUG */ #if PHP_HAVE_BUILTIN_EXPECT # define EXPECTED(condition) __builtin_expect(!!(condition), 1) # define UNEXPECTED(condition) __builtin_expect(!!(condition), 0) #else # define EXPECTED(condition) (condition) # define UNEXPECTED(condition) (condition) #endif #ifndef XtOffsetOf # if defined(CRAY) || (defined(__ARMCC_VERSION) && !defined(LINUX)) # ifdef __STDC__ # define XtOffset(p_type, field) _Offsetof(p_type, field) # else # ifdef CRAY2 # define XtOffset(p_type, field) \ (sizeof(int)*((unsigned int)&(((p_type)NULL)->field))) # else /* !CRAY2 */ # define XtOffset(p_type, field) ((unsigned int)&(((p_type)NULL)->field)) # endif /* !CRAY2 */ # endif /* __STDC__ */ # else /* ! (CRAY || __arm) */ # define XtOffset(p_type, field) \ ((zend_long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) # endif /* !CRAY */ # ifdef offsetof # define XtOffsetOf(s_type, field) offsetof(s_type, field) # else # define XtOffsetOf(s_type, field) XtOffset(s_type*, field) # endif #endif #if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) && !(defined(ZTS)) && !(defined(ZTS) && defined(HPUX)) && !defined(DARWIN) # define ZEND_ALLOCA_MAX_SIZE (32 * 1024) # define ALLOCA_FLAG(name) \ zend_bool name; # define SET_ALLOCA_FLAG(name) \ name = 1 # define do_alloca_ex(size, limit, use_heap) \ ((use_heap = (UNEXPECTED((size) > (limit)))) ? emalloc(size) : alloca(size)) # define do_alloca(size, use_heap) \ do_alloca_ex(size, ZEND_ALLOCA_MAX_SIZE, use_heap) # define free_alloca(p, use_heap) \ do { if (UNEXPECTED(use_heap)) efree(p); } while (0) #else # define ALLOCA_FLAG(name) # define SET_ALLOCA_FLAG(name) # define do_alloca(p, use_heap) emalloc(p) # define free_alloca(p, use_heap) efree(p) #endif #ifdef HAVE_SIGSETJMP # define SETJMP(a) sigsetjmp(a, 0) # define LONGJMP(a,b) siglongjmp(a, b) # define JMP_BUF sigjmp_buf #else # define SETJMP(a) setjmp(a) # define LONGJMP(a,b) longjmp(a, b) # define JMP_BUF jmp_buf #endif #if ZEND_DEBUG # define ZEND_FILE_LINE_D const char *__zend_filename, const uint32_t __zend_lineno # define ZEND_FILE_LINE_DC , ZEND_FILE_LINE_D # define ZEND_FILE_LINE_ORIG_D const char *__zend_orig_filename, const uint32_t __zend_orig_lineno # define ZEND_FILE_LINE_ORIG_DC , ZEND_FILE_LINE_ORIG_D # define ZEND_FILE_LINE_RELAY_C __zend_filename, __zend_lineno # define ZEND_FILE_LINE_RELAY_CC , ZEND_FILE_LINE_RELAY_C # define ZEND_FILE_LINE_C __FILE__, __LINE__ # define ZEND_FILE_LINE_CC , ZEND_FILE_LINE_C # define ZEND_FILE_LINE_EMPTY_C NULL, 0 # define ZEND_FILE_LINE_EMPTY_CC , ZEND_FILE_LINE_EMPTY_C # define ZEND_FILE_LINE_ORIG_RELAY_C __zend_orig_filename, __zend_orig_lineno # define ZEND_FILE_LINE_ORIG_RELAY_CC , ZEND_FILE_LINE_ORIG_RELAY_C #else # define ZEND_FILE_LINE_D void # define ZEND_FILE_LINE_DC # define ZEND_FILE_LINE_ORIG_D void # define ZEND_FILE_LINE_ORIG_DC # define ZEND_FILE_LINE_RELAY_C # define ZEND_FILE_LINE_RELAY_CC # define ZEND_FILE_LINE_C # define ZEND_FILE_LINE_CC # define ZEND_FILE_LINE_EMPTY_C # define ZEND_FILE_LINE_EMPTY_CC # define ZEND_FILE_LINE_ORIG_RELAY_C # define ZEND_FILE_LINE_ORIG_RELAY_CC #endif /* ZEND_DEBUG */ #if ZEND_DEBUG # define Z_DBG(expr) (expr) #else # define Z_DBG(expr) #endif #ifdef ZTS # define ZTS_V 1 #else # define ZTS_V 0 #endif #ifndef LONG_MAX # define LONG_MAX 2147483647L #endif #ifndef LONG_MIN # define LONG_MIN (- LONG_MAX - 1) #endif #define MAX_LENGTH_OF_DOUBLE 32 #undef MIN #undef MAX #define MAX(a, b) (((a)>(b))?(a):(b)) #define MIN(a, b) (((a)<(b))?(a):(b)) #define ZEND_BIT_TEST(bits, bit) \ (((bits)[(bit) / (sizeof((bits)[0])*8)] >> ((bit) & (sizeof((bits)[0])*8-1))) & 1) /* We always define a function, even if there's a macro or expression we could * alias, so that using it in contexts where we can't make function calls * won't fail to compile on some machines and not others. */ static zend_always_inline double _zend_get_inf(void) /* {{{ */ { #ifdef INFINITY return INFINITY; #elif HAVE_HUGE_VAL_INF return HUGE_VAL; #elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) # define _zend_DOUBLE_INFINITY_HIGH 0x7ff00000 double val = 0.0; ((uint32_t*)&val)[1] = _zend_DOUBLE_INFINITY_HIGH; ((uint32_t*)&val)[0] = 0; return val; #elif HAVE_ATOF_ACCEPTS_INF return atof("INF"); #else return 1.0/0.0; #endif } /* }}} */ #define ZEND_INFINITY (_zend_get_inf()) static zend_always_inline double _zend_get_nan(void) /* {{{ */ { #ifdef NAN return NAN; #elif HAVE_HUGE_VAL_NAN return HUGE_VAL + -HUGE_VAL; #elif defined(__i386__) || defined(_X86_) || defined(ALPHA) || defined(_ALPHA) || defined(__alpha) # define _zend_DOUBLE_QUIET_NAN_HIGH 0xfff80000 double val = 0.0; ((uint32_t*)&val)[1] = _zend_DOUBLE_QUIET_NAN_HIGH; ((uint32_t*)&val)[0] = 0; return val; #elif HAVE_ATOF_ACCEPTS_NAN return atof("NAN"); #else return 0.0/0.0; #endif } /* }}} */ #define ZEND_NAN (_zend_get_nan()) #define ZEND_STRL(str) (str), (sizeof(str)-1) #define ZEND_STRS(str) (str), (sizeof(str)) #define ZEND_NORMALIZE_BOOL(n) \ ((n) ? (((n)<0) ? -1 : 1) : 0) #define ZEND_TRUTH(x) ((x) ? 1 : 0) #define ZEND_LOG_XOR(a, b) (ZEND_TRUTH(a) ^ ZEND_TRUTH(b)) #define ZEND_MAX_RESERVED_RESOURCES 6 /* excpt.h on Digital Unix 4.0 defines function_table */ #undef function_table #ifdef ZEND_WIN32 #define ZEND_SECURE_ZERO(var, size) RtlSecureZeroMemory((var), (size)) #else #define ZEND_SECURE_ZERO(var, size) explicit_bzero((var), (size)) #endif /* This check should only be used on network socket, not file descriptors */ #ifdef ZEND_WIN32 #define ZEND_VALID_SOCKET(sock) (INVALID_SOCKET != (sock)) #else #define ZEND_VALID_SOCKET(sock) ((sock) >= 0) #endif /* va_copy() is __va_copy() in old gcc versions. * According to the autoconf manual, using * memcpy(&dst, &src, sizeof(va_list)) * gives maximum portability. */ #ifndef va_copy # ifdef __va_copy # define va_copy(dest, src) __va_copy((dest), (src)) # else # define va_copy(dest, src) memcpy(&(dest), &(src), sizeof(va_list)) # endif #endif /* Intrinsics macros start. */ #if defined(HAVE_FUNC_ATTRIBUTE_IFUNC) && defined(HAVE_FUNC_ATTRIBUTE_TARGET) # define ZEND_INTRIN_HAVE_IFUNC_TARGET 1 #endif #if (defined(__i386__) || defined(__x86_64__)) # if PHP_HAVE_SSSE3_INSTRUCTIONS && defined(HAVE_TMMINTRIN_H) # define PHP_HAVE_SSSE3 # endif # if PHP_HAVE_SSE4_2_INSTRUCTIONS && defined(HAVE_NMMINTRIN_H) # define PHP_HAVE_SSE4_2 # endif /* * AVX2 support was added in gcc 4.7, but AVX2 intrinsics don't work in * __attribute__((target("avx2"))) functions until gcc 4.9. */ # if PHP_HAVE_AVX2_INSTRUCTIONS && defined(HAVE_IMMINTRIN_H) && \ (defined(__llvm__) || defined(__clang__) || (defined(__GNUC__) && ZEND_GCC_VERSION >= 4009)) # define PHP_HAVE_AVX2 # endif #endif #ifdef __SSSE3__ /* Instructions compiled directly. */ # define ZEND_INTRIN_SSSE3_NATIVE 1 #elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSSE3)) || defined(ZEND_WIN32) /* Function resolved by ifunc or MINIT. */ # define ZEND_INTRIN_SSSE3_RESOLVER 1 #endif #if ZEND_INTRIN_SSSE3_RESOLVER && ZEND_INTRIN_HAVE_IFUNC_TARGET # define ZEND_INTRIN_SSSE3_FUNC_PROTO 1 #elif ZEND_INTRIN_SSSE3_RESOLVER # define ZEND_INTRIN_SSSE3_FUNC_PTR 1 #endif #if ZEND_INTRIN_SSSE3_RESOLVER # if defined(HAVE_FUNC_ATTRIBUTE_TARGET) # define ZEND_INTRIN_SSSE3_FUNC_DECL(func) ZEND_API func __attribute__((target("ssse3"))) # else # define ZEND_INTRIN_SSSE3_FUNC_DECL(func) func # endif #else # define ZEND_INTRIN_SSSE3_FUNC_DECL(func) #endif #if defined(HAVE_SSE4_2_DEF) || (defined(ZEND_WIN32) && defined(__SSE4_2__)) /* Instructions compiled directly. */ # define ZEND_INTRIN_SSE4_2_NATIVE 1 #elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_SSE4_2)) || defined(ZEND_WIN32) /* Function resolved by ifunc or MINIT. */ # define ZEND_INTRIN_SSE4_2_RESOLVER 1 #endif #if ZEND_INTRIN_SSE4_2_RESOLVER && ZEND_INTRIN_HAVE_IFUNC_TARGET # define ZEND_INTRIN_SSE4_2_FUNC_PROTO 1 #elif ZEND_INTRIN_SSE4_2_RESOLVER # define ZEND_INTRIN_SSE4_2_FUNC_PTR 1 #endif #if ZEND_INTRIN_SSE4_2_RESOLVER # if defined(HAVE_FUNC_ATTRIBUTE_TARGET) # define ZEND_INTRIN_SSE4_2_FUNC_DECL(func) ZEND_API func __attribute__((target("sse4.2"))) # else # define ZEND_INTRIN_SSE4_2_FUNC_DECL(func) func # endif #else # define ZEND_INTRIN_SSE4_2_FUNC_DECL(func) #endif #ifdef __AVX2__ # define ZEND_INTRIN_AVX2_NATIVE 1 #elif (defined(HAVE_FUNC_ATTRIBUTE_TARGET) && defined(PHP_HAVE_AVX2)) || defined(ZEND_WIN32) # define ZEND_INTRIN_AVX2_RESOLVER 1 #endif #if ZEND_INTRIN_AVX2_RESOLVER && ZEND_INTRIN_HAVE_IFUNC_TARGET # define ZEND_INTRIN_AVX2_FUNC_PROTO 1 #elif ZEND_INTRIN_AVX2_RESOLVER # define ZEND_INTRIN_AVX2_FUNC_PTR 1 #endif #if ZEND_INTRIN_AVX2_RESOLVER # if defined(HAVE_FUNC_ATTRIBUTE_TARGET) # define ZEND_INTRIN_AVX2_FUNC_DECL(func) ZEND_API func __attribute__((target("avx2"))) # else # define ZEND_INTRIN_AVX2_FUNC_DECL(func) func # endif #else # define ZEND_INTRIN_AVX2_FUNC_DECL(func) #endif /* Intrinsics macros end. */ #ifdef ZEND_WIN32 # define ZEND_SET_ALIGNED(alignment, decl) __declspec(align(alignment)) decl #elif HAVE_ATTRIBUTE_ALIGNED # define ZEND_SET_ALIGNED(alignment, decl) decl __attribute__ ((__aligned__ (alignment))) #else # define ZEND_SET_ALIGNED(alignment, decl) decl #endif #define ZEND_SLIDE_TO_ALIGNED(alignment, ptr) (((zend_uintptr_t)(ptr) + ((alignment)-1)) & ~((alignment)-1)) #define ZEND_SLIDE_TO_ALIGNED16(ptr) ZEND_SLIDE_TO_ALIGNED(Z_UL(16), ptr) #ifdef ZEND_WIN32 # define _ZEND_EXPAND_VA(a) a # define ZEND_EXPAND_VA(code) _ZEND_EXPAND_VA(code) #else # define ZEND_EXPAND_VA(code) code #endif #endif /* ZEND_PORTABILITY_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!wwZend/zend_builtin_functions.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_BUILTIN_FUNCTIONS_H #define ZEND_BUILTIN_FUNCTIONS_H int zend_startup_builtin_functions(void); BEGIN_EXTERN_C() ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options, int limit); END_EXTERN_C() #endif /* ZEND_BUILTIN_FUNCTIONS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!,,Zend/zend_signal.hnu[/* +----------------------------------------------------------------------+ | Zend Signal Handling | +----------------------------------------------------------------------+ | Copyright (c) 2008-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Lucas Nealan | | Arnaud Le Blanc | +----------------------------------------------------------------------+ */ #ifndef ZEND_SIGNAL_H #define ZEND_SIGNAL_H #ifdef ZEND_SIGNALS # ifdef HAVE_SIGNAL_H # include # endif #ifndef NSIG #define NSIG 65 #endif #ifndef ZEND_SIGNAL_QUEUE_SIZE #define ZEND_SIGNAL_QUEUE_SIZE 64 #endif /* Signal structs */ typedef struct _zend_signal_entry_t { int flags; /* sigaction style flags */ void* handler; /* signal handler or context */ } zend_signal_entry_t; typedef struct _zend_signal_t { int signo; siginfo_t *siginfo; void* context; } zend_signal_t; typedef struct _zend_signal_queue_t { zend_signal_t zend_signal; struct _zend_signal_queue_t *next; } zend_signal_queue_t; /* Signal Globals */ typedef struct _zend_signal_globals_t { int depth; int blocked; /* 1==TRUE, 0==FALSE */ int running; /* in signal handler execution */ int active; /* internal signal handling is enabled */ zend_bool check; /* check for replaced handlers on shutdown */ zend_signal_entry_t handlers[NSIG]; zend_signal_queue_t pstorage[ZEND_SIGNAL_QUEUE_SIZE], *phead, *ptail, *pavail; /* pending queue */ } zend_signal_globals_t; # ifdef ZTS # define SIGG(v) ZEND_TSRMG(zend_signal_globals_id, zend_signal_globals_t *, v) BEGIN_EXTERN_C() ZEND_API extern int zend_signal_globals_id; END_EXTERN_C() # else # define SIGG(v) (zend_signal_globals.v) BEGIN_EXTERN_C() ZEND_API extern zend_signal_globals_t zend_signal_globals; END_EXTERN_C() # endif /* not ZTS */ # ifdef ZTS # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id)) { SIGG(depth)++; } # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (EXPECTED(zend_signal_globals_id) && UNEXPECTED(((SIGG(depth)--) == SIGG(blocked)))) { zend_signal_handler_unblock(); } # else /* ZTS */ # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() SIGG(depth)++; # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() if (((SIGG(depth)--) == SIGG(blocked))) { zend_signal_handler_unblock(); } # endif /* not ZTS */ ZEND_API void zend_signal_handler_unblock(void); void zend_signal_activate(void); void zend_signal_deactivate(void); BEGIN_EXTERN_C() ZEND_API void zend_signal_startup(void); END_EXTERN_C() void zend_signal_init(void); ZEND_API int zend_signal(int signo, void (*handler)(int)); ZEND_API int zend_sigaction(int signo, const struct sigaction *act, struct sigaction *oldact); #else /* ZEND_SIGNALS */ # define ZEND_SIGNAL_BLOCK_INTERRUPTIONS() # define ZEND_SIGNAL_UNBLOCK_INTERRUPTIONS() # define zend_signal_activate() # define zend_signal_deactivate() # define zend_signal_startup() # define zend_signal_init() # define zend_signal(signo, handler) signal(signo, handler) # define zend_sigaction(signo, act, oldact) sigaction(signo, act, oldact) #endif /* ZEND_SIGNALS */ #endif /* ZEND_SIGNAL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!``Zend/zend_long.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Anatol Belski | +----------------------------------------------------------------------+ */ #ifndef ZEND_LONG_H #define ZEND_LONG_H #include "main/php_stdint.h" /* This is the heart of the whole int64 enablement in zval. */ #if defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64) # define ZEND_ENABLE_ZVAL_LONG64 1 #endif /* Integer types. */ #ifdef ZEND_ENABLE_ZVAL_LONG64 typedef int64_t zend_long; typedef uint64_t zend_ulong; typedef int64_t zend_off_t; # define ZEND_LONG_MAX INT64_MAX # define ZEND_LONG_MIN INT64_MIN # define ZEND_ULONG_MAX UINT64_MAX # define Z_L(i) INT64_C(i) # define Z_UL(i) UINT64_C(i) # define SIZEOF_ZEND_LONG 8 #else typedef int32_t zend_long; typedef uint32_t zend_ulong; typedef int32_t zend_off_t; # define ZEND_LONG_MAX INT32_MAX # define ZEND_LONG_MIN INT32_MIN # define ZEND_ULONG_MAX UINT32_MAX # define Z_L(i) INT32_C(i) # define Z_UL(i) UINT32_C(i) # define SIZEOF_ZEND_LONG 4 #endif /* Conversion macros. */ #define ZEND_LTOA_BUF_LEN 65 #ifdef ZEND_ENABLE_ZVAL_LONG64 # define ZEND_LONG_FMT "%" PRId64 # define ZEND_ULONG_FMT "%" PRIu64 # define ZEND_XLONG_FMT "%" PRIx64 # define ZEND_LONG_FMT_SPEC PRId64 # define ZEND_ULONG_FMT_SPEC PRIu64 # ifdef ZEND_WIN32 # define ZEND_LTOA(i, s, len) _i64toa_s((i), (s), (len), 10) # define ZEND_ATOL(i, s) i = _atoi64((s)) # define ZEND_STRTOL(s0, s1, base) _strtoi64((s0), (s1), (base)) # define ZEND_STRTOUL(s0, s1, base) _strtoui64((s0), (s1), (base)) # define ZEND_STRTOL_PTR _strtoi64 # define ZEND_STRTOUL_PTR _strtoui64 # define ZEND_ABS _abs64 # else # define ZEND_LTOA(i, s, len) \ do { \ int st = snprintf((s), (len), ZEND_LONG_FMT, (i)); \ (s)[st] = '\0'; \ } while (0) # define ZEND_ATOL(i, s) (i) = atoll((s)) # define ZEND_STRTOL(s0, s1, base) strtoll((s0), (s1), (base)) # define ZEND_STRTOUL(s0, s1, base) strtoull((s0), (s1), (base)) # define ZEND_STRTOL_PTR strtoll # define ZEND_STRTOUL_PTR strtoull # define ZEND_ABS imaxabs # endif #else # define ZEND_STRTOL(s0, s1, base) strtol((s0), (s1), (base)) # define ZEND_STRTOUL(s0, s1, base) strtoul((s0), (s1), (base)) # define ZEND_LONG_FMT "%" PRId32 # define ZEND_ULONG_FMT "%" PRIu32 # define ZEND_XLONG_FMT "%" PRIx32 # define ZEND_LONG_FMT_SPEC PRId32 # define ZEND_ULONG_FMT_SPEC PRIu32 # ifdef ZEND_WIN32 # define ZEND_LTOA(i, s, len) _ltoa_s((i), (s), (len), 10) # define ZEND_ATOL(i, s) i = atol((s)) # else # define ZEND_LTOA(i, s, len) \ do { \ int st = snprintf((s), (len), ZEND_LONG_FMT, (i)); \ (s)[st] = '\0'; \ } while (0) # define ZEND_ATOL(i, s) (i) = atol((s)) # endif # define ZEND_STRTOL_PTR strtol # define ZEND_STRTOUL_PTR strtoul # define ZEND_ABS abs #endif #if SIZEOF_ZEND_LONG == 4 # define MAX_LENGTH_OF_LONG 11 # define LONG_MIN_DIGITS "2147483648" #elif SIZEOF_ZEND_LONG == 8 # define MAX_LENGTH_OF_LONG 20 # define LONG_MIN_DIGITS "9223372036854775808" #else # error "Unknown SIZEOF_ZEND_LONG" #endif static const char long_min_digits[] = LONG_MIN_DIGITS; #ifdef _WIN64 # define ZEND_ADDR_FMT "0x%016I64x" #elif SIZEOF_SIZE_T == 4 # define ZEND_ADDR_FMT "0x%08zx" #elif SIZEOF_SIZE_T == 8 # define ZEND_ADDR_FMT "0x%016zx" #else # error "Unknown SIZEOF_SIZE_T" #endif #endif /* ZEND_LONG_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!L8}s``Zend/zend_compile.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_COMPILE_H #define ZEND_COMPILE_H #include "zend.h" #include "zend_ast.h" #ifdef HAVE_STDARG_H # include #endif #include "zend_llist.h" #define SET_UNUSED(op) op ## _type = IS_UNUSED #define MAKE_NOP(opline) do { \ (opline)->op1.num = 0; \ (opline)->op2.num = 0; \ (opline)->result.num = 0; \ (opline)->opcode = ZEND_NOP; \ (opline)->op1_type = IS_UNUSED; \ (opline)->op2_type = IS_UNUSED; \ (opline)->result_type = IS_UNUSED; \ } while (0) #define RESET_DOC_COMMENT() do { \ if (CG(doc_comment)) { \ zend_string_release_ex(CG(doc_comment), 0); \ CG(doc_comment) = NULL; \ } \ } while (0) typedef struct _zend_op_array zend_op_array; typedef struct _zend_op zend_op; /* On 64-bit systems less optimal, but more compact VM code leads to better * performance. So on 32-bit systems we use absolute addresses for jump * targets and constants, but on 64-bit systems realtive 32-bit offsets */ #if SIZEOF_SIZE_T == 4 # define ZEND_USE_ABS_JMP_ADDR 1 # define ZEND_USE_ABS_CONST_ADDR 1 # define ZEND_EX_USE_RUN_TIME_CACHE 1 #else # define ZEND_USE_ABS_JMP_ADDR 0 # define ZEND_USE_ABS_CONST_ADDR 0 # define ZEND_EX_USE_RUN_TIME_CACHE 1 #endif typedef union _znode_op { uint32_t constant; uint32_t var; uint32_t num; uint32_t opline_num; /* Needs to be signed */ #if ZEND_USE_ABS_JMP_ADDR zend_op *jmp_addr; #else uint32_t jmp_offset; #endif #if ZEND_USE_ABS_CONST_ADDR zval *zv; #endif } znode_op; typedef struct _znode { /* used only during compilation */ zend_uchar op_type; zend_uchar flag; union { znode_op op; zval constant; /* replaced by literal/zv */ } u; } znode; /* Temporarily defined here, to avoid header ordering issues */ typedef struct _zend_ast_znode { zend_ast_kind kind; zend_ast_attr attr; uint32_t lineno; znode node; } zend_ast_znode; ZEND_API zend_ast * ZEND_FASTCALL zend_ast_create_znode(znode *node); static zend_always_inline znode *zend_ast_get_znode(zend_ast *ast) { return &((zend_ast_znode *) ast)->node; } typedef struct _zend_declarables { zend_long ticks; } zend_declarables; /* Compilation context that is different for each file, but shared between op arrays. */ typedef struct _zend_file_context { zend_declarables declarables; znode implementing_class; zend_string *current_namespace; zend_bool in_namespace; zend_bool has_bracketed_namespaces; HashTable *imports; HashTable *imports_function; HashTable *imports_const; HashTable seen_symbols; } zend_file_context; typedef union _zend_parser_stack_elem { zend_ast *ast; zend_string *str; zend_ulong num; } zend_parser_stack_elem; void zend_compile_top_stmt(zend_ast *ast); void zend_compile_stmt(zend_ast *ast); void zend_compile_expr(znode *node, zend_ast *ast); void zend_compile_var(znode *node, zend_ast *ast, uint32_t type); void zend_eval_const_expr(zend_ast **ast_ptr); void zend_const_expr_to_zval(zval *result, zend_ast *ast); typedef int (*user_opcode_handler_t) (zend_execute_data *execute_data); struct _zend_op { const void *handler; znode_op op1; znode_op op2; znode_op result; uint32_t extended_value; uint32_t lineno; zend_uchar opcode; zend_uchar op1_type; zend_uchar op2_type; zend_uchar result_type; }; typedef struct _zend_brk_cont_element { int start; int cont; int brk; int parent; zend_bool is_switch; } zend_brk_cont_element; typedef struct _zend_label { int brk_cont; uint32_t opline_num; } zend_label; typedef struct _zend_try_catch_element { uint32_t try_op; uint32_t catch_op; /* ketchup! */ uint32_t finally_op; uint32_t finally_end; } zend_try_catch_element; #define ZEND_LIVE_TMPVAR 0 #define ZEND_LIVE_LOOP 1 #define ZEND_LIVE_SILENCE 2 #define ZEND_LIVE_ROPE 3 #define ZEND_LIVE_MASK 3 typedef struct _zend_live_range { uint32_t var; /* low bits are used for variable type (ZEND_LIVE_* macros) */ uint32_t start; uint32_t end; } zend_live_range; /* Compilation context that is different for each op array. */ typedef struct _zend_oparray_context { uint32_t opcodes_size; int vars_size; int literals_size; int backpatch_count; uint32_t fast_call_var; uint32_t try_catch_offset; int current_brk_cont; int last_brk_cont; zend_brk_cont_element *brk_cont_array; HashTable *labels; } zend_oparray_context; /* Class, property and method flags class|meth.|prop.|const*/ /* | | | */ /* Common flags | | | */ /* ============ | | | */ /* | | | */ /* Staic method or property | | | */ #define ZEND_ACC_STATIC (1 << 0) /* | X | X | */ /* | | | */ /* Final class or method | | | */ #define ZEND_ACC_FINAL (1 << 2) /* X | X | | */ /* | | | */ /* Visibility flags (public < protected < private) | | | */ #define ZEND_ACC_PUBLIC (1 << 8) /* | X | X | X */ #define ZEND_ACC_PROTECTED (1 << 9) /* | X | X | X */ #define ZEND_ACC_PRIVATE (1 << 10) /* | X | X | X */ /* | | | */ /* TODO: explain the name ??? | | | */ #define ZEND_ACC_CHANGED (1 << 11) /* | X | X | */ /* | | | */ /* TODO: used only by ext/reflection ??? | | | */ #define ZEND_ACC_IMPLICIT_PUBLIC (1 << 12) /* | ? | ? | ? */ /* | | | */ /* Shadow of parent's private method/property | | | */ #define ZEND_ACC_SHADOW (1 << 17) /* | ? | X | */ /* | | | */ /* Class Flags (unused: 0, 1, 3, 11-18, 21, 25...) | | | */ /* =========== | | | */ /* | | | */ /* class is abstarct, since it is set by any | | | */ /* abstract method | | | */ #define ZEND_ACC_IMPLICIT_ABSTRACT_CLASS (1 << 4) /* X | | | */ /* | | | */ /* Class is explicitly defined as abstract by using | | | */ /* the keyword. | | | */ #define ZEND_ACC_EXPLICIT_ABSTRACT_CLASS (1 << 5) /* X | | | */ /* | | | */ /* Special class types | | | */ #define ZEND_ACC_INTERFACE (1 << 6) /* X | | | */ #define ZEND_ACC_TRAIT (1 << 7) /* X | | | */ #define ZEND_ACC_ANON_CLASS (1 << 8) /* X | | | */ /* | | | */ /* Bound anonymous class | | | */ #define ZEND_ACC_ANON_BOUND (1 << 9) /* X | | | */ /* | | | */ /* Class extends another class | | | */ #define ZEND_ACC_INHERITED (1 << 10) /* X | | | */ /* | | | */ /* Class implements interface(s) | | | */ #define ZEND_ACC_IMPLEMENT_INTERFACES (1 << 19) /* X | | | */ /* | | | */ /* Class constants updated | | | */ #define ZEND_ACC_CONSTANTS_UPDATED (1 << 20) /* X | | | */ /* | | | */ /* Class uses trait(s) | | | */ #define ZEND_ACC_IMPLEMENT_TRAITS (1 << 22) /* X | | | */ /* | | | */ /* User class has methods with static variables | | | */ #define ZEND_HAS_STATIC_IN_METHODS (1 << 23) /* X | | | */ /* | | | */ /* Class has magic methods __get/__set/__unset/ | | | */ /* __isset that use guards | | | */ #define ZEND_ACC_USE_GUARDS (1 << 24) /* X | | | */ /* | | | */ /* Function Flags (unused: 4, 5, 17?) | | | */ /* ============== | | | */ /* | | | */ /* Abstarct method | | | */ #define ZEND_ACC_ABSTRACT (1 << 1) /* | X | | */ /* | | | */ /* TODO: used only during inheritance ??? | | | */ #define ZEND_ACC_IMPLEMENTED_ABSTRACT (1 << 3) /* | X | | */ /* | | | */ #define ZEND_ACC_FAKE_CLOSURE (1 << 6) /* | X | | */ /* | | | */ /* method flag used by Closure::__invoke() | | | */ #define ZEND_ACC_USER_ARG_INFO (1 << 7) /* | X | | */ /* | | | */ /* method flags (special method detection) | | | */ #define ZEND_ACC_CTOR (1 << 13) /* | X | | */ #define ZEND_ACC_DTOR (1 << 14) /* | X | | */ /* | | | */ /* "main" op_array with | | | */ /* ZEND_DECLARE_INHERITED_CLASS_DELAYED opcodes | | | */ #define ZEND_ACC_EARLY_BINDING (1 << 15) /* | X | | */ /* | | | */ /* method flag (bc only), any method that has this | | | */ /* flag can be used statically and non statically. | | | */ #define ZEND_ACC_ALLOW_STATIC (1 << 16) /* | X | | */ /* | | | */ /* deprecation flag | | | */ #define ZEND_ACC_DEPRECATED (1 << 18) /* | X | | */ /* | | | */ #define ZEND_ACC_NO_RT_ARENA (1 << 19) /* | X | | */ /* | | | */ #define ZEND_ACC_CLOSURE (1 << 20) /* | X | | */ /* | | | */ /* call through user function trampoline. e.g. | | | */ /* __call, __callstatic | | | */ #define ZEND_ACC_CALL_VIA_TRAMPOLINE (1 << 21) /* | X | | */ /* | | | */ /* disable inline caching | | | */ #define ZEND_ACC_NEVER_CACHE (1 << 22) /* | X | | */ /* | | | */ #define ZEND_ACC_GENERATOR (1 << 23) /* | X | | */ /* | | | */ /* Function with varable number of arguments | | | */ #define ZEND_ACC_VARIADIC (1 << 24) /* | X | | */ /* | | | */ /* Immutable op_array (lazy loading) | | | */ #define ZEND_ACC_IMMUTABLE (1 << 25) /* | X | | */ /* | | | */ /* Function returning by reference | | | */ #define ZEND_ACC_RETURN_REFERENCE (1 << 26) /* | X | | */ /* | | | */ #define ZEND_ACC_DONE_PASS_TWO (1 << 27) /* | X | | */ /* | | | */ /* Function has typed arguments | | | */ #define ZEND_ACC_HAS_TYPE_HINTS (1 << 28) /* | X | | */ /* | | | */ /* op_array has finally blocks (user only) | | | */ #define ZEND_ACC_HAS_FINALLY_BLOCK (1 << 29) /* | X | | */ /* | | | */ /* internal function is allocated at arena (int only) | | | */ #define ZEND_ACC_ARENA_ALLOCATED (1 << 29) /* | X | | */ /* | | | */ /* Function has a return type | | | */ #define ZEND_ACC_HAS_RETURN_TYPE (1 << 30) /* | X | | */ /* | | | */ /* op_array uses strict mode types | | | */ #define ZEND_ACC_STRICT_TYPES (1 << 31) /* | X | | */ #define ZEND_ACC_PPP_MASK (ZEND_ACC_PUBLIC | ZEND_ACC_PROTECTED | ZEND_ACC_PRIVATE) /* call through internal function handler. e.g. Closure::invoke() */ #define ZEND_ACC_CALL_VIA_HANDLER ZEND_ACC_CALL_VIA_TRAMPOLINE char *zend_visibility_string(uint32_t fn_flags); typedef struct _zend_property_info { uint32_t offset; /* property offset for object properties or property index for static properties */ uint32_t flags; zend_string *name; zend_string *doc_comment; zend_class_entry *ce; } zend_property_info; #define OBJ_PROP(obj, offset) \ ((zval*)((char*)(obj) + offset)) #define OBJ_PROP_NUM(obj, num) \ (&(obj)->properties_table[(num)]) #define OBJ_PROP_TO_OFFSET(num) \ ((uint32_t)(zend_uintptr_t)OBJ_PROP_NUM(((zend_object*)NULL), num)) #define OBJ_PROP_TO_NUM(offset) \ ((offset - OBJ_PROP_TO_OFFSET(0)) / sizeof(zval)) typedef struct _zend_class_constant { zval value; /* access flags are stored in reserved: zval.u2.access_flags */ zend_string *doc_comment; zend_class_entry *ce; } zend_class_constant; /* arg_info for internal functions */ typedef struct _zend_internal_arg_info { const char *name; zend_type type; zend_uchar pass_by_reference; zend_bool is_variadic; } zend_internal_arg_info; /* arg_info for user functions */ typedef struct _zend_arg_info { zend_string *name; zend_type type; zend_uchar pass_by_reference; zend_bool is_variadic; } zend_arg_info; /* the following structure repeats the layout of zend_internal_arg_info, * but its fields have different meaning. It's used as the first element of * arg_info array to define properties of internal functions. * It's also used for the return type. */ typedef struct _zend_internal_function_info { zend_uintptr_t required_num_args; zend_type type; zend_bool return_reference; zend_bool _is_variadic; } zend_internal_function_info; struct _zend_op_array { /* Common elements */ zend_uchar type; zend_uchar arg_flags[3]; /* bitset of arg_info.pass_by_reference */ uint32_t fn_flags; zend_string *function_name; zend_class_entry *scope; zend_function *prototype; uint32_t num_args; uint32_t required_num_args; zend_arg_info *arg_info; /* END of common elements */ int cache_size; /* number of run_time_cache_slots * sizeof(void*) */ int last_var; /* number of CV variables */ uint32_t T; /* number of temporary variables */ uint32_t last; /* number of opcodes */ zend_op *opcodes; void **run_time_cache; HashTable *static_variables; zend_string **vars; /* names of CV variables */ uint32_t *refcount; int last_live_range; int last_try_catch; zend_live_range *live_range; zend_try_catch_element *try_catch_array; zend_string *filename; uint32_t line_start; uint32_t line_end; zend_string *doc_comment; int last_literal; zval *literals; void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; #define ZEND_RETURN_VALUE 0 #define ZEND_RETURN_REFERENCE 1 /* zend_internal_function_handler */ typedef void (ZEND_FASTCALL *zif_handler)(INTERNAL_FUNCTION_PARAMETERS); typedef struct _zend_internal_function { /* Common elements */ zend_uchar type; zend_uchar arg_flags[3]; /* bitset of arg_info.pass_by_reference */ uint32_t fn_flags; zend_string* function_name; zend_class_entry *scope; zend_function *prototype; uint32_t num_args; uint32_t required_num_args; zend_internal_arg_info *arg_info; /* END of common elements */ zif_handler handler; struct _zend_module_entry *module; void *reserved[ZEND_MAX_RESERVED_RESOURCES]; } zend_internal_function; #define ZEND_FN_SCOPE_NAME(function) ((function) && (function)->common.scope ? ZSTR_VAL((function)->common.scope->name) : "") union _zend_function { zend_uchar type; /* MUST be the first element of this struct! */ uint32_t quick_arg_flags; struct { zend_uchar type; /* never used */ zend_uchar arg_flags[3]; /* bitset of arg_info.pass_by_reference */ uint32_t fn_flags; zend_string *function_name; zend_class_entry *scope; union _zend_function *prototype; uint32_t num_args; uint32_t required_num_args; zend_arg_info *arg_info; } common; zend_op_array op_array; zend_internal_function internal_function; }; typedef enum _zend_call_kind { ZEND_CALL_NESTED_FUNCTION, /* stackless VM call to function */ ZEND_CALL_NESTED_CODE, /* stackless VM call to include/require/eval */ ZEND_CALL_TOP_FUNCTION, /* direct VM call to function from external C code */ ZEND_CALL_TOP_CODE /* direct VM call to "main" code from external C code */ } zend_call_kind; struct _zend_execute_data { const zend_op *opline; /* executed opline */ zend_execute_data *call; /* current call */ zval *return_value; zend_function *func; /* executed function */ zval This; /* this + call_info + num_args */ zend_execute_data *prev_execute_data; zend_array *symbol_table; #if ZEND_EX_USE_RUN_TIME_CACHE void **run_time_cache; /* cache op_array->run_time_cache */ #endif }; #define ZEND_CALL_FUNCTION (0 << 0) #define ZEND_CALL_CODE (1 << 0) #define ZEND_CALL_NESTED (0 << 1) #define ZEND_CALL_TOP (1 << 1) #define ZEND_CALL_FREE_EXTRA_ARGS (1 << 2) #define ZEND_CALL_CTOR (1 << 3) #define ZEND_CALL_HAS_SYMBOL_TABLE (1 << 4) #define ZEND_CALL_CLOSURE (1 << 5) #define ZEND_CALL_RELEASE_THIS (1 << 6) #define ZEND_CALL_ALLOCATED (1 << 7) #define ZEND_CALL_GENERATOR (1 << 8) #define ZEND_CALL_DYNAMIC (1 << 9) #define ZEND_CALL_FAKE_CLOSURE (1 << 10) #define ZEND_CALL_SEND_ARG_BY_REF (1 << 11) #define ZEND_CALL_INFO_SHIFT 16 #define ZEND_CALL_INFO(call) \ (Z_TYPE_INFO((call)->This) >> ZEND_CALL_INFO_SHIFT) #define ZEND_CALL_KIND_EX(call_info) \ (call_info & (ZEND_CALL_CODE | ZEND_CALL_TOP)) #define ZEND_CALL_KIND(call) \ ZEND_CALL_KIND_EX(ZEND_CALL_INFO(call)) #define ZEND_SET_CALL_INFO(call, object, info) do { \ Z_TYPE_INFO((call)->This) = ((object) ? IS_OBJECT_EX : IS_UNDEF) | ((info) << ZEND_CALL_INFO_SHIFT); \ } while (0) #define ZEND_ADD_CALL_FLAG_EX(call_info, flag) do { \ call_info |= ((flag) << ZEND_CALL_INFO_SHIFT); \ } while (0) #define ZEND_DEL_CALL_FLAG_EX(call_info, flag) do { \ call_info &= ~((flag) << ZEND_CALL_INFO_SHIFT); \ } while (0) #define ZEND_ADD_CALL_FLAG(call, flag) do { \ ZEND_ADD_CALL_FLAG_EX(Z_TYPE_INFO((call)->This), flag); \ } while (0) #define ZEND_DEL_CALL_FLAG(call, flag) do { \ ZEND_DEL_CALL_FLAG_EX(Z_TYPE_INFO((call)->This), flag); \ } while (0) #define ZEND_CALL_NUM_ARGS(call) \ (call)->This.u2.num_args #define ZEND_CALL_FRAME_SLOT \ ((int)((ZEND_MM_ALIGNED_SIZE(sizeof(zend_execute_data)) + ZEND_MM_ALIGNED_SIZE(sizeof(zval)) - 1) / ZEND_MM_ALIGNED_SIZE(sizeof(zval)))) #define ZEND_CALL_VAR(call, n) \ ((zval*)(((char*)(call)) + ((int)(n)))) #define ZEND_CALL_VAR_NUM(call, n) \ (((zval*)(call)) + (ZEND_CALL_FRAME_SLOT + ((int)(n)))) #define ZEND_CALL_ARG(call, n) \ ZEND_CALL_VAR_NUM(call, ((int)(n)) - 1) #define EX(element) ((execute_data)->element) #define EX_CALL_INFO() ZEND_CALL_INFO(execute_data) #define EX_CALL_KIND() ZEND_CALL_KIND(execute_data) #define EX_NUM_ARGS() ZEND_CALL_NUM_ARGS(execute_data) #define ZEND_CALL_USES_STRICT_TYPES(call) \ (((call)->func->common.fn_flags & ZEND_ACC_STRICT_TYPES) != 0) #define EX_USES_STRICT_TYPES() \ ZEND_CALL_USES_STRICT_TYPES(execute_data) #define ZEND_ARG_USES_STRICT_TYPES() \ (EG(current_execute_data)->prev_execute_data && \ EG(current_execute_data)->prev_execute_data->func && \ ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data)->prev_execute_data)) #define ZEND_RET_USES_STRICT_TYPES() \ ZEND_CALL_USES_STRICT_TYPES(EG(current_execute_data)) #define EX_VAR(n) ZEND_CALL_VAR(execute_data, n) #define EX_VAR_NUM(n) ZEND_CALL_VAR_NUM(execute_data, n) #define EX_VAR_TO_NUM(n) ((uint32_t)(ZEND_CALL_VAR(NULL, n) - ZEND_CALL_VAR_NUM(NULL, 0))) #define ZEND_OPLINE_TO_OFFSET(opline, target) \ ((char*)(target) - (char*)(opline)) #define ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, opline_num) \ ((char*)&(op_array)->opcodes[opline_num] - (char*)(opline)) #define ZEND_OFFSET_TO_OPLINE(base, offset) \ ((zend_op*)(((char*)(base)) + (int)offset)) #define ZEND_OFFSET_TO_OPLINE_NUM(op_array, base, offset) \ (ZEND_OFFSET_TO_OPLINE(base, offset) - op_array->opcodes) #if ZEND_USE_ABS_JMP_ADDR /* run-time jump target */ # define OP_JMP_ADDR(opline, node) \ (node).jmp_addr # define ZEND_SET_OP_JMP_ADDR(opline, node, val) do { \ (node).jmp_addr = (val); \ } while (0) /* convert jump target from compile-time to run-time */ # define ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, node) do { \ (node).jmp_addr = (op_array)->opcodes + (node).opline_num; \ } while (0) /* convert jump target back from run-time to compile-time */ # define ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, node) do { \ (node).opline_num = (node).jmp_addr - (op_array)->opcodes; \ } while (0) #else /* run-time jump target */ # define OP_JMP_ADDR(opline, node) \ ZEND_OFFSET_TO_OPLINE(opline, (node).jmp_offset) # define ZEND_SET_OP_JMP_ADDR(opline, node, val) do { \ (node).jmp_offset = ZEND_OPLINE_TO_OFFSET(opline, val); \ } while (0) /* convert jump target from compile-time to run-time */ # define ZEND_PASS_TWO_UPDATE_JMP_TARGET(op_array, opline, node) do { \ (node).jmp_offset = ZEND_OPLINE_NUM_TO_OFFSET(op_array, opline, (node).opline_num); \ } while (0) /* convert jump target back from run-time to compile-time */ # define ZEND_PASS_TWO_UNDO_JMP_TARGET(op_array, opline, node) do { \ (node).opline_num = ZEND_OFFSET_TO_OPLINE_NUM(op_array, opline, (node).jmp_offset); \ } while (0) #endif /* constant-time constant */ # define CT_CONSTANT_EX(op_array, num) \ ((op_array)->literals + (num)) # define CT_CONSTANT(node) \ CT_CONSTANT_EX(CG(active_op_array), (node).constant) #if ZEND_USE_ABS_CONST_ADDR /* run-time constant */ # define RT_CONSTANT(opline, node) \ (node).zv /* convert constant from compile-time to run-time */ # define ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, node) do { \ (node).zv = CT_CONSTANT_EX(op_array, (node).constant); \ } while (0) #else /* At run-time, constants are allocated together with op_array->opcodes * and addressed relatively to current opline. */ /* run-time constant */ # define RT_CONSTANT(opline, node) \ ((zval*)(((char*)(opline)) + (int32_t)(node).constant)) /* convert constant from compile-time to run-time */ # define ZEND_PASS_TWO_UPDATE_CONSTANT(op_array, opline, node) do { \ (node).constant = \ (((char*)CT_CONSTANT_EX(op_array, (node).constant)) - \ ((char*)opline)); \ } while (0) #endif /* convert constant back from run-time to compile-time */ #define ZEND_PASS_TWO_UNDO_CONSTANT(op_array, opline, node) do { \ (node).constant = RT_CONSTANT(opline, node) - (op_array)->literals; \ } while (0) #if ZEND_EX_USE_RUN_TIME_CACHE # define EX_RUN_TIME_CACHE() \ EX(run_time_cache) # define EX_LOAD_RUN_TIME_CACHE(op_array) do { \ EX(run_time_cache) = (op_array)->run_time_cache; \ } while (0) #else # define EX_RUN_TIME_CACHE() \ EX(func)->op_array.run_time_cache # define EX_LOAD_RUN_TIME_CACHE(op_array) do { \ } while (0) #endif #define IS_UNUSED 0 /* Unused operand */ #define IS_CONST (1<<0) #define IS_TMP_VAR (1<<1) #define IS_VAR (1<<2) #define IS_CV (1<<3) /* Compiled variable */ #define ZEND_EXTRA_VALUE 1 #include "zend_globals.h" BEGIN_EXTERN_C() void init_compiler(void); void shutdown_compiler(void); void zend_init_compiler_data_structures(void); void zend_oparray_context_begin(zend_oparray_context *prev_context); void zend_oparray_context_end(zend_oparray_context *prev_context); void zend_file_context_begin(zend_file_context *prev_context); void zend_file_context_end(zend_file_context *prev_context); extern ZEND_API zend_op_array *(*zend_compile_file)(zend_file_handle *file_handle, int type); extern ZEND_API zend_op_array *(*zend_compile_string)(zval *source_string, char *filename); ZEND_API int ZEND_FASTCALL lex_scan(zval *zendlval, zend_parser_stack_elem *elem); void startup_scanner(void); void shutdown_scanner(void); ZEND_API zend_string *zend_set_compiled_filename(zend_string *new_compiled_filename); ZEND_API void zend_restore_compiled_filename(zend_string *original_compiled_filename); ZEND_API zend_string *zend_get_compiled_filename(void); ZEND_API int zend_get_compiled_lineno(void); ZEND_API size_t zend_get_scanned_file_offset(void); ZEND_API zend_string *zend_get_compiled_variable_name(const zend_op_array *op_array, uint32_t var); #ifdef ZTS const char *zend_get_zendtext(void); int zend_get_zendleng(void); #endif typedef int (ZEND_FASTCALL *unary_op_type)(zval *, zval *); typedef int (ZEND_FASTCALL *binary_op_type)(zval *, zval *, zval *); ZEND_API unary_op_type get_unary_op(int opcode); ZEND_API binary_op_type get_binary_op(int opcode); void zend_stop_lexing(void); void zend_emit_final_return(int return_one); /* Used during AST construction */ zend_ast *zend_ast_append_str(zend_ast *left, zend_ast *right); zend_ast *zend_negate_num_string(zend_ast *ast); uint32_t zend_add_class_modifier(uint32_t flags, uint32_t new_flag); uint32_t zend_add_member_modifier(uint32_t flags, uint32_t new_flag); zend_bool zend_handle_encoding_declaration(zend_ast *ast); /* parser-driven code generators */ void zend_do_free(znode *op1); ZEND_API int do_bind_function(const zend_op_array *op_array, const zend_op *opline, HashTable *function_table, zend_bool compile_time); ZEND_API zend_class_entry *do_bind_class(const zend_op_array *op_array, const zend_op *opline, HashTable *class_table, zend_bool compile_time); ZEND_API zend_class_entry *do_bind_inherited_class(const zend_op_array *op_array, const zend_op *opline, HashTable *class_table, zend_class_entry *parent_ce, zend_bool compile_time); ZEND_API uint32_t zend_build_delayed_early_binding_list(const zend_op_array *op_array); ZEND_API void zend_do_delayed_early_binding(const zend_op_array *op_array, uint32_t first_early_binding_opline); void zend_do_extended_info(void); void zend_do_extended_fcall_begin(void); void zend_do_extended_fcall_end(void); void zend_verify_namespace(void); void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline); ZEND_API void function_add_ref(zend_function *function); #define INITIAL_OP_ARRAY_SIZE 64 /* helper functions in zend_language_scanner.l */ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type); ZEND_API zend_op_array *compile_string(zval *source_string, char *filename); ZEND_API zend_op_array *compile_filename(int type, zval *filename); ZEND_API void zend_try_exception_handler(); ZEND_API int zend_execute_scripts(int type, zval *retval, int file_count, ...); ZEND_API int open_file_for_scanning(zend_file_handle *file_handle); ZEND_API void init_op_array(zend_op_array *op_array, zend_uchar type, int initial_ops_size); ZEND_API void destroy_op_array(zend_op_array *op_array); ZEND_API void zend_destroy_file_handle(zend_file_handle *file_handle); ZEND_API void zend_cleanup_internal_class_data(zend_class_entry *ce); ZEND_API void zend_cleanup_internal_classes(void); ZEND_API void destroy_zend_function(zend_function *function); ZEND_API void zend_function_dtor(zval *zv); ZEND_API void destroy_zend_class(zval *zv); void zend_class_add_ref(zval *zv); ZEND_API zend_string *zend_mangle_property_name(const char *src1, size_t src1_length, const char *src2, size_t src2_length, int internal); #define zend_unmangle_property_name(mangled_property, class_name, prop_name) \ zend_unmangle_property_name_ex(mangled_property, class_name, prop_name, NULL) ZEND_API int zend_unmangle_property_name_ex(const zend_string *name, const char **class_name, const char **prop_name, size_t *prop_len); #define ZEND_FUNCTION_DTOR zend_function_dtor #define ZEND_CLASS_DTOR destroy_zend_class ZEND_API int pass_two(zend_op_array *op_array); ZEND_API zend_bool zend_is_compiling(void); ZEND_API char *zend_make_compiled_string_description(const char *name); ZEND_API void zend_initialize_class_data(zend_class_entry *ce, zend_bool nullify_handlers); uint32_t zend_get_class_fetch_type(zend_string *name); ZEND_API zend_uchar zend_get_call_op(const zend_op *init_op, zend_function *fbc); ZEND_API int zend_is_smart_branch(zend_op *opline); static zend_always_inline uint32_t get_next_op_number(zend_op_array *op_array) { return op_array->last; } typedef zend_bool (*zend_auto_global_callback)(zend_string *name); typedef struct _zend_auto_global { zend_string *name; zend_auto_global_callback auto_global_callback; zend_bool jit; zend_bool armed; } zend_auto_global; ZEND_API int zend_register_auto_global(zend_string *name, zend_bool jit, zend_auto_global_callback auto_global_callback); ZEND_API void zend_activate_auto_globals(void); ZEND_API zend_bool zend_is_auto_global(zend_string *name); ZEND_API zend_bool zend_is_auto_global_str(char *name, size_t len); ZEND_API size_t zend_dirname(char *path, size_t len); ZEND_API void zend_set_function_arg_flags(zend_function *func); int ZEND_FASTCALL zendlex(zend_parser_stack_elem *elem); int zend_add_literal(zend_op_array *op_array, zval *zv); void zend_assert_valid_class_name(const zend_string *const_name); /* BEGIN: OPCODES */ #include "zend_vm_opcodes.h" /* END: OPCODES */ /* class fetches */ #define ZEND_FETCH_CLASS_DEFAULT 0 #define ZEND_FETCH_CLASS_SELF 1 #define ZEND_FETCH_CLASS_PARENT 2 #define ZEND_FETCH_CLASS_STATIC 3 #define ZEND_FETCH_CLASS_AUTO 4 #define ZEND_FETCH_CLASS_INTERFACE 5 #define ZEND_FETCH_CLASS_TRAIT 6 #define ZEND_FETCH_CLASS_MASK 0x0f #define ZEND_FETCH_CLASS_NO_AUTOLOAD 0x80 #define ZEND_FETCH_CLASS_SILENT 0x0100 #define ZEND_FETCH_CLASS_EXCEPTION 0x0200 #define ZEND_PARAM_REF (1<<0) #define ZEND_PARAM_VARIADIC (1<<1) #define ZEND_NAME_FQ 0 #define ZEND_NAME_NOT_FQ 1 #define ZEND_NAME_RELATIVE 2 #define ZEND_TYPE_NULLABLE (1<<8) #define ZEND_ARRAY_SYNTAX_LIST 1 /* list() */ #define ZEND_ARRAY_SYNTAX_LONG 2 /* array() */ #define ZEND_ARRAY_SYNTAX_SHORT 3 /* [] */ /* var status for backpatching */ #define BP_VAR_R 0 #define BP_VAR_W 1 #define BP_VAR_RW 2 #define BP_VAR_IS 3 #define BP_VAR_FUNC_ARG 4 #define BP_VAR_UNSET 5 #define ZEND_INTERNAL_FUNCTION 1 #define ZEND_USER_FUNCTION 2 #define ZEND_OVERLOADED_FUNCTION 3 #define ZEND_EVAL_CODE 4 #define ZEND_OVERLOADED_FUNCTION_TEMPORARY 5 /* A quick check (type == ZEND_USER_FUNCTION || type == ZEND_EVAL_CODE) */ #define ZEND_USER_CODE(type) ((type & 1) == 0) #define ZEND_INTERNAL_CLASS 1 #define ZEND_USER_CLASS 2 #define ZEND_EVAL (1<<0) #define ZEND_INCLUDE (1<<1) #define ZEND_INCLUDE_ONCE (1<<2) #define ZEND_REQUIRE (1<<3) #define ZEND_REQUIRE_ONCE (1<<4) #define ZEND_CT (1<<0) #define ZEND_RT (1<<1) /* global/local fetches */ #define ZEND_FETCH_GLOBAL (1<<1) #define ZEND_FETCH_LOCAL (1<<2) #define ZEND_FETCH_GLOBAL_LOCK (1<<3) #define ZEND_FETCH_TYPE_MASK 0xe #define ZEND_ISEMPTY (1<<0) #define ZEND_LAST_CATCH (1<<0) #define ZEND_FREE_ON_RETURN (1<<0) #define ZEND_SEND_BY_VAL 0 #define ZEND_SEND_BY_REF 1 #define ZEND_SEND_PREFER_REF 2 #define ZEND_DIM_IS 1 #define IS_CONSTANT_UNQUALIFIED 0x010 #define IS_CONSTANT_CLASS 0x080 /* __CLASS__ in trait */ #define IS_CONSTANT_IN_NAMESPACE 0x100 static zend_always_inline int zend_check_arg_send_type(const zend_function *zf, uint32_t arg_num, uint32_t mask) { arg_num--; if (UNEXPECTED(arg_num >= zf->common.num_args)) { if (EXPECTED((zf->common.fn_flags & ZEND_ACC_VARIADIC) == 0)) { return 0; } arg_num = zf->common.num_args; } return UNEXPECTED((zf->common.arg_info[arg_num].pass_by_reference & mask) != 0); } #define ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \ zend_check_arg_send_type(zf, arg_num, ZEND_SEND_BY_REF) #define ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \ zend_check_arg_send_type(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF) #define ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \ zend_check_arg_send_type(zf, arg_num, ZEND_SEND_PREFER_REF) /* Quick API to check firat 12 arguments */ #define MAX_ARG_FLAG_NUM 12 #ifdef WORDS_BIGENDIAN # define ZEND_SET_ARG_FLAG(zf, arg_num, mask) do { \ (zf)->quick_arg_flags |= ((mask) << ((arg_num) - 1) * 2); \ } while (0) # define ZEND_CHECK_ARG_FLAG(zf, arg_num, mask) \ (((zf)->quick_arg_flags >> (((arg_num) - 1) * 2)) & (mask)) #else # define ZEND_SET_ARG_FLAG(zf, arg_num, mask) do { \ (zf)->quick_arg_flags |= (((mask) << 6) << (arg_num) * 2); \ } while (0) # define ZEND_CHECK_ARG_FLAG(zf, arg_num, mask) \ (((zf)->quick_arg_flags >> (((arg_num) + 3) * 2)) & (mask)) #endif #define QUICK_ARG_MUST_BE_SENT_BY_REF(zf, arg_num) \ ZEND_CHECK_ARG_FLAG(zf, arg_num, ZEND_SEND_BY_REF) #define QUICK_ARG_SHOULD_BE_SENT_BY_REF(zf, arg_num) \ ZEND_CHECK_ARG_FLAG(zf, arg_num, ZEND_SEND_BY_REF|ZEND_SEND_PREFER_REF) #define QUICK_ARG_MAY_BE_SENT_BY_REF(zf, arg_num) \ ZEND_CHECK_ARG_FLAG(zf, arg_num, ZEND_SEND_PREFER_REF) #define ZEND_RETURN_VAL 0 #define ZEND_RETURN_REF 1 #define ZEND_BIND_VAL 0 #define ZEND_BIND_REF 1 #define ZEND_RETURNS_FUNCTION (1<<0) #define ZEND_RETURNS_VALUE (1<<1) #define ZEND_ARRAY_ELEMENT_REF (1<<0) #define ZEND_ARRAY_NOT_PACKED (1<<1) #define ZEND_ARRAY_SIZE_SHIFT 2 /* For "use" AST nodes and the seen symbol table */ #define ZEND_SYMBOL_CLASS (1<<0) #define ZEND_SYMBOL_FUNCTION (1<<1) #define ZEND_SYMBOL_CONST (1<<2) /* Pseudo-opcodes that are used only temporarily during compilation */ #define ZEND_GOTO 253 #define ZEND_BRK 254 #define ZEND_CONT 255 END_EXTERN_C() #define ZEND_CLONE_FUNC_NAME "__clone" #define ZEND_CONSTRUCTOR_FUNC_NAME "__construct" #define ZEND_DESTRUCTOR_FUNC_NAME "__destruct" #define ZEND_GET_FUNC_NAME "__get" #define ZEND_SET_FUNC_NAME "__set" #define ZEND_UNSET_FUNC_NAME "__unset" #define ZEND_ISSET_FUNC_NAME "__isset" #define ZEND_CALL_FUNC_NAME "__call" #define ZEND_CALLSTATIC_FUNC_NAME "__callstatic" #define ZEND_TOSTRING_FUNC_NAME "__tostring" #define ZEND_AUTOLOAD_FUNC_NAME "__autoload" #define ZEND_INVOKE_FUNC_NAME "__invoke" #define ZEND_DEBUGINFO_FUNC_NAME "__debuginfo" /* The following constants may be combined in CG(compiler_options) * to change the default compiler behavior */ /* generate extended debug information */ #define ZEND_COMPILE_EXTENDED_INFO (1<<0) /* call op_array handler of extendions */ #define ZEND_COMPILE_HANDLE_OP_ARRAY (1<<1) /* generate ZEND_INIT_FCALL_BY_NAME for internal functions instead of ZEND_INIT_FCALL */ #define ZEND_COMPILE_IGNORE_INTERNAL_FUNCTIONS (1<<2) /* don't perform early binding for classes inherited form internal ones; * in namespaces assume that internal class that doesn't exist at compile-time * may apper in run-time */ #define ZEND_COMPILE_IGNORE_INTERNAL_CLASSES (1<<3) /* generate ZEND_DECLARE_INHERITED_CLASS_DELAYED opcode to delay early binding */ #define ZEND_COMPILE_DELAYED_BINDING (1<<4) /* disable constant substitution at compile-time */ #define ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION (1<<5) /* disable usage of builtin instruction for strlen() */ #define ZEND_COMPILE_NO_BUILTIN_STRLEN (1<<6) /* disable substitution of persistent constants at compile-time */ #define ZEND_COMPILE_NO_PERSISTENT_CONSTANT_SUBSTITUTION (1<<7) /* generate ZEND_INIT_FCALL_BY_NAME for userland functions instead of ZEND_INIT_FCALL */ #define ZEND_COMPILE_IGNORE_USER_FUNCTIONS (1<<8) /* force ZEND_ACC_USE_GUARDS for all classes */ #define ZEND_COMPILE_GUARDS (1<<9) /* disable builtin special case function calls */ #define ZEND_COMPILE_NO_BUILTINS (1<<10) /* result of compilation may be stored in file cache */ #define ZEND_COMPILE_WITH_FILE_CACHE (1<<11) /* disable jumptable optimization for switch statements */ #define ZEND_COMPILE_NO_JUMPTABLES (1<<12) /* The default value for CG(compiler_options) */ #define ZEND_COMPILE_DEFAULT ZEND_COMPILE_HANDLE_OP_ARRAY /* The default value for CG(compiler_options) during eval() */ #define ZEND_COMPILE_DEFAULT_FOR_EVAL 0 ZEND_API zend_bool zend_binary_op_produces_numeric_string_error(uint32_t opcode, zval *op1, zval *op2); #endif /* ZEND_COMPILE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!UN N Zend/zend_range_check.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Anatol Belski | +----------------------------------------------------------------------+ */ #ifndef ZEND_RANGE_CHECK_H #define ZEND_RANGE_CHECK_H #include "zend_long.h" /* Flag macros for basic range recognition. Notable is that always sizeof(signed) == sizeof(unsigned), so no need to overcomplicate things. */ #if SIZEOF_INT < SIZEOF_ZEND_LONG # define ZEND_LONG_CAN_OVFL_INT 1 # define ZEND_LONG_CAN_OVFL_UINT 1 #endif #if SIZEOF_INT < SIZEOF_SIZE_T /* size_t can always overflow signed int on the same platform. Furthermore, by the current design, size_t can always overflow zend_long. */ # define ZEND_SIZE_T_CAN_OVFL_UINT 1 #endif /* zend_long vs. (unsigned) int checks. */ #ifdef ZEND_LONG_CAN_OVFL_INT # define ZEND_LONG_INT_OVFL(zlong) UNEXPECTED((zlong) > (zend_long)INT_MAX) # define ZEND_LONG_INT_UDFL(zlong) UNEXPECTED((zlong) < (zend_long)INT_MIN) # define ZEND_LONG_EXCEEDS_INT(zlong) UNEXPECTED(ZEND_LONG_INT_OVFL(zlong) || ZEND_LONG_INT_UDFL(zlong)) # define ZEND_LONG_UINT_OVFL(zlong) UNEXPECTED((zlong) < 0 || (zlong) > (zend_long)UINT_MAX) #else # define ZEND_LONG_INT_OVFL(zl) (0) # define ZEND_LONG_INT_UDFL(zl) (0) # define ZEND_LONG_EXCEEDS_INT(zlong) (0) # define ZEND_LONG_UINT_OVFL(zl) (0) #endif /* size_t vs (unsigned) int checks. */ #define ZEND_SIZE_T_INT_OVFL(size) UNEXPECTED((size) > (size_t)INT_MAX) #ifdef ZEND_SIZE_T_CAN_OVFL_UINT # define ZEND_SIZE_T_UINT_OVFL(size) UNEXPECTED((size) > (size_t)UINT_MAX) #else # define ZEND_SIZE_T_UINT_OVFL(size) (0) #endif /* Comparison zend_long vs size_t */ #define ZEND_SIZE_T_GT_ZEND_LONG(size, zlong) ((zlong) < 0 || (size) > (size_t)(zlong)) #define ZEND_SIZE_T_GTE_ZEND_LONG(size, zlong) ((zlong) < 0 || (size) >= (size_t)(zlong)) #define ZEND_SIZE_T_LT_ZEND_LONG(size, zlong) ((zlong) >= 0 && (size) < (size_t)(zlong)) #define ZEND_SIZE_T_LTE_ZEND_LONG(size, zlong) ((zlong) >= 0 && (size) <= (size_t)(zlong)) #endif /* ZEND_RANGE_CHECK_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK! _Zend/zend_sort.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Xinchen Hui | | Sterling Hughes | +----------------------------------------------------------------------+ */ #ifndef ZEND_SORT_H #define ZEND_SORT_H BEGIN_EXTERN_C() ZEND_API void zend_qsort(void *base, size_t nmemb, size_t siz, compare_func_t cmp, swap_func_t swp); ZEND_API void zend_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp, swap_func_t swp); ZEND_API void zend_insert_sort(void *base, size_t nmemb, size_t siz, compare_func_t cmp, swap_func_t swp); END_EXTERN_C() #endif /* ZEND_SORT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!/M''Zend/zend_dtrace.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2009 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: David Soria Parra | +----------------------------------------------------------------------+ */ #ifndef _ZEND_DTRACE_H #define _ZEND_DTRACE_H #ifndef ZEND_WIN32 # include #endif #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_DTRACE ZEND_API extern zend_op_array *(*zend_dtrace_compile_file)(zend_file_handle *file_handle, int type); ZEND_API extern void (*zend_dtrace_execute)(zend_op_array *op_array); ZEND_API extern void (*zend_dtrace_execute_internal)(zend_execute_data *execute_data, zval *return_value); ZEND_API zend_op_array *dtrace_compile_file(zend_file_handle *file_handle, int type); ZEND_API void dtrace_execute_ex(zend_execute_data *execute_data); ZEND_API void dtrace_execute_internal(zend_execute_data *execute_data, zval *return_value); #include #endif /* HAVE_DTRACE */ #ifdef __cplusplus } #endif #endif /* _ZEND_DTRACE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!I&q q Zend/zend_variables.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_VARIABLES_H #define ZEND_VARIABLES_H #include "zend_types.h" #include "zend_gc.h" BEGIN_EXTERN_C() ZEND_API void ZEND_FASTCALL rc_dtor_func(zend_refcounted *p); ZEND_API void ZEND_FASTCALL zval_copy_ctor_func(zval *zvalue); static zend_always_inline void zval_ptr_dtor_nogc(zval *zval_ptr) { if (Z_REFCOUNTED_P(zval_ptr) && !Z_DELREF_P(zval_ptr)) { rc_dtor_func(Z_COUNTED_P(zval_ptr)); } } static zend_always_inline void i_zval_ptr_dtor(zval *zval_ptr ZEND_FILE_LINE_DC) { if (Z_REFCOUNTED_P(zval_ptr)) { zend_refcounted *ref = Z_COUNTED_P(zval_ptr); if (!GC_DELREF(ref)) { rc_dtor_func(ref); } else { gc_check_possible_root(ref); } } } static zend_always_inline void zval_copy_ctor(zval *zvalue) { if (Z_TYPE_P(zvalue) == IS_ARRAY) { ZVAL_ARR(zvalue, zend_array_dup(Z_ARR_P(zvalue))); } else if (Z_REFCOUNTED_P(zvalue)) { Z_ADDREF_P(zvalue); } } static zend_always_inline void zval_opt_copy_ctor(zval *zvalue) { if (Z_OPT_TYPE_P(zvalue) == IS_ARRAY) { ZVAL_ARR(zvalue, zend_array_dup(Z_ARR_P(zvalue))); } else if (Z_OPT_REFCOUNTED_P(zvalue)) { Z_ADDREF_P(zvalue); } } static zend_always_inline void zval_ptr_dtor_str(zval *zval_ptr) { if (Z_REFCOUNTED_P(zval_ptr) && !Z_DELREF_P(zval_ptr)) { ZEND_ASSERT(Z_TYPE_P(zval_ptr) == IS_STRING); ZEND_ASSERT(!ZSTR_IS_INTERNED(Z_STR_P(zval_ptr))); ZEND_ASSERT(!(GC_FLAGS(Z_STR_P(zval_ptr)) & IS_STR_PERSISTENT)); efree(Z_STR_P(zval_ptr)); } } ZEND_API void zval_ptr_dtor(zval *zval_ptr); ZEND_API void zval_internal_ptr_dtor(zval *zvalue); /* Kept for compatibility */ #define zval_dtor(zvalue) zval_ptr_dtor_nogc(zvalue) #define zval_internal_dtor(zvalue) zval_internal_ptr_dtor(zvalue) #define zval_dtor_func rc_dtor_func #define zval_ptr_dtor_wrapper zval_ptr_dtor #define zval_internal_ptr_dtor_wrapper zval_internal_ptr_dtor ZEND_API void zval_add_ref(zval *p); END_EXTERN_C() #define ZVAL_PTR_DTOR zval_ptr_dtor #define ZVAL_INTERNAL_PTR_DTOR zval_internal_ptr_dtor #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!r.v v Zend/zend_stream.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Wez Furlong | | Scott MacVicar | | Nuno Lopes | | Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef ZEND_STREAM_H #define ZEND_STREAM_H #include #include /* Lightweight stream implementation for the ZE scanners. * These functions are private to the engine. * */ typedef size_t (*zend_stream_fsizer_t)(void* handle); typedef size_t (*zend_stream_reader_t)(void* handle, char *buf, size_t len); typedef void (*zend_stream_closer_t)(void* handle); #define ZEND_MMAP_AHEAD 32 typedef enum { ZEND_HANDLE_FILENAME, ZEND_HANDLE_FD, ZEND_HANDLE_FP, ZEND_HANDLE_STREAM, ZEND_HANDLE_MAPPED } zend_stream_type; typedef struct _zend_mmap { size_t len; size_t pos; void *map; char *buf; void *old_handle; zend_stream_closer_t old_closer; } zend_mmap; typedef struct _zend_stream { void *handle; int isatty; zend_mmap mmap; zend_stream_reader_t reader; zend_stream_fsizer_t fsizer; zend_stream_closer_t closer; } zend_stream; typedef struct _zend_file_handle { union { int fd; FILE *fp; zend_stream stream; } handle; const char *filename; zend_string *opened_path; zend_stream_type type; zend_bool free_filename; } zend_file_handle; BEGIN_EXTERN_C() ZEND_API int zend_stream_open(const char *filename, zend_file_handle *handle); ZEND_API int zend_stream_fixup(zend_file_handle *file_handle, char **buf, size_t *len); ZEND_API void zend_file_handle_dtor(zend_file_handle *fh); ZEND_API int zend_compare_file_handles(zend_file_handle *fh1, zend_file_handle *fh2); END_EXTERN_C() #ifdef _WIN64 # define zend_fseek _fseeki64 # define zend_ftell _ftelli64 # define zend_lseek _lseeki64 # define zend_fstat _fstat64 # define zend_stat _stat64 typedef struct __stat64 zend_stat_t; #else # define zend_fseek fseek # define zend_ftell ftell # define zend_lseek lseek # define zend_fstat fstat # define zend_stat stat typedef struct stat zend_stat_t; #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!7%AAZend/zend_strtod_int.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Anatol Belski | +----------------------------------------------------------------------+ */ #ifndef ZEND_STRTOD_INT_H #define ZEND_STRTOD_INT_H #ifdef ZTS #include #endif #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif /* TODO check to undef this option, this might make more perf. destroy_freelist() should be adapted then. */ #define Omit_Private_Memory 1 /* HEX strings aren't supported as per https://wiki.php.net/rfc/remove_hex_support_in_numeric_strings */ #define NO_HEX_FP 1 #if defined(HAVE_INTTYPES_H) #include #elif defined(HAVE_STDINT_H) #include #endif #ifndef HAVE_INT32_T # if SIZEOF_INT == 4 typedef int int32_t; # elif SIZEOF_LONG == 4 typedef long int int32_t; # endif #endif #ifndef HAVE_UINT32_T # if SIZEOF_INT == 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG == 4 typedef unsigned long int uint32_t; # endif #endif #ifdef USE_LOCALE #undef USE_LOCALE #endif #ifndef NO_INFNAN_CHECK #define NO_INFNAN_CHECK #endif #ifndef NO_ERRNO #define NO_ERRNO #endif #ifdef WORDS_BIGENDIAN #define IEEE_BIG_ENDIAN 1 #else #define IEEE_LITTLE_ENDIAN 1 #endif #if (defined(__APPLE__) || defined(__APPLE_CC__)) && (defined(__BIG_ENDIAN__) || defined(__LITTLE_ENDIAN__)) # if defined(__LITTLE_ENDIAN__) # undef WORDS_BIGENDIAN # else # if defined(__BIG_ENDIAN__) # define WORDS_BIGENDIAN # endif # endif #endif #if defined(__arm__) && !defined(__VFP_FP__) /* * * Although the CPU is little endian the FP has different * * byte and word endianness. The byte order is still little endian * * but the word order is big endian. * */ #define IEEE_BIG_ENDIAN #undef IEEE_LITTLE_ENDIAN #endif #ifdef __vax__ #define VAX #undef IEEE_LITTLE_ENDIAN #endif #ifdef IEEE_LITTLE_ENDIAN #define IEEE_8087 1 #endif #ifdef IEEE_BIG_ENDIAN #define IEEE_MC68k 1 #endif #if defined(_MSC_VER) #ifndef int32_t #define int32_t __int32 #endif #ifndef uint32_t #define uint32_t unsigned __int32 #endif #endif #ifdef ZTS #define MULTIPLE_THREADS 1 #define ACQUIRE_DTOA_LOCK(x) \ if (0 == x) { \ tsrm_mutex_lock(dtoa_mutex); \ } else if (1 == x) { \ tsrm_mutex_lock(pow5mult_mutex); \ } #define FREE_DTOA_LOCK(x) \ if (0 == x) { \ tsrm_mutex_unlock(dtoa_mutex); \ } else if (1 == x) { \ tsrm_mutex_unlock(pow5mult_mutex); \ } #endif #endif /* ZEND_STRTOD_INT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!s-k Zend/zend_type_info.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_TYPE_INFO_H #define ZEND_TYPE_INFO_H #include "zend_types.h" #define MAY_BE_UNDEF (1 << IS_UNDEF) #define MAY_BE_NULL (1 << IS_NULL) #define MAY_BE_FALSE (1 << IS_FALSE) #define MAY_BE_TRUE (1 << IS_TRUE) #define MAY_BE_LONG (1 << IS_LONG) #define MAY_BE_DOUBLE (1 << IS_DOUBLE) #define MAY_BE_STRING (1 << IS_STRING) #define MAY_BE_ARRAY (1 << IS_ARRAY) #define MAY_BE_OBJECT (1 << IS_OBJECT) #define MAY_BE_RESOURCE (1 << IS_RESOURCE) #define MAY_BE_ANY (MAY_BE_NULL|MAY_BE_FALSE|MAY_BE_TRUE|MAY_BE_LONG|MAY_BE_DOUBLE|MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_OBJECT|MAY_BE_RESOURCE) #define MAY_BE_REF (1 << IS_REFERENCE) /* may be reference */ #define MAY_BE_ARRAY_SHIFT (IS_REFERENCE) #define MAY_BE_ARRAY_OF_NULL (MAY_BE_NULL << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_FALSE (MAY_BE_FALSE << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_TRUE (MAY_BE_TRUE << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_LONG (MAY_BE_LONG << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_DOUBLE (MAY_BE_DOUBLE << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_STRING (MAY_BE_STRING << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_ARRAY (MAY_BE_ARRAY << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_OBJECT (MAY_BE_OBJECT << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_RESOURCE (MAY_BE_RESOURCE << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_ANY (MAY_BE_ANY << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_OF_REF (MAY_BE_REF << MAY_BE_ARRAY_SHIFT) #define MAY_BE_ARRAY_KEY_LONG (1<<21) #define MAY_BE_ARRAY_KEY_STRING (1<<22) #define MAY_BE_ARRAY_KEY_ANY (MAY_BE_ARRAY_KEY_LONG | MAY_BE_ARRAY_KEY_STRING) #define MAY_BE_ERROR (1<<23) #define MAY_BE_CLASS (1<<24) #endif /* ZEND_TYPE_INFO_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!Ş^ddZend/zend_llist.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_LLIST_H #define ZEND_LLIST_H typedef struct _zend_llist_element { struct _zend_llist_element *next; struct _zend_llist_element *prev; char data[1]; /* Needs to always be last in the struct */ } zend_llist_element; typedef void (*llist_dtor_func_t)(void *); typedef int (*llist_compare_func_t)(const zend_llist_element **, const zend_llist_element **); typedef void (*llist_apply_with_args_func_t)(void *data, int num_args, va_list args); typedef void (*llist_apply_with_arg_func_t)(void *data, void *arg); typedef void (*llist_apply_func_t)(void *); typedef struct _zend_llist { zend_llist_element *head; zend_llist_element *tail; size_t count; size_t size; llist_dtor_func_t dtor; unsigned char persistent; zend_llist_element *traverse_ptr; } zend_llist; typedef zend_llist_element* zend_llist_position; BEGIN_EXTERN_C() ZEND_API void zend_llist_init(zend_llist *l, size_t size, llist_dtor_func_t dtor, unsigned char persistent); ZEND_API void zend_llist_add_element(zend_llist *l, void *element); ZEND_API void zend_llist_prepend_element(zend_llist *l, void *element); ZEND_API void zend_llist_del_element(zend_llist *l, void *element, int (*compare)(void *element1, void *element2)); ZEND_API void zend_llist_destroy(zend_llist *l); ZEND_API void zend_llist_clean(zend_llist *l); ZEND_API void zend_llist_remove_tail(zend_llist *l); ZEND_API void zend_llist_copy(zend_llist *dst, zend_llist *src); ZEND_API void zend_llist_apply(zend_llist *l, llist_apply_func_t func); ZEND_API void zend_llist_apply_with_del(zend_llist *l, int (*func)(void *data)); ZEND_API void zend_llist_apply_with_argument(zend_llist *l, llist_apply_with_arg_func_t func, void *arg); ZEND_API void zend_llist_apply_with_arguments(zend_llist *l, llist_apply_with_args_func_t func, int num_args, ...); ZEND_API size_t zend_llist_count(zend_llist *l); ZEND_API void zend_llist_sort(zend_llist *l, llist_compare_func_t comp_func); /* traversal */ ZEND_API void *zend_llist_get_first_ex(zend_llist *l, zend_llist_position *pos); ZEND_API void *zend_llist_get_last_ex(zend_llist *l, zend_llist_position *pos); ZEND_API void *zend_llist_get_next_ex(zend_llist *l, zend_llist_position *pos); ZEND_API void *zend_llist_get_prev_ex(zend_llist *l, zend_llist_position *pos); #define zend_llist_get_first(l) zend_llist_get_first_ex(l, NULL) #define zend_llist_get_last(l) zend_llist_get_last_ex(l, NULL) #define zend_llist_get_next(l) zend_llist_get_next_ex(l, NULL) #define zend_llist_get_prev(l) zend_llist_get_prev_ex(l, NULL) END_EXTERN_C() #endif /* ZEND_LLIST_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!cssZend/zend_bitset.hnu[/* +----------------------------------------------------------------------+ | Zend OPcache JIT | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef _ZEND_BITSET_H_ #define _ZEND_BITSET_H_ typedef zend_ulong *zend_bitset; #define ZEND_BITSET_ELM_SIZE sizeof(zend_ulong) #if SIZEOF_ZEND_LONG == 4 # define ZEND_BITSET_ELM_NUM(n) ((n) >> 5) # define ZEND_BITSET_BIT_NUM(n) ((zend_ulong)(n) & Z_UL(0x1f)) #elif SIZEOF_ZEND_LONG == 8 # define ZEND_BITSET_ELM_NUM(n) ((n) >> 6) # define ZEND_BITSET_BIT_NUM(n) ((zend_ulong)(n) & Z_UL(0x3f)) #else # define ZEND_BITSET_ELM_NUM(n) ((n) / (sizeof(zend_long) * 8)) # define ZEND_BITSET_BIT_NUM(n) ((n) % (sizeof(zend_long) * 8)) #endif #define ZEND_BITSET_ALLOCA(n, use_heap) \ (zend_bitset)do_alloca((n) * ZEND_BITSET_ELM_SIZE, use_heap) /* Number of trailing zero bits (0x01 -> 0; 0x40 -> 6; 0x00 -> LEN) */ static zend_always_inline int zend_ulong_ntz(zend_ulong num) { #if (defined(__GNUC__) || __has_builtin(__builtin_ctzl)) \ && SIZEOF_ZEND_LONG == SIZEOF_LONG && defined(PHP_HAVE_BUILTIN_CTZL) return __builtin_ctzl(num); #elif (defined(__GNUC__) || __has_builtin(__builtin_ctzll)) && defined(PHP_HAVE_BUILTIN_CTZLL) return __builtin_ctzll(num); #elif defined(_WIN32) unsigned long index; #if defined(_WIN64) if (!BitScanForward64(&index, num)) { #else if (!BitScanForward(&index, num)) { #endif /* undefined behavior */ return SIZEOF_ZEND_LONG * 8; } return (int) index; #else int n; if (num == Z_UL(0)) return SIZEOF_ZEND_LONG * 8; n = 1; #if SIZEOF_ZEND_LONG == 8 if ((num & 0xffffffff) == 0) {n += 32; num = num >> Z_UL(32);} #endif if ((num & 0x0000ffff) == 0) {n += 16; num = num >> 16;} if ((num & 0x000000ff) == 0) {n += 8; num = num >> 8;} if ((num & 0x0000000f) == 0) {n += 4; num = num >> 4;} if ((num & 0x00000003) == 0) {n += 2; num = num >> 2;} return n - (num & 1); #endif } /* Returns the number of zend_ulong words needed to store a bitset that is N bits long. */ static inline uint32_t zend_bitset_len(uint32_t n) { return (n + ((sizeof(zend_long) * 8) - 1)) / (sizeof(zend_long) * 8); } static inline zend_bool zend_bitset_in(zend_bitset set, uint32_t n) { return ZEND_BIT_TEST(set, n); } static inline void zend_bitset_incl(zend_bitset set, uint32_t n) { set[ZEND_BITSET_ELM_NUM(n)] |= Z_UL(1) << ZEND_BITSET_BIT_NUM(n); } static inline void zend_bitset_excl(zend_bitset set, uint32_t n) { set[ZEND_BITSET_ELM_NUM(n)] &= ~(Z_UL(1) << ZEND_BITSET_BIT_NUM(n)); } static inline void zend_bitset_clear(zend_bitset set, uint32_t len) { memset(set, 0, len * ZEND_BITSET_ELM_SIZE); } static inline int zend_bitset_empty(zend_bitset set, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { if (set[i]) { return 0; } } return 1; } static inline void zend_bitset_fill(zend_bitset set, uint32_t len) { memset(set, 0xff, len * ZEND_BITSET_ELM_SIZE); } static inline zend_bool zend_bitset_equal(zend_bitset set1, zend_bitset set2, uint32_t len) { return memcmp(set1, set2, len * ZEND_BITSET_ELM_SIZE) == 0; } static inline void zend_bitset_copy(zend_bitset set1, zend_bitset set2, uint32_t len) { memcpy(set1, set2, len * ZEND_BITSET_ELM_SIZE); } static inline void zend_bitset_intersection(zend_bitset set1, zend_bitset set2, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { set1[i] &= set2[i]; } } static inline void zend_bitset_union(zend_bitset set1, zend_bitset set2, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { set1[i] |= set2[i]; } } static inline void zend_bitset_difference(zend_bitset set1, zend_bitset set2, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { set1[i] = set1[i] & ~set2[i]; } } static inline void zend_bitset_union_with_intersection(zend_bitset set1, zend_bitset set2, zend_bitset set3, zend_bitset set4, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { set1[i] = set2[i] | (set3[i] & set4[i]); } } static inline void zend_bitset_union_with_difference(zend_bitset set1, zend_bitset set2, zend_bitset set3, zend_bitset set4, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { set1[i] = set2[i] | (set3[i] & ~set4[i]); } } static inline zend_bool zend_bitset_subset(zend_bitset set1, zend_bitset set2, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { if (set1[i] & ~set2[i]) { return 0; } } return 1; } static inline int zend_bitset_first(zend_bitset set, uint32_t len) { uint32_t i; for (i = 0; i < len; i++) { if (set[i]) { return ZEND_BITSET_ELM_SIZE * 8 * i + zend_ulong_ntz(set[i]); } } return -1; /* empty set */ } static inline int zend_bitset_last(zend_bitset set, uint32_t len) { uint32_t i = len; while (i > 0) { i--; if (set[i]) { int j = ZEND_BITSET_ELM_SIZE * 8 * i - 1; zend_ulong x = set[i]; while (x != Z_UL(0)) { x = x >> Z_UL(1); j++; } return j; } } return -1; /* empty set */ } #define ZEND_BITSET_FOREACH(set, len, bit) do { \ zend_bitset _set = (set); \ uint32_t _i, _len = (len); \ for (_i = 0; _i < _len; _i++) { \ zend_ulong _x = _set[_i]; \ if (_x) { \ (bit) = ZEND_BITSET_ELM_SIZE * 8 * _i; \ for (; _x != 0; _x >>= Z_UL(1), (bit)++) { \ if (!(_x & Z_UL(1))) continue; #define ZEND_BITSET_REVERSE_FOREACH(set, len, bit) do { \ zend_bitset _set = (set); \ uint32_t _i = (len); \ zend_ulong _test = Z_UL(1) << (ZEND_BITSET_ELM_SIZE * 8 - 1); \ while (_i-- > 0) { \ zend_ulong _x = _set[_i]; \ if (_x) { \ (bit) = ZEND_BITSET_ELM_SIZE * 8 * (_i + 1) - 1; \ for (; _x != 0; _x <<= Z_UL(1), (bit)--) { \ if (!(_x & _test)) continue; \ #define ZEND_BITSET_FOREACH_END() \ } \ } \ } \ } while (0) static inline int zend_bitset_pop_first(zend_bitset set, uint32_t len) { int i = zend_bitset_first(set, len); if (i >= 0) { zend_bitset_excl(set, i); } return i; } #endif /* _ZEND_BITSET_H_ */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!/fĈ Zend/zend_gc.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: David Wang | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_GC_H #define ZEND_GC_H BEGIN_EXTERN_C() typedef struct _zend_gc_status { uint32_t runs; uint32_t collected; uint32_t threshold; uint32_t num_roots; } zend_gc_status; ZEND_API extern int (*gc_collect_cycles)(void); ZEND_API void ZEND_FASTCALL gc_possible_root(zend_refcounted *ref); ZEND_API void ZEND_FASTCALL gc_remove_from_buffer(zend_refcounted *ref); /* enable/disable automatic start of GC collection */ ZEND_API zend_bool gc_enable(zend_bool enable); ZEND_API zend_bool gc_enabled(void); /* enable/disable possible root additions */ ZEND_API zend_bool gc_protect(zend_bool protect); ZEND_API zend_bool gc_protected(void); /* The default implementation of the gc_collect_cycles callback. */ ZEND_API int zend_gc_collect_cycles(void); ZEND_API void zend_gc_get_status(zend_gc_status *status); void gc_globals_ctor(void); void gc_globals_dtor(void); void gc_reset(void); END_EXTERN_C() #define GC_REMOVE_FROM_BUFFER(p) do { \ zend_refcounted *_p = (zend_refcounted*)(p); \ if (GC_TYPE_INFO(_p) & GC_INFO_MASK) { \ gc_remove_from_buffer(_p); \ } \ } while (0) #define GC_MAY_LEAK(ref) \ ((GC_TYPE_INFO(ref) & \ (GC_INFO_MASK | (GC_COLLECTABLE << GC_FLAGS_SHIFT))) == \ (GC_COLLECTABLE << GC_FLAGS_SHIFT)) static zend_always_inline void gc_check_possible_root(zend_refcounted *ref) { if (GC_TYPE_INFO(ref) == IS_REFERENCE) { zval *zv = &((zend_reference*)ref)->val; if (!Z_REFCOUNTED_P(zv)) { return; } ref = Z_COUNTED_P(zv); } if (UNEXPECTED(GC_MAY_LEAK(ref))) { gc_possible_root(ref); } } #endif /* ZEND_GC_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!]+Zend/zend_extensions.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_EXTENSIONS_H #define ZEND_EXTENSIONS_H #include "zend_compile.h" #include "zend_build.h" /* The constants below are derived from ext/opcache/ZendAccelerator.h You can use the following macro to check the extension API version for compatibilities: #define ZEND_EXTENSION_API_NO_5_0_X 220040412 #define ZEND_EXTENSION_API_NO_5_1_X 220051025 #define ZEND_EXTENSION_API_NO_5_2_X 220060519 #define ZEND_EXTENSION_API_NO_5_3_X 220090626 #define ZEND_EXTENSION_API_NO_5_4_X 220100525 #define ZEND_EXTENSION_API_NO_5_5_X 220121212 #define ZEND_EXTENSION_API_NO_5_6_X 220131226 #define ZEND_EXTENSION_API_NO_7_0_X 320151012 #if ZEND_EXTENSION_API_NO < ZEND_EXTENSION_API_NO_5_5_X // do something for php versions lower than 5.5.x #endif */ /* The first number is the engine version and the rest is the date (YYYYMMDD). * This way engine 2/3 API no. is always greater than engine 1 API no.. */ #define ZEND_EXTENSION_API_NO 320180731 typedef struct _zend_extension_version_info { int zend_extension_api_no; char *build_id; } zend_extension_version_info; #define ZEND_EXTENSION_BUILD_ID "API" ZEND_TOSTR(ZEND_EXTENSION_API_NO) ZEND_BUILD_TS ZEND_BUILD_DEBUG ZEND_BUILD_SYSTEM ZEND_BUILD_EXTRA typedef struct _zend_extension zend_extension; /* Typedef's for zend_extension function pointers */ typedef int (*startup_func_t)(zend_extension *extension); typedef void (*shutdown_func_t)(zend_extension *extension); typedef void (*activate_func_t)(void); typedef void (*deactivate_func_t)(void); typedef void (*message_handler_func_t)(int message, void *arg); typedef void (*op_array_handler_func_t)(zend_op_array *op_array); typedef void (*statement_handler_func_t)(zend_execute_data *frame); typedef void (*fcall_begin_handler_func_t)(zend_execute_data *frame); typedef void (*fcall_end_handler_func_t)(zend_execute_data *frame); typedef void (*op_array_ctor_func_t)(zend_op_array *op_array); typedef void (*op_array_dtor_func_t)(zend_op_array *op_array); typedef size_t (*op_array_persist_calc_func_t)(zend_op_array *op_array); typedef size_t (*op_array_persist_func_t)(zend_op_array *op_array, void *mem); struct _zend_extension { char *name; char *version; char *author; char *URL; char *copyright; startup_func_t startup; shutdown_func_t shutdown; activate_func_t activate; deactivate_func_t deactivate; message_handler_func_t message_handler; op_array_handler_func_t op_array_handler; statement_handler_func_t statement_handler; fcall_begin_handler_func_t fcall_begin_handler; fcall_end_handler_func_t fcall_end_handler; op_array_ctor_func_t op_array_ctor; op_array_dtor_func_t op_array_dtor; int (*api_no_check)(int api_no); int (*build_id_check)(const char* build_id); op_array_persist_calc_func_t op_array_persist_calc; op_array_persist_func_t op_array_persist; void *reserved5; void *reserved6; void *reserved7; void *reserved8; DL_HANDLE handle; int resource_number; }; BEGIN_EXTERN_C() ZEND_API int zend_get_resource_handle(zend_extension *extension); ZEND_API void zend_extension_dispatch_message(int message, void *arg); END_EXTERN_C() #define ZEND_EXTMSG_NEW_EXTENSION 1 #define ZEND_EXTENSION() \ ZEND_EXT_API zend_extension_version_info extension_version_info = { ZEND_EXTENSION_API_NO, ZEND_EXTENSION_BUILD_ID } #define STANDARD_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1 #define COMPAT_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1 #define BUILD_COMPAT_ZEND_EXTENSION_PROPERTIES NULL, NULL, NULL, NULL, NULL, NULL, NULL, -1 ZEND_API extern zend_llist zend_extensions; ZEND_API extern uint32_t zend_extension_flags; #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_CTOR (1<<0) #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_DTOR (1<<1) #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_HANDLER (1<<2) #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_PERSIST_CALC (1<<3) #define ZEND_EXTENSIONS_HAVE_OP_ARRAY_PERSIST (1<<4) void zend_extension_dtor(zend_extension *extension); ZEND_API void zend_append_version_info(const zend_extension *extension); int zend_startup_extensions_mechanism(void); int zend_startup_extensions(void); void zend_shutdown_extensions(void); BEGIN_EXTERN_C() ZEND_API int zend_load_extension(const char *path); ZEND_API int zend_load_extension_handle(DL_HANDLE handle, const char *path); ZEND_API int zend_register_extension(zend_extension *new_extension, DL_HANDLE handle); ZEND_API zend_extension *zend_get_extension(const char *extension_name); ZEND_API size_t zend_extensions_op_array_persist_calc(zend_op_array *op_array); ZEND_API size_t zend_extensions_op_array_persist(zend_op_array *op_array, void *mem); END_EXTERN_C() #endif /* ZEND_EXTENSIONS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!Zend/zend_language_parser.hnu[/* A Bison parser, made by GNU Bison 3.0.4. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ #ifndef YY_ZEND_ZEND_ZEND_LANGUAGE_PARSER_H_INCLUDED # define YY_ZEND_ZEND_ZEND_LANGUAGE_PARSER_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int zenddebug; #endif /* "%code requires" blocks. */ /* Token type. */ #include "zend.h" #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { END = 0, T_INCLUDE = 258, T_INCLUDE_ONCE = 259, T_EVAL = 260, T_REQUIRE = 261, T_REQUIRE_ONCE = 262, T_LOGICAL_OR = 263, T_LOGICAL_XOR = 264, T_LOGICAL_AND = 265, T_PRINT = 266, T_YIELD = 267, T_DOUBLE_ARROW = 268, T_YIELD_FROM = 269, T_PLUS_EQUAL = 270, T_MINUS_EQUAL = 271, T_MUL_EQUAL = 272, T_DIV_EQUAL = 273, T_CONCAT_EQUAL = 274, T_MOD_EQUAL = 275, T_AND_EQUAL = 276, T_OR_EQUAL = 277, T_XOR_EQUAL = 278, T_SL_EQUAL = 279, T_SR_EQUAL = 280, T_POW_EQUAL = 281, T_COALESCE = 282, T_BOOLEAN_OR = 283, T_BOOLEAN_AND = 284, T_IS_EQUAL = 285, T_IS_NOT_EQUAL = 286, T_IS_IDENTICAL = 287, T_IS_NOT_IDENTICAL = 288, T_SPACESHIP = 289, T_IS_SMALLER_OR_EQUAL = 290, T_IS_GREATER_OR_EQUAL = 291, T_SL = 292, T_SR = 293, T_INSTANCEOF = 294, T_INC = 295, T_DEC = 296, T_INT_CAST = 297, T_DOUBLE_CAST = 298, T_STRING_CAST = 299, T_ARRAY_CAST = 300, T_OBJECT_CAST = 301, T_BOOL_CAST = 302, T_UNSET_CAST = 303, T_POW = 304, T_NEW = 305, T_CLONE = 306, T_NOELSE = 307, T_ELSEIF = 308, T_ELSE = 309, T_ENDIF = 310, T_STATIC = 311, T_ABSTRACT = 312, T_FINAL = 313, T_PRIVATE = 314, T_PROTECTED = 315, T_PUBLIC = 316, T_LNUMBER = 317, T_DNUMBER = 318, T_STRING = 319, T_VARIABLE = 320, T_INLINE_HTML = 321, T_ENCAPSED_AND_WHITESPACE = 322, T_CONSTANT_ENCAPSED_STRING = 323, T_STRING_VARNAME = 324, T_NUM_STRING = 325, T_EXIT = 326, T_IF = 327, T_ECHO = 328, T_DO = 329, T_WHILE = 330, T_ENDWHILE = 331, T_FOR = 332, T_ENDFOR = 333, T_FOREACH = 334, T_ENDFOREACH = 335, T_DECLARE = 336, T_ENDDECLARE = 337, T_AS = 338, T_SWITCH = 339, T_ENDSWITCH = 340, T_CASE = 341, T_DEFAULT = 342, T_BREAK = 343, T_CONTINUE = 344, T_GOTO = 345, T_FUNCTION = 346, T_CONST = 347, T_RETURN = 348, T_TRY = 349, T_CATCH = 350, T_FINALLY = 351, T_THROW = 352, T_USE = 353, T_INSTEADOF = 354, T_GLOBAL = 355, T_VAR = 356, T_UNSET = 357, T_ISSET = 358, T_EMPTY = 359, T_HALT_COMPILER = 360, T_CLASS = 361, T_TRAIT = 362, T_INTERFACE = 363, T_EXTENDS = 364, T_IMPLEMENTS = 365, T_OBJECT_OPERATOR = 366, T_LIST = 367, T_ARRAY = 368, T_CALLABLE = 369, T_LINE = 370, T_FILE = 371, T_DIR = 372, T_CLASS_C = 373, T_TRAIT_C = 374, T_METHOD_C = 375, T_FUNC_C = 376, T_COMMENT = 377, T_DOC_COMMENT = 378, T_OPEN_TAG = 379, T_OPEN_TAG_WITH_ECHO = 380, T_CLOSE_TAG = 381, T_WHITESPACE = 382, T_START_HEREDOC = 383, T_END_HEREDOC = 384, T_DOLLAR_OPEN_CURLY_BRACES = 385, T_CURLY_OPEN = 386, T_PAAMAYIM_NEKUDOTAYIM = 387, T_NAMESPACE = 388, T_NS_C = 389, T_NS_SEPARATOR = 390, T_ELLIPSIS = 391, T_ERROR = 392 }; #endif /* Tokens. */ #define END 0 #define T_INCLUDE 258 #define T_INCLUDE_ONCE 259 #define T_EVAL 260 #define T_REQUIRE 261 #define T_REQUIRE_ONCE 262 #define T_LOGICAL_OR 263 #define T_LOGICAL_XOR 264 #define T_LOGICAL_AND 265 #define T_PRINT 266 #define T_YIELD 267 #define T_DOUBLE_ARROW 268 #define T_YIELD_FROM 269 #define T_PLUS_EQUAL 270 #define T_MINUS_EQUAL 271 #define T_MUL_EQUAL 272 #define T_DIV_EQUAL 273 #define T_CONCAT_EQUAL 274 #define T_MOD_EQUAL 275 #define T_AND_EQUAL 276 #define T_OR_EQUAL 277 #define T_XOR_EQUAL 278 #define T_SL_EQUAL 279 #define T_SR_EQUAL 280 #define T_POW_EQUAL 281 #define T_COALESCE 282 #define T_BOOLEAN_OR 283 #define T_BOOLEAN_AND 284 #define T_IS_EQUAL 285 #define T_IS_NOT_EQUAL 286 #define T_IS_IDENTICAL 287 #define T_IS_NOT_IDENTICAL 288 #define T_SPACESHIP 289 #define T_IS_SMALLER_OR_EQUAL 290 #define T_IS_GREATER_OR_EQUAL 291 #define T_SL 292 #define T_SR 293 #define T_INSTANCEOF 294 #define T_INC 295 #define T_DEC 296 #define T_INT_CAST 297 #define T_DOUBLE_CAST 298 #define T_STRING_CAST 299 #define T_ARRAY_CAST 300 #define T_OBJECT_CAST 301 #define T_BOOL_CAST 302 #define T_UNSET_CAST 303 #define T_POW 304 #define T_NEW 305 #define T_CLONE 306 #define T_NOELSE 307 #define T_ELSEIF 308 #define T_ELSE 309 #define T_ENDIF 310 #define T_STATIC 311 #define T_ABSTRACT 312 #define T_FINAL 313 #define T_PRIVATE 314 #define T_PROTECTED 315 #define T_PUBLIC 316 #define T_LNUMBER 317 #define T_DNUMBER 318 #define T_STRING 319 #define T_VARIABLE 320 #define T_INLINE_HTML 321 #define T_ENCAPSED_AND_WHITESPACE 322 #define T_CONSTANT_ENCAPSED_STRING 323 #define T_STRING_VARNAME 324 #define T_NUM_STRING 325 #define T_EXIT 326 #define T_IF 327 #define T_ECHO 328 #define T_DO 329 #define T_WHILE 330 #define T_ENDWHILE 331 #define T_FOR 332 #define T_ENDFOR 333 #define T_FOREACH 334 #define T_ENDFOREACH 335 #define T_DECLARE 336 #define T_ENDDECLARE 337 #define T_AS 338 #define T_SWITCH 339 #define T_ENDSWITCH 340 #define T_CASE 341 #define T_DEFAULT 342 #define T_BREAK 343 #define T_CONTINUE 344 #define T_GOTO 345 #define T_FUNCTION 346 #define T_CONST 347 #define T_RETURN 348 #define T_TRY 349 #define T_CATCH 350 #define T_FINALLY 351 #define T_THROW 352 #define T_USE 353 #define T_INSTEADOF 354 #define T_GLOBAL 355 #define T_VAR 356 #define T_UNSET 357 #define T_ISSET 358 #define T_EMPTY 359 #define T_HALT_COMPILER 360 #define T_CLASS 361 #define T_TRAIT 362 #define T_INTERFACE 363 #define T_EXTENDS 364 #define T_IMPLEMENTS 365 #define T_OBJECT_OPERATOR 366 #define T_LIST 367 #define T_ARRAY 368 #define T_CALLABLE 369 #define T_LINE 370 #define T_FILE 371 #define T_DIR 372 #define T_CLASS_C 373 #define T_TRAIT_C 374 #define T_METHOD_C 375 #define T_FUNC_C 376 #define T_COMMENT 377 #define T_DOC_COMMENT 378 #define T_OPEN_TAG 379 #define T_OPEN_TAG_WITH_ECHO 380 #define T_CLOSE_TAG 381 #define T_WHITESPACE 382 #define T_START_HEREDOC 383 #define T_END_HEREDOC 384 #define T_DOLLAR_OPEN_CURLY_BRACES 385 #define T_CURLY_OPEN 386 #define T_PAAMAYIM_NEKUDOTAYIM 387 #define T_NAMESPACE 388 #define T_NS_C 389 #define T_NS_SEPARATOR 390 #define T_ELLIPSIS 391 #define T_ERROR 392 /* Value type. */ ZEND_API int zendparse (void); #endif /* !YY_ZEND_ZEND_ZEND_LANGUAGE_PARSER_H_INCLUDED */ PK!9; !Zend/zend_language_scanner_defs.hnu[/* Generated by re2c 1.3 */ enum YYCONDTYPE { yycST_IN_SCRIPTING, yycST_LOOKING_FOR_PROPERTY, yycST_BACKQUOTE, yycST_DOUBLE_QUOTES, yycST_HEREDOC, yycST_LOOKING_FOR_VARNAME, yycST_VAR_OFFSET, yycINITIAL, yycST_END_HEREDOC, yycST_NOWDOC, }; PK!@@@Zend/zend_interfaces.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef ZEND_INTERFACES_H #define ZEND_INTERFACES_H #include "zend.h" #include "zend_API.h" BEGIN_EXTERN_C() extern ZEND_API zend_class_entry *zend_ce_traversable; extern ZEND_API zend_class_entry *zend_ce_aggregate; extern ZEND_API zend_class_entry *zend_ce_iterator; extern ZEND_API zend_class_entry *zend_ce_arrayaccess; extern ZEND_API zend_class_entry *zend_ce_serializable; extern ZEND_API zend_class_entry *zend_ce_countable; typedef struct _zend_user_iterator { zend_object_iterator it; zend_class_entry *ce; zval value; } zend_user_iterator; ZEND_API zval* zend_call_method(zval *object_pp, zend_class_entry *obj_ce, zend_function **fn_proxy, const char *function_name, size_t function_name_len, zval *retval, int param_count, zval* arg1, zval* arg2); #define zend_call_method_with_0_params(obj, obj_ce, fn_proxy, function_name, retval) \ zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 0, NULL, NULL) #define zend_call_method_with_1_params(obj, obj_ce, fn_proxy, function_name, retval, arg1) \ zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 1, arg1, NULL) #define zend_call_method_with_2_params(obj, obj_ce, fn_proxy, function_name, retval, arg1, arg2) \ zend_call_method(obj, obj_ce, fn_proxy, function_name, sizeof(function_name)-1, retval, 2, arg1, arg2) #define REGISTER_MAGIC_INTERFACE(class_name, class_name_str) \ {\ zend_class_entry ce;\ INIT_CLASS_ENTRY(ce, # class_name_str, zend_funcs_ ## class_name) \ zend_ce_ ## class_name = zend_register_internal_interface(&ce);\ zend_ce_ ## class_name->interface_gets_implemented = zend_implement_ ## class_name;\ } #define REGISTER_MAGIC_IMPLEMENT(class_name, interface_name) \ zend_class_implements(zend_ce_ ## class_name, 1, zend_ce_ ## interface_name) ZEND_API void zend_user_it_rewind(zend_object_iterator *_iter); ZEND_API int zend_user_it_valid(zend_object_iterator *_iter); ZEND_API void zend_user_it_get_current_key(zend_object_iterator *_iter, zval *key); ZEND_API zval *zend_user_it_get_current_data(zend_object_iterator *_iter); ZEND_API void zend_user_it_move_forward(zend_object_iterator *_iter); ZEND_API void zend_user_it_invalidate_current(zend_object_iterator *_iter); ZEND_API void zend_user_it_new_iterator(zend_class_entry *ce, zval *object, zval *iterator); ZEND_API zend_object_iterator *zend_user_it_get_new_iterator(zend_class_entry *ce, zval *object, int by_ref); ZEND_API void zend_register_interfaces(void); ZEND_API int zend_user_serialize(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data); ZEND_API int zend_user_unserialize(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data); ZEND_API int zend_class_serialize_deny(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data); ZEND_API int zend_class_unserialize_deny(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data); END_EXTERN_C() #endif /* ZEND_INTERFACES_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!}ZZend/zend_errors.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_ERRORS_H #define ZEND_ERRORS_H #define E_ERROR (1<<0L) #define E_WARNING (1<<1L) #define E_PARSE (1<<2L) #define E_NOTICE (1<<3L) #define E_CORE_ERROR (1<<4L) #define E_CORE_WARNING (1<<5L) #define E_COMPILE_ERROR (1<<6L) #define E_COMPILE_WARNING (1<<7L) #define E_USER_ERROR (1<<8L) #define E_USER_WARNING (1<<9L) #define E_USER_NOTICE (1<<10L) #define E_STRICT (1<<11L) #define E_RECOVERABLE_ERROR (1<<12L) #define E_DEPRECATED (1<<13L) #define E_USER_DEPRECATED (1<<14L) #define E_ALL (E_ERROR | E_WARNING | E_PARSE | E_NOTICE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE | E_RECOVERABLE_ERROR | E_DEPRECATED | E_USER_DEPRECATED | E_STRICT) #define E_CORE (E_CORE_ERROR | E_CORE_WARNING) #endif /* ZEND_ERRORS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!A]zYTKTKZend/zend_alloc.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_ALLOC_H #define ZEND_ALLOC_H #include #include "../TSRM/TSRM.h" #include "zend.h" #ifndef ZEND_MM_ALIGNMENT # define ZEND_MM_ALIGNMENT Z_L(8) # define ZEND_MM_ALIGNMENT_LOG2 Z_L(3) #elif ZEND_MM_ALIGNMENT < 4 # undef ZEND_MM_ALIGNMENT # undef ZEND_MM_ALIGNMENT_LOG2 # define ZEND_MM_ALIGNMENT Z_L(4) # define ZEND_MM_ALIGNMENT_LOG2 Z_L(2) #endif #define ZEND_MM_ALIGNMENT_MASK ~(ZEND_MM_ALIGNMENT - Z_L(1)) #define ZEND_MM_ALIGNED_SIZE(size) (((size) + ZEND_MM_ALIGNMENT - Z_L(1)) & ZEND_MM_ALIGNMENT_MASK) #define ZEND_MM_ALIGNED_SIZE_EX(size, alignment) \ (((size) + ((alignment) - Z_L(1))) & ~((alignment) - Z_L(1))) typedef struct _zend_leak_info { void *addr; size_t size; const char *filename; const char *orig_filename; uint32_t lineno; uint32_t orig_lineno; } zend_leak_info; #if ZEND_DEBUG typedef struct _zend_mm_debug_info { size_t size; const char *filename; const char *orig_filename; uint32_t lineno; uint32_t orig_lineno; } zend_mm_debug_info; # define ZEND_MM_OVERHEAD ZEND_MM_ALIGNED_SIZE(sizeof(zend_mm_debug_info)) #else # define ZEND_MM_OVERHEAD 0 #endif BEGIN_EXTERN_C() ZEND_API char* ZEND_FASTCALL zend_strndup(const char *s, size_t length) ZEND_ATTRIBUTE_MALLOC; ZEND_API void* ZEND_FASTCALL _emalloc(size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1); ZEND_API void* ZEND_FASTCALL _safe_emalloc(size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API void* ZEND_FASTCALL _safe_malloc(size_t nmemb, size_t size, size_t offset) ZEND_ATTRIBUTE_MALLOC; ZEND_API void ZEND_FASTCALL _efree(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); ZEND_API void* ZEND_FASTCALL _ecalloc(size_t nmemb, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2); ZEND_API void* ZEND_FASTCALL _erealloc(void *ptr, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2); ZEND_API void* ZEND_FASTCALL _erealloc2(void *ptr, size_t size, size_t copy_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_ALLOC_SIZE(2); ZEND_API void* ZEND_FASTCALL _safe_erealloc(void *ptr, size_t nmemb, size_t size, size_t offset ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); ZEND_API void* ZEND_FASTCALL _safe_realloc(void *ptr, size_t nmemb, size_t size, size_t offset); ZEND_API char* ZEND_FASTCALL _estrdup(const char *s ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API char* ZEND_FASTCALL _estrndup(const char *s, size_t length ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API size_t ZEND_FASTCALL _zend_mem_block_size(void *ptr ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); #include "zend_alloc_sizes.h" /* _emalloc() & _efree() specialization */ #if !ZEND_DEBUG && defined(HAVE_BUILTIN_CONSTANT_P) # define _ZEND_BIN_ALLOCATOR_DEF(_num, _size, _elements, _pages, x, y) \ ZEND_API void* ZEND_FASTCALL _emalloc_ ## _size(void) ZEND_ATTRIBUTE_MALLOC; ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_DEF, x, y) ZEND_API void* ZEND_FASTCALL _emalloc_large(size_t size) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1); ZEND_API void* ZEND_FASTCALL _emalloc_huge(size_t size) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1); # define _ZEND_BIN_ALLOCATOR_SELECTOR_START(_num, _size, _elements, _pages, size, y) \ ((size <= _size) ? _emalloc_ ## _size() : # define _ZEND_BIN_ALLOCATOR_SELECTOR_END(_num, _size, _elements, _pages, size, y) \ ) # define ZEND_ALLOCATOR(size) \ ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_SELECTOR_START, size, y) \ ((size <= ZEND_MM_MAX_LARGE_SIZE) ? _emalloc_large(size) : _emalloc_huge(size)) \ ZEND_MM_BINS_INFO(_ZEND_BIN_ALLOCATOR_SELECTOR_END, size, y) # define _emalloc(size) \ (__builtin_constant_p(size) ? \ ZEND_ALLOCATOR(size) \ : \ _emalloc(size) \ ) # define _ZEND_BIN_DEALLOCATOR_DEF(_num, _size, _elements, _pages, x, y) \ ZEND_API void ZEND_FASTCALL _efree_ ## _size(void *); ZEND_MM_BINS_INFO(_ZEND_BIN_DEALLOCATOR_DEF, x, y) ZEND_API void ZEND_FASTCALL _efree_large(void *, size_t size); ZEND_API void ZEND_FASTCALL _efree_huge(void *, size_t size); # define _ZEND_BIN_DEALLOCATOR_SELECTOR_START(_num, _size, _elements, _pages, ptr, size) \ if (size <= _size) { _efree_ ## _size(ptr); } else # define ZEND_DEALLOCATOR(ptr, size) \ ZEND_MM_BINS_INFO(_ZEND_BIN_DEALLOCATOR_SELECTOR_START, ptr, size) \ if (size <= ZEND_MM_MAX_LARGE_SIZE) { _efree_large(ptr, size); } \ else { _efree_huge(ptr, size); } # define efree_size(ptr, size) do { \ if (__builtin_constant_p(size)) { \ ZEND_DEALLOCATOR(ptr, size) \ } else { \ _efree(ptr); \ } \ } while (0) # define efree_size_rel(ptr, size) \ efree_size(ptr, size) #else # define efree_size(ptr, size) \ efree(ptr) # define efree_size_rel(ptr, size) \ efree_rel(ptr) #define _emalloc_large _emalloc #define _emalloc_huge _emalloc #define _efree_large _efree #define _efree_huge _efree #endif /* Standard wrapper macros */ #define emalloc(size) _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define emalloc_large(size) _emalloc_large((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define emalloc_huge(size) _emalloc_huge((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define safe_emalloc(nmemb, size, offset) _safe_emalloc((nmemb), (size), (offset) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define efree(ptr) _efree((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define efree_large(ptr) _efree_large((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define efree_huge(ptr) _efree_huge((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define ecalloc(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define erealloc(ptr, size) _erealloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define erealloc2(ptr, size, copy_size) _erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define safe_erealloc(ptr, nmemb, size, offset) _safe_erealloc((ptr), (nmemb), (size), (offset) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define erealloc_recoverable(ptr, size) _erealloc((ptr), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define erealloc2_recoverable(ptr, size, copy_size) _erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define estrdup(s) _estrdup((s) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define estrndup(s, length) _estrndup((s), (length) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define zend_mem_block_size(ptr) _zend_mem_block_size((ptr) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) /* Relay wrapper macros */ #define emalloc_rel(size) _emalloc((size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define safe_emalloc_rel(nmemb, size, offset) _safe_emalloc((nmemb), (size), (offset) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define efree_rel(ptr) _efree((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define ecalloc_rel(nmemb, size) _ecalloc((nmemb), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define erealloc_rel(ptr, size) _erealloc((ptr), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define erealloc2_rel(ptr, size, copy_size) _erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define erealloc_recoverable_rel(ptr, size) _erealloc((ptr), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define erealloc2_recoverable_rel(ptr, size, copy_size) _erealloc2((ptr), (size), (copy_size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define safe_erealloc_rel(ptr, nmemb, size, offset) _safe_erealloc((ptr), (nmemb), (size), (offset) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define estrdup_rel(s) _estrdup((s) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define estrndup_rel(s, length) _estrndup((s), (length) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define zend_mem_block_size_rel(ptr) _zend_mem_block_size((ptr) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) ZEND_API void * __zend_malloc(size_t len) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE(1); ZEND_API void * __zend_calloc(size_t nmemb, size_t len) ZEND_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_ALLOC_SIZE2(1,2); ZEND_API void * __zend_realloc(void *p, size_t len) ZEND_ATTRIBUTE_ALLOC_SIZE(2); /* Selective persistent/non persistent allocation macros */ #define pemalloc(size, persistent) ((persistent)?__zend_malloc(size):emalloc(size)) #define safe_pemalloc(nmemb, size, offset, persistent) ((persistent)?_safe_malloc(nmemb, size, offset):safe_emalloc(nmemb, size, offset)) #define pefree(ptr, persistent) ((persistent)?free(ptr):efree(ptr)) #define pefree_size(ptr, size, persistent) do { \ if (persistent) { \ free(ptr); \ } else { \ efree_size(ptr, size);\ } \ } while (0) #define pecalloc(nmemb, size, persistent) ((persistent)?__zend_calloc((nmemb), (size)):ecalloc((nmemb), (size))) #define perealloc(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc((ptr), (size))) #define perealloc2(ptr, size, copy_size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc2((ptr), (size), (copy_size))) #define safe_perealloc(ptr, nmemb, size, offset, persistent) ((persistent)?_safe_realloc((ptr), (nmemb), (size), (offset)):safe_erealloc((ptr), (nmemb), (size), (offset))) #define perealloc_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable((ptr), (size))) #define perealloc2_recoverable(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc2_recoverable((ptr), (size), (copy_size))) #define pestrdup(s, persistent) ((persistent)?strdup(s):estrdup(s)) #define pestrndup(s, length, persistent) ((persistent)?zend_strndup((s),(length)):estrndup((s),(length))) #define pemalloc_rel(size, persistent) ((persistent)?__zend_malloc(size):emalloc_rel(size)) #define pefree_rel(ptr, persistent) ((persistent)?free(ptr):efree_rel(ptr)) #define pecalloc_rel(nmemb, size, persistent) ((persistent)?__zend_calloc((nmemb), (size)):ecalloc_rel((nmemb), (size))) #define perealloc_rel(ptr, size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc_rel((ptr), (size))) #define perealloc2_rel(ptr, size, copy_size, persistent) ((persistent)?__zend_realloc((ptr), (size)):erealloc2_rel((ptr), (size), (copy_size))) #define perealloc_recoverable_rel(ptr, size, persistent) ((persistent)?realloc((ptr), (size)):erealloc_recoverable_rel((ptr), (size))) #define perealloc2_recoverable_rel(ptr, size, copy_size, persistent) ((persistent)?realloc((ptr), (size)):erealloc2_recoverable_rel((ptr), (size), (copy_size))) #define pestrdup_rel(s, persistent) ((persistent)?strdup(s):estrdup_rel(s)) ZEND_API int zend_set_memory_limit(size_t memory_limit); ZEND_API void start_memory_manager(void); ZEND_API void shutdown_memory_manager(int silent, int full_shutdown); ZEND_API int is_zend_mm(void); ZEND_API size_t zend_memory_usage(int real_usage); ZEND_API size_t zend_memory_peak_usage(int real_usage); /* fast cache for HashTables */ #define ALLOC_HASHTABLE(ht) \ (ht) = (HashTable *) emalloc(sizeof(HashTable)) #define FREE_HASHTABLE(ht) \ efree_size(ht, sizeof(HashTable)) #define ALLOC_HASHTABLE_REL(ht) \ (ht) = (HashTable *) emalloc_rel(sizeof(HashTable)) #define FREE_HASHTABLE_REL(ht) \ efree_size_rel(ht, sizeof(HashTable)) /* Heap functions */ typedef struct _zend_mm_heap zend_mm_heap; ZEND_API zend_mm_heap *zend_mm_startup(void); ZEND_API void zend_mm_shutdown(zend_mm_heap *heap, int full_shutdown, int silent); ZEND_API void* ZEND_FASTCALL _zend_mm_alloc(zend_mm_heap *heap, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC) ZEND_ATTRIBUTE_MALLOC; ZEND_API void ZEND_FASTCALL _zend_mm_free(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); ZEND_API void* ZEND_FASTCALL _zend_mm_realloc(zend_mm_heap *heap, void *p, size_t size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); ZEND_API void* ZEND_FASTCALL _zend_mm_realloc2(zend_mm_heap *heap, void *p, size_t size, size_t copy_size ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); ZEND_API size_t ZEND_FASTCALL _zend_mm_block_size(zend_mm_heap *heap, void *p ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC); #define zend_mm_alloc(heap, size) _zend_mm_alloc((heap), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define zend_mm_free(heap, p) _zend_mm_free((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define zend_mm_realloc(heap, p, size) _zend_mm_realloc((heap), (p), (size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define zend_mm_realloc2(heap, p, size, copy_size) _zend_mm_realloc2((heap), (p), (size), (copy_size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define zend_mm_block_size(heap, p) _zend_mm_block_size((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) #define zend_mm_alloc_rel(heap, size) _zend_mm_alloc((heap), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define zend_mm_free_rel(heap, p) _zend_mm_free((heap), (p) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define zend_mm_realloc_rel(heap, p, size) _zend_mm_realloc((heap), (p), (size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define zend_mm_realloc2_rel(heap, p, size, copy_size) _zend_mm_realloc2((heap), (p), (size), (copy_size) ZEND_FILE_LINE_RELAY_CC ZEND_FILE_LINE_CC) #define zend_mm_block_size_rel(heap, p) _zend_mm_block_size((heap), (p) ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC) ZEND_API zend_mm_heap *zend_mm_set_heap(zend_mm_heap *new_heap); ZEND_API zend_mm_heap *zend_mm_get_heap(void); ZEND_API size_t zend_mm_gc(zend_mm_heap *heap); #define ZEND_MM_CUSTOM_HEAP_NONE 0 #define ZEND_MM_CUSTOM_HEAP_STD 1 #define ZEND_MM_CUSTOM_HEAP_DEBUG 2 ZEND_API int zend_mm_is_custom_heap(zend_mm_heap *new_heap); ZEND_API void zend_mm_set_custom_handlers(zend_mm_heap *heap, void* (*_malloc)(size_t), void (*_free)(void*), void* (*_realloc)(void*, size_t)); ZEND_API void zend_mm_get_custom_handlers(zend_mm_heap *heap, void* (**_malloc)(size_t), void (**_free)(void*), void* (**_realloc)(void*, size_t)); #if ZEND_DEBUG ZEND_API void zend_mm_set_custom_debug_handlers(zend_mm_heap *heap, void* (*_malloc)(size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC), void (*_free)(void* ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC), void* (*_realloc)(void*, size_t ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC)); #endif typedef struct _zend_mm_storage zend_mm_storage; typedef void* (*zend_mm_chunk_alloc_t)(zend_mm_storage *storage, size_t size, size_t alignment); typedef void (*zend_mm_chunk_free_t)(zend_mm_storage *storage, void *chunk, size_t size); typedef int (*zend_mm_chunk_truncate_t)(zend_mm_storage *storage, void *chunk, size_t old_size, size_t new_size); typedef int (*zend_mm_chunk_extend_t)(zend_mm_storage *storage, void *chunk, size_t old_size, size_t new_size); typedef struct _zend_mm_handlers { zend_mm_chunk_alloc_t chunk_alloc; zend_mm_chunk_free_t chunk_free; zend_mm_chunk_truncate_t chunk_truncate; zend_mm_chunk_extend_t chunk_extend; } zend_mm_handlers; struct _zend_mm_storage { const zend_mm_handlers handlers; void *data; }; ZEND_API zend_mm_storage *zend_mm_get_storage(zend_mm_heap *heap); ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_handlers *handlers, void *data, size_t data_size); /* // The following example shows how to use zend_mm_heap API with custom storage static zend_mm_heap *apc_heap = NULL; static HashTable *apc_ht = NULL; typedef struct _apc_data { void *mem; uint32_t free_pages; } apc_data; static void *apc_chunk_alloc(zend_mm_storage *storage, size_t size, size_t alignment) { apc_data *data = (apc_data*)(storage->data); size_t real_size = ((size + (ZEND_MM_CHUNK_SIZE-1)) & ~(ZEND_MM_CHUNK_SIZE-1)); uint32_t count = real_size / ZEND_MM_CHUNK_SIZE; uint32_t first, last, i; ZEND_ASSERT(alignment == ZEND_MM_CHUNK_SIZE); for (first = 0; first < 32; first++) { if (!(data->free_pages & (1 << first))) { last = first; do { if (last - first == count - 1) { for (i = first; i <= last; i++) { data->free_pages |= (1 << i); } return (void *)(((char*)(data->mem)) + ZEND_MM_CHUNK_SIZE * (1 << first)); } last++; } while (last < 32 && !(data->free_pages & (1 << last))); first = last; } } return NULL; } static void apc_chunk_free(zend_mm_storage *storage, void *chunk, size_t size) { apc_data *data = (apc_data*)(storage->data); uint32_t i; ZEND_ASSERT(((uintptr_t)chunk & (ZEND_MM_CHUNK_SIZE - 1)) == 0); i = ((uintptr_t)chunk - (uintptr_t)(data->mem)) / ZEND_MM_CHUNK_SIZE; while (1) { data->free_pages &= ~(1 << i); if (size <= ZEND_MM_CHUNK_SIZE) { break; } size -= ZEND_MM_CHUNK_SIZE; } } static void apc_init_heap(void) { zend_mm_handlers apc_handlers = { apc_chunk_alloc, apc_chunk_free, NULL, NULL, }; apc_data tmp_data; zend_mm_heap *old_heap; // Preallocate properly aligned SHM chunks (64MB) tmp_data.mem = shm_memalign(ZEND_MM_CHUNK_SIZE, ZEND_MM_CHUNK_SIZE * 32); // Initialize temporary storage data tmp_data.free_pages = 0; // Create heap apc_heap = zend_mm_startup_ex(&apc_handlers, &tmp_data, sizeof(tmp_data)); // Allocate some data in the heap old_heap = zend_mm_set_heap(apc_heap); ALLOC_HASHTABLE(apc_ht); zend_hash_init(apc_ht, 64, NULL, ZVAL_PTR_DTOR, 0); zend_mm_set_heap(old_heap); } */ END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!00Zend/zend_virtual_cwd.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Sascha Schumann | | Pierre Joye | +----------------------------------------------------------------------+ */ #ifndef VIRTUAL_CWD_H #define VIRTUAL_CWD_H #include "TSRM.h" #include "tsrm_config_common.h" #include #include #include #ifdef HAVE_UTIME_H #include #endif #ifdef HAVE_STDARG_H #include #endif #ifdef ZTS #define VIRTUAL_DIR #endif #ifndef ZEND_WIN32 #include #else #include #endif #if defined(__osf__) || defined(_AIX) #include #endif #ifdef ZEND_WIN32 #include "readdir.h" #include #include "win32/ioutil.h" /* mode_t isn't defined on Windows */ typedef unsigned short mode_t; #define DEFAULT_SLASH '\\' #define DEFAULT_DIR_SEPARATOR ';' #define IS_SLASH(c) ((c) == '/' || (c) == '\\') #define IS_SLASH_P(c) (*(c) == '/' || \ (*(c) == '\\' && !IsDBCSLeadByte(*(c-1)))) /* COPY_WHEN_ABSOLUTE is 2 under Win32 because by chance both regular absolute paths in the file system and UNC paths need copying of two characters */ #define COPY_WHEN_ABSOLUTE(path) 2 #define IS_UNC_PATH(path, len) \ (len >= 2 && IS_SLASH(path[0]) && IS_SLASH(path[1])) #define IS_ABSOLUTE_PATH(path, len) \ (len >= 2 && (/* is local */isalpha(path[0]) && path[1] == ':' || /* is UNC */IS_SLASH(path[0]) && IS_SLASH(path[1]))) #else #ifdef HAVE_DIRENT_H #include #endif #define DEFAULT_SLASH '/' #ifdef __riscos__ #define DEFAULT_DIR_SEPARATOR ';' #else #define DEFAULT_DIR_SEPARATOR ':' #endif #define IS_SLASH(c) ((c) == '/') #define IS_SLASH_P(c) (*(c) == '/') #endif #ifndef COPY_WHEN_ABSOLUTE #define COPY_WHEN_ABSOLUTE(path) 0 #endif #ifndef IS_ABSOLUTE_PATH #define IS_ABSOLUTE_PATH(path, len) \ (IS_SLASH(path[0])) #endif #ifdef TSRM_EXPORTS #define CWD_EXPORTS #endif #ifdef ZEND_WIN32 # ifdef CWD_EXPORTS # define CWD_API __declspec(dllexport) # else # define CWD_API __declspec(dllimport) # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # define CWD_API __attribute__ ((visibility("default"))) #else # define CWD_API #endif #ifdef ZEND_WIN32 CWD_API int php_sys_stat_ex(const char *path, zend_stat_t *buf, int lstat); # define php_sys_stat(path, buf) php_sys_stat_ex(path, buf, 0) # define php_sys_lstat(path, buf) php_sys_stat_ex(path, buf, 1) CWD_API ssize_t php_sys_readlink(const char *link, char *target, size_t target_len); #else # define php_sys_stat stat # define php_sys_lstat lstat # ifdef HAVE_SYMLINK # define php_sys_readlink(link, target, target_len) readlink(link, target, target_len) # endif #endif typedef struct _cwd_state { char *cwd; size_t cwd_length; } cwd_state; typedef int (*verify_path_func)(const cwd_state *); CWD_API void virtual_cwd_startup(void); CWD_API void virtual_cwd_shutdown(void); CWD_API int virtual_cwd_activate(void); CWD_API int virtual_cwd_deactivate(void); CWD_API char *virtual_getcwd_ex(size_t *length); CWD_API char *virtual_getcwd(char *buf, size_t size); CWD_API int virtual_chdir(const char *path); CWD_API int virtual_chdir_file(const char *path, int (*p_chdir)(const char *path)); CWD_API int virtual_filepath(const char *path, char **filepath); CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_func verify_path); CWD_API char *virtual_realpath(const char *path, char *real_path); CWD_API FILE *virtual_fopen(const char *path, const char *mode); CWD_API int virtual_open(const char *path, int flags, ...); CWD_API int virtual_creat(const char *path, mode_t mode); CWD_API int virtual_rename(const char *oldname, const char *newname); CWD_API int virtual_stat(const char *path, zend_stat_t *buf); CWD_API int virtual_lstat(const char *path, zend_stat_t *buf); CWD_API int virtual_unlink(const char *path); CWD_API int virtual_mkdir(const char *pathname, mode_t mode); CWD_API int virtual_rmdir(const char *pathname); CWD_API DIR *virtual_opendir(const char *pathname); CWD_API FILE *virtual_popen(const char *command, const char *type); CWD_API int virtual_access(const char *pathname, int mode); #if HAVE_UTIME CWD_API int virtual_utime(const char *filename, struct utimbuf *buf); #endif CWD_API int virtual_chmod(const char *filename, mode_t mode); #if !defined(ZEND_WIN32) CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int link); #endif /* One of the following constants must be used as the last argument in virtual_file_ex() call. */ #define CWD_EXPAND 0 /* expand "." and ".." but don't resolve symlinks */ #define CWD_FILEPATH 1 /* resolve symlinks if file is exist otherwise expand */ #define CWD_REALPATH 2 /* call realpath(), resolve symlinks. File must exist */ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath); CWD_API char *tsrm_realpath(const char *path, char *real_path); #define REALPATH_CACHE_TTL (2*60) /* 2 minutes */ #define REALPATH_CACHE_SIZE 0 /* disabled while php.ini isn't loaded */ typedef struct _realpath_cache_bucket { zend_ulong key; char *path; char *realpath; struct _realpath_cache_bucket *next; time_t expires; uint16_t path_len; uint16_t realpath_len; uint8_t is_dir:1; #ifdef ZEND_WIN32 uint8_t is_rvalid:1; uint8_t is_readable:1; uint8_t is_wvalid:1; uint8_t is_writable:1; #endif } realpath_cache_bucket; typedef struct _virtual_cwd_globals { cwd_state cwd; zend_long realpath_cache_size; zend_long realpath_cache_size_limit; zend_long realpath_cache_ttl; realpath_cache_bucket *realpath_cache[1024]; } virtual_cwd_globals; #ifdef ZTS extern ts_rsrc_id cwd_globals_id; # define CWDG(v) ZEND_TSRMG(cwd_globals_id, virtual_cwd_globals *, v) #else extern virtual_cwd_globals cwd_globals; # define CWDG(v) (cwd_globals.v) #endif CWD_API void realpath_cache_clean(void); CWD_API void realpath_cache_del(const char *path, size_t path_len); CWD_API realpath_cache_bucket* realpath_cache_lookup(const char *path, size_t path_len, time_t t); CWD_API zend_long realpath_cache_size(void); CWD_API zend_long realpath_cache_max_buckets(void); CWD_API realpath_cache_bucket** realpath_cache_get_buckets(void); #ifdef CWD_EXPORTS extern void virtual_cwd_main_cwd_init(uint8_t); #endif /* The actual macros to be used in programs using TSRM * If the program defines VIRTUAL_DIR it will use the * virtual_* functions */ #ifdef VIRTUAL_DIR #define VCWD_GETCWD(buff, size) virtual_getcwd(buff, size) #define VCWD_FOPEN(path, mode) virtual_fopen(path, mode) /* Because open() has two modes, we have to macros to replace it */ #define VCWD_OPEN(path, flags) virtual_open(path, flags) #define VCWD_OPEN_MODE(path, flags, mode) virtual_open(path, flags, mode) #define VCWD_CREAT(path, mode) virtual_creat(path, mode) #define VCWD_CHDIR(path) virtual_chdir(path) #define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, virtual_chdir) #define VCWD_GETWD(buf) #define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path) #define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname) #define VCWD_STAT(path, buff) virtual_stat(path, buff) # define VCWD_LSTAT(path, buff) virtual_lstat(path, buff) #define VCWD_UNLINK(path) virtual_unlink(path) #define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode) #define VCWD_RMDIR(pathname) virtual_rmdir(pathname) #define VCWD_OPENDIR(pathname) virtual_opendir(pathname) #define VCWD_POPEN(command, type) virtual_popen(command, type) #define VCWD_ACCESS(pathname, mode) virtual_access(pathname, mode) #if HAVE_UTIME #define VCWD_UTIME(path, time) virtual_utime(path, time) #endif #define VCWD_CHMOD(path, mode) virtual_chmod(path, mode) #if !defined(ZEND_WIN32) #define VCWD_CHOWN(path, owner, group) virtual_chown(path, owner, group, 0) #if HAVE_LCHOWN #define VCWD_LCHOWN(path, owner, group) virtual_chown(path, owner, group, 1) #endif #endif #else #define VCWD_CREAT(path, mode) creat(path, mode) /* rename on windows will fail if newname already exists. MoveFileEx has to be used */ #if defined(ZEND_WIN32) #define VCWD_FOPEN(path, mode) php_win32_ioutil_fopen(path, mode) #define VCWD_OPEN(path, flags) php_win32_ioutil_open(path, flags) #define VCWD_OPEN_MODE(path, flags, mode) php_win32_ioutil_open(path, flags, mode) # define VCWD_RENAME(oldname, newname) php_win32_ioutil_rename(oldname, newname) #define VCWD_MKDIR(pathname, mode) php_win32_ioutil_mkdir(pathname, mode) #define VCWD_RMDIR(pathname) php_win32_ioutil_rmdir(pathname) #define VCWD_UNLINK(path) php_win32_ioutil_unlink(path) #define VCWD_CHDIR(path) php_win32_ioutil_chdir(path) #define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode) #define VCWD_GETCWD(buff, size) php_win32_ioutil_getcwd(buff, size) #define VCWD_CHMOD(path, mode) php_win32_ioutil_chmod(path, mode) #else #define VCWD_FOPEN(path, mode) fopen(path, mode) #define VCWD_OPEN(path, flags) open(path, flags) #define VCWD_OPEN_MODE(path, flags, mode) open(path, flags, mode) # define VCWD_RENAME(oldname, newname) rename(oldname, newname) #define VCWD_MKDIR(pathname, mode) mkdir(pathname, mode) #define VCWD_RMDIR(pathname) rmdir(pathname) #define VCWD_UNLINK(path) unlink(path) #define VCWD_CHDIR(path) chdir(path) #define VCWD_ACCESS(pathname, mode) access(pathname, mode) #define VCWD_GETCWD(buff, size) getcwd(buff, size) #define VCWD_CHMOD(path, mode) chmod(path, mode) #endif #define VCWD_CHDIR_FILE(path) virtual_chdir_file(path, chdir) #define VCWD_GETWD(buf) getwd(buf) #define VCWD_STAT(path, buff) php_sys_stat(path, buff) #define VCWD_LSTAT(path, buff) lstat(path, buff) #define VCWD_OPENDIR(pathname) opendir(pathname) #define VCWD_POPEN(command, type) popen(command, type) #define VCWD_REALPATH(path, real_path) tsrm_realpath(path, real_path) #if HAVE_UTIME # ifdef ZEND_WIN32 # define VCWD_UTIME(path, time) win32_utime(path, time) # else # define VCWD_UTIME(path, time) utime(path, time) # endif #endif #if !defined(ZEND_WIN32) #define VCWD_CHOWN(path, owner, group) chown(path, owner, group) #if HAVE_LCHOWN #define VCWD_LCHOWN(path, owner, group) lchown(path, owner, group) #endif #endif #endif /* Global stat declarations */ #ifndef _S_IFDIR #define _S_IFDIR S_IFDIR #endif #ifndef _S_IFREG #define _S_IFREG S_IFREG #endif #ifndef S_IFLNK #define _IFLNK 0120000 /* symbolic link */ #define S_IFLNK _IFLNK #endif #ifndef S_ISDIR #define S_ISDIR(mode) (((mode)&S_IFMT) == S_IFDIR) #endif #ifndef S_ISREG #define S_ISREG(mode) (((mode)&S_IFMT) == S_IFREG) #endif #ifndef S_ISLNK #define S_ISLNK(mode) (((mode)&S_IFMT) == S_IFLNK) #endif #ifndef S_IXROOT #define S_IXROOT ( S_IXUSR | S_IXGRP | S_IXOTH ) #endif /* XXX should be _S_IFIFO? */ #ifndef S_IFIFO #define _IFIFO 0010000 /* fifo */ #define S_IFIFO _IFIFO #endif #ifndef S_IFBLK #define _IFBLK 0060000 /* block special */ #define S_IFBLK _IFBLK #endif #endif /* VIRTUAL_CWD_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!;Zend/zend_exceptions.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Marcus Boerger | | Sterling Hughes | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_EXCEPTIONS_H #define ZEND_EXCEPTIONS_H BEGIN_EXTERN_C() extern ZEND_API zend_class_entry *zend_ce_throwable; extern ZEND_API zend_class_entry *zend_ce_exception; extern ZEND_API zend_class_entry *zend_ce_error_exception; extern ZEND_API zend_class_entry *zend_ce_error; extern ZEND_API zend_class_entry *zend_ce_compile_error; extern ZEND_API zend_class_entry *zend_ce_parse_error; extern ZEND_API zend_class_entry *zend_ce_type_error; extern ZEND_API zend_class_entry *zend_ce_argument_count_error; extern ZEND_API zend_class_entry *zend_ce_arithmetic_error; extern ZEND_API zend_class_entry *zend_ce_division_by_zero_error; ZEND_API void zend_exception_set_previous(zend_object *exception, zend_object *add_previous); ZEND_API void zend_exception_save(void); ZEND_API void zend_exception_restore(void); ZEND_API ZEND_COLD void zend_throw_exception_internal(zval *exception); void zend_register_default_exception(void); ZEND_API zend_class_entry *zend_get_exception_base(zval *object); /* Deprecated - Use zend_ce_exception directly instead */ ZEND_API zend_class_entry *zend_exception_get_default(void); /* Deprecated - Use zend_ce_error_exception directly instead */ ZEND_API zend_class_entry *zend_get_error_exception(void); ZEND_API void zend_register_default_classes(void); /* exception_ce NULL, zend_ce_exception, zend_ce_error, or a derived class * message NULL or the message of the exception */ ZEND_API ZEND_COLD zend_object *zend_throw_exception(zend_class_entry *exception_ce, const char *message, zend_long code); ZEND_API ZEND_COLD zend_object *zend_throw_exception_ex(zend_class_entry *exception_ce, zend_long code, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4); ZEND_API ZEND_COLD void zend_throw_exception_object(zval *exception); ZEND_API void zend_clear_exception(void); ZEND_API zend_object *zend_throw_error_exception(zend_class_entry *exception_ce, const char *message, zend_long code, int severity); extern ZEND_API void (*zend_throw_exception_hook)(zval *ex); /* show an exception using zend_error(severity,...), severity should be E_ERROR */ ZEND_API ZEND_COLD void zend_exception_error(zend_object *exception, int severity); #include "zend_globals.h" static zend_always_inline void zend_rethrow_exception(zend_execute_data *execute_data) { if (EX(opline)->opcode != ZEND_HANDLE_EXCEPTION) { EG(opline_before_exception) = EX(opline); EX(opline) = EG(exception_op); } } END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!%:n66Zend/zend_vm.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_VM_H #define ZEND_VM_H BEGIN_EXTERN_C() ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler(zend_op* opcode); ZEND_API void ZEND_FASTCALL zend_vm_set_opcode_handler_ex(zend_op* opcode, uint32_t op1_info, uint32_t op2_info, uint32_t res_info); ZEND_API void ZEND_FASTCALL zend_serialize_opcode_handler(zend_op *op); ZEND_API void ZEND_FASTCALL zend_deserialize_opcode_handler(zend_op *op); ZEND_API const void* ZEND_FASTCALL zend_get_opcode_handler_func(const zend_op *op); ZEND_API const zend_op *zend_get_halt_op(void); ZEND_API int ZEND_FASTCALL zend_vm_call_opcode_handler(zend_execute_data *ex); ZEND_API int zend_vm_kind(void); void zend_vm_init(void); void zend_vm_dtor(void); END_EXTERN_C() #define ZEND_VM_SET_OPCODE_HANDLER(opline) zend_vm_set_opcode_handler(opline) #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!'BZend/zend_globals.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_GLOBALS_H #define ZEND_GLOBALS_H #include #include "zend_globals_macros.h" #include "zend_stack.h" #include "zend_ptr_stack.h" #include "zend_hash.h" #include "zend_llist.h" #include "zend_objects.h" #include "zend_objects_API.h" #include "zend_modules.h" #include "zend_float.h" #include "zend_multibyte.h" #include "zend_multiply.h" #include "zend_arena.h" /* Define ZTS if you want a thread-safe Zend */ /*#undef ZTS*/ #ifdef ZTS BEGIN_EXTERN_C() ZEND_API extern int compiler_globals_id; ZEND_API extern int executor_globals_id; END_EXTERN_C() #endif #define SYMTABLE_CACHE_SIZE 32 #include "zend_compile.h" /* excpt.h on Digital Unix 4.0 defines function_table */ #undef function_table #define ZEND_EARLY_BINDING_COMPILE_TIME 0 #define ZEND_EARLY_BINDING_DELAYED 1 #define ZEND_EARLY_BINDING_DELAYED_ALL 2 typedef struct _zend_vm_stack *zend_vm_stack; typedef struct _zend_ini_entry zend_ini_entry; struct _zend_compiler_globals { zend_stack loop_var_stack; zend_class_entry *active_class_entry; zend_string *compiled_filename; int zend_lineno; zend_op_array *active_op_array; HashTable *function_table; /* function symbol table */ HashTable *class_table; /* class table */ HashTable filenames_table; HashTable *auto_globals; zend_bool parse_error; zend_bool in_compilation; zend_bool short_tags; zend_bool unclean_shutdown; zend_bool ini_parser_unbuffered_errors; zend_llist open_files; struct _zend_ini_parser_param *ini_parser_param; uint32_t start_lineno; zend_bool increment_lineno; zend_string *doc_comment; uint32_t extra_fn_flags; uint32_t compiler_options; /* set of ZEND_COMPILE_* constants */ zend_oparray_context context; zend_file_context file_context; zend_arena *arena; HashTable interned_strings; const zend_encoding **script_encoding_list; size_t script_encoding_list_size; zend_bool multibyte; zend_bool detect_unicode; zend_bool encoding_declared; zend_ast *ast; zend_arena *ast_arena; zend_stack delayed_oplines_stack; #ifdef ZTS zval **static_members_table; int last_static_member; #endif }; struct _zend_executor_globals { zval uninitialized_zval; zval error_zval; /* symbol table cache */ zend_array *symtable_cache[SYMTABLE_CACHE_SIZE]; zend_array **symtable_cache_limit; zend_array **symtable_cache_ptr; zend_array symbol_table; /* main symbol table */ HashTable included_files; /* files already included */ JMP_BUF *bailout; int error_reporting; int exit_status; HashTable *function_table; /* function symbol table */ HashTable *class_table; /* class table */ HashTable *zend_constants; /* constants table */ zval *vm_stack_top; zval *vm_stack_end; zend_vm_stack vm_stack; size_t vm_stack_page_size; struct _zend_execute_data *current_execute_data; zend_class_entry *fake_scope; /* used to avoid checks accessing properties */ zend_long precision; int ticks_count; uint32_t persistent_constants_count; uint32_t persistent_functions_count; uint32_t persistent_classes_count; HashTable *in_autoload; zend_function *autoload_func; zend_bool full_tables_cleanup; /* for extended information support */ zend_bool no_extensions; zend_bool vm_interrupt; zend_bool timed_out; zend_long hard_timeout; #ifdef ZEND_WIN32 OSVERSIONINFOEX windows_version_info; #endif HashTable regular_list; HashTable persistent_list; int user_error_handler_error_reporting; zval user_error_handler; zval user_exception_handler; zend_stack user_error_handlers_error_reporting; zend_stack user_error_handlers; zend_stack user_exception_handlers; zend_error_handling_t error_handling; zend_class_entry *exception_class; /* timeout support */ zend_long timeout_seconds; int lambda_count; HashTable *ini_directives; HashTable *modified_ini_directives; zend_ini_entry *error_reporting_ini_entry; zend_objects_store objects_store; zend_object *exception, *prev_exception; const zend_op *opline_before_exception; zend_op exception_op[3]; struct _zend_module_entry *current_module; zend_bool active; zend_uchar flags; zend_long assertions; uint32_t ht_iterators_count; /* number of allocatd slots */ uint32_t ht_iterators_used; /* number of used slots */ HashTableIterator *ht_iterators; HashTableIterator ht_iterators_slots[16]; void *saved_fpu_cw_ptr; #if XPFPA_HAVE_CW XPFPA_CW_DATATYPE saved_fpu_cw; #endif zend_function trampoline; zend_op call_trampoline_op; zend_bool each_deprecation_thrown; void *reserved[ZEND_MAX_RESERVED_RESOURCES]; }; #define EG_FLAGS_INITIAL (0) #define EG_FLAGS_IN_SHUTDOWN (1<<0) #define EG_FLAGS_OBJECT_STORE_NO_REUSE (1<<1) struct _zend_ini_scanner_globals { zend_file_handle *yy_in; zend_file_handle *yy_out; unsigned int yy_leng; unsigned char *yy_start; unsigned char *yy_text; unsigned char *yy_cursor; unsigned char *yy_marker; unsigned char *yy_limit; int yy_state; zend_stack state_stack; char *filename; int lineno; /* Modes are: ZEND_INI_SCANNER_NORMAL, ZEND_INI_SCANNER_RAW, ZEND_INI_SCANNER_TYPED */ int scanner_mode; }; typedef enum { ON_TOKEN, ON_FEEDBACK, ON_STOP } zend_php_scanner_event; struct _zend_php_scanner_globals { zend_file_handle *yy_in; zend_file_handle *yy_out; unsigned int yy_leng; unsigned char *yy_start; unsigned char *yy_text; unsigned char *yy_cursor; unsigned char *yy_marker; unsigned char *yy_limit; int yy_state; zend_stack state_stack; zend_ptr_stack heredoc_label_stack; zend_bool heredoc_scan_ahead; int heredoc_indentation; zend_bool heredoc_indentation_uses_spaces; /* original (unfiltered) script */ unsigned char *script_org; size_t script_org_size; /* filtered script */ unsigned char *script_filtered; size_t script_filtered_size; /* input/output filters */ zend_encoding_filter input_filter; zend_encoding_filter output_filter; const zend_encoding *script_encoding; /* initial string length after scanning to first variable */ int scanned_string_len; /* hooks */ void (*on_event)(zend_php_scanner_event event, int token, int line, void *context); void *on_event_context; }; #endif /* ZEND_GLOBALS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!H Zend/zend_ts_hash.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Harald Radi | +----------------------------------------------------------------------+ */ #ifndef ZEND_TS_HASH_H #define ZEND_TS_HASH_H #include "zend.h" typedef struct _zend_ts_hashtable { HashTable hash; uint32_t reader; #ifdef ZTS MUTEX_T mx_reader; MUTEX_T mx_writer; #endif } TsHashTable; BEGIN_EXTERN_C() #define TS_HASH(table) (&(table->hash)) /* startup/shutdown */ ZEND_API void _zend_ts_hash_init(TsHashTable *ht, uint32_t nSize, dtor_func_t pDestructor, zend_bool persistent); ZEND_API void zend_ts_hash_destroy(TsHashTable *ht); ZEND_API void zend_ts_hash_clean(TsHashTable *ht); #define zend_ts_hash_init(ht, nSize, pHashFunction, pDestructor, persistent) \ _zend_ts_hash_init(ht, nSize, pDestructor, persistent) #define zend_ts_hash_init_ex(ht, nSize, pHashFunction, pDestructor, persistent, bApplyProtection) \ _zend_ts_hash_init(ht, nSize, pDestructor, persistent) /* additions/updates/changes */ ZEND_API zval *zend_ts_hash_update(TsHashTable *ht, zend_string *key, zval *pData); ZEND_API zval *zend_ts_hash_add(TsHashTable *ht, zend_string *key, zval *pData); ZEND_API zval *zend_ts_hash_index_update(TsHashTable *ht, zend_ulong h, zval *pData); ZEND_API zval *zend_ts_hash_next_index_insert(TsHashTable *ht, zval *pData); ZEND_API zval* zend_ts_hash_add_empty_element(TsHashTable *ht, zend_string *key); ZEND_API void zend_ts_hash_graceful_destroy(TsHashTable *ht); ZEND_API void zend_ts_hash_apply(TsHashTable *ht, apply_func_t apply_func); ZEND_API void zend_ts_hash_apply_with_argument(TsHashTable *ht, apply_func_arg_t apply_func, void *); ZEND_API void zend_ts_hash_apply_with_arguments(TsHashTable *ht, apply_func_args_t apply_func, int, ...); ZEND_API void zend_ts_hash_reverse_apply(TsHashTable *ht, apply_func_t apply_func); /* Deletes */ ZEND_API int zend_ts_hash_del(TsHashTable *ht, zend_string *key); ZEND_API int zend_ts_hash_index_del(TsHashTable *ht, zend_ulong h); /* Data retreival */ ZEND_API zval *zend_ts_hash_find(TsHashTable *ht, zend_string *key); ZEND_API zval *zend_ts_hash_index_find(TsHashTable *ht, zend_ulong); /* Misc */ ZEND_API int zend_ts_hash_exists(TsHashTable *ht, zend_string *key); ZEND_API int zend_ts_hash_index_exists(TsHashTable *ht, zend_ulong h); /* Copying, merging and sorting */ ZEND_API void zend_ts_hash_copy(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor); ZEND_API void zend_ts_hash_copy_to_hash(HashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor); ZEND_API void zend_ts_hash_merge(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, int overwrite); ZEND_API void zend_ts_hash_merge_ex(TsHashTable *target, TsHashTable *source, copy_ctor_func_t pCopyConstructor, merge_checker_func_t pMergeSource, void *pParam); ZEND_API int zend_ts_hash_sort(TsHashTable *ht, sort_func_t sort_func, compare_func_t compare_func, int renumber); ZEND_API int zend_ts_hash_compare(TsHashTable *ht1, TsHashTable *ht2, compare_func_t compar, zend_bool ordered); ZEND_API zval *zend_ts_hash_minmax(TsHashTable *ht, compare_func_t compar, int flag); ZEND_API int zend_ts_hash_num_elements(TsHashTable *ht); ZEND_API int zend_ts_hash_rehash(TsHashTable *ht); #if ZEND_DEBUG /* debug */ void zend_ts_hash_display_pListTail(TsHashTable *ht); void zend_ts_hash_display(TsHashTable *ht); #endif ZEND_API zval *zend_ts_hash_str_find(TsHashTable *ht, const char *key, size_t len); ZEND_API zval *zend_ts_hash_str_update(TsHashTable *ht, const char *key, size_t len, zval *pData); ZEND_API zval *zend_ts_hash_str_add(TsHashTable *ht, const char *key, size_t len, zval *pData); static zend_always_inline void *zend_ts_hash_str_find_ptr(TsHashTable *ht, const char *str, size_t len) { zval *zv; zv = zend_ts_hash_str_find(ht, str, len); return zv ? Z_PTR_P(zv) : NULL; } static zend_always_inline void *zend_ts_hash_str_update_ptr(TsHashTable *ht, const char *str, size_t len, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_ts_hash_str_update(ht, str, len, &tmp); return zv ? Z_PTR_P(zv) : NULL; } static zend_always_inline void *zend_ts_hash_str_add_ptr(TsHashTable *ht, const char *str, size_t len, void *pData) { zval tmp, *zv; ZVAL_PTR(&tmp, pData); zv = zend_ts_hash_str_add(ht, str, len, &tmp); return zv ? Z_PTR_P(zv) : NULL; } END_EXTERN_C() #define ZEND_TS_INIT_SYMTABLE(ht) \ ZEND_TS_INIT_SYMTABLE_EX(ht, 2, 0) #define ZEND_TS_INIT_SYMTABLE_EX(ht, n, persistent) \ zend_ts_hash_init(ht, n, NULL, ZVAL_PTR_DTOR, persistent) #endif /* ZEND_HASH_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!~  Zend/zend_globals_macros.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef ZEND_GLOBALS_MACROS_H #define ZEND_GLOBALS_MACROS_H typedef struct _zend_compiler_globals zend_compiler_globals; typedef struct _zend_executor_globals zend_executor_globals; typedef struct _zend_php_scanner_globals zend_php_scanner_globals; typedef struct _zend_ini_scanner_globals zend_ini_scanner_globals; BEGIN_EXTERN_C() /* Compiler */ #ifdef ZTS # define CG(v) ZEND_TSRMG(compiler_globals_id, zend_compiler_globals *, v) #else # define CG(v) (compiler_globals.v) extern ZEND_API struct _zend_compiler_globals compiler_globals; #endif ZEND_API int zendparse(void); /* Executor */ #ifdef ZTS # define EG(v) ZEND_TSRMG(executor_globals_id, zend_executor_globals *, v) #else # define EG(v) (executor_globals.v) extern ZEND_API zend_executor_globals executor_globals; #endif /* Language Scanner */ #ifdef ZTS # define LANG_SCNG(v) ZEND_TSRMG(language_scanner_globals_id, zend_php_scanner_globals *, v) extern ZEND_API ts_rsrc_id language_scanner_globals_id; #else # define LANG_SCNG(v) (language_scanner_globals.v) extern ZEND_API zend_php_scanner_globals language_scanner_globals; #endif /* INI Scanner */ #ifdef ZTS # define INI_SCNG(v) ZEND_TSRMG(ini_scanner_globals_id, zend_ini_scanner_globals *, v) extern ZEND_API ts_rsrc_id ini_scanner_globals_id; #else # define INI_SCNG(v) (ini_scanner_globals.v) extern ZEND_API zend_ini_scanner_globals ini_scanner_globals; #endif END_EXTERN_C() #endif /* ZEND_GLOBALS_MACROS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!ZmZend/zend_istdiostream.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef _ZEND_STDIOSTREAM #define _ZEND_STDIOSTREAM #if defined(ZTS) && !defined(HAVE_CLASS_ISTDIOSTREAM) class istdiostream : public istream { private: stdiobuf _file; public: istdiostream (FILE* __f) : istream(), _file(__f) { init(&_file); } stdiobuf* rdbuf()/* const */ { return &_file; } }; #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!HZend/zend_ini_scanner_defs.hnu[/* Generated by re2c 1.0.3 */ #line 3 "Zend/zend_ini_scanner_defs.h" enum YYCONDTYPE { yycINITIAL, yycST_OFFSET, yycST_SECTION_VALUE, yycST_VALUE, yycST_SECTION_RAW, yycST_DOUBLE_QUOTES, yycST_VARNAME, yycST_RAW, }; PK!̓\ Zend/zend_alloc_sizes.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #ifndef ZEND_ALLOC_SIZES_H #define ZEND_ALLOC_SIZES_H #define ZEND_MM_CHUNK_SIZE (2 * 1024 * 1024) /* 2 MB */ #define ZEND_MM_PAGE_SIZE (4 * 1024) /* 4 KB */ #define ZEND_MM_PAGES (ZEND_MM_CHUNK_SIZE / ZEND_MM_PAGE_SIZE) /* 512 */ #define ZEND_MM_FIRST_PAGE (1) #define ZEND_MM_MIN_SMALL_SIZE 8 #define ZEND_MM_MAX_SMALL_SIZE 3072 #define ZEND_MM_MAX_LARGE_SIZE (ZEND_MM_CHUNK_SIZE - (ZEND_MM_PAGE_SIZE * ZEND_MM_FIRST_PAGE)) /* num, size, count, pages */ #define ZEND_MM_BINS_INFO(_, x, y) \ _( 0, 8, 512, 1, x, y) \ _( 1, 16, 256, 1, x, y) \ _( 2, 24, 170, 1, x, y) \ _( 3, 32, 128, 1, x, y) \ _( 4, 40, 102, 1, x, y) \ _( 5, 48, 85, 1, x, y) \ _( 6, 56, 73, 1, x, y) \ _( 7, 64, 64, 1, x, y) \ _( 8, 80, 51, 1, x, y) \ _( 9, 96, 42, 1, x, y) \ _(10, 112, 36, 1, x, y) \ _(11, 128, 32, 1, x, y) \ _(12, 160, 25, 1, x, y) \ _(13, 192, 21, 1, x, y) \ _(14, 224, 18, 1, x, y) \ _(15, 256, 16, 1, x, y) \ _(16, 320, 64, 5, x, y) \ _(17, 384, 32, 3, x, y) \ _(18, 448, 9, 1, x, y) \ _(19, 512, 8, 1, x, y) \ _(20, 640, 32, 5, x, y) \ _(21, 768, 16, 3, x, y) \ _(22, 896, 9, 2, x, y) \ _(23, 1024, 8, 2, x, y) \ _(24, 1280, 16, 5, x, y) \ _(25, 1536, 8, 3, x, y) \ _(26, 1792, 16, 7, x, y) \ _(27, 2048, 8, 4, x, y) \ _(28, 2560, 8, 5, x, y) \ _(29, 3072, 4, 3, x, y) #endif /* ZEND_ALLOC_SIZES_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!!Wu-##!ext/mysqlnd/mysqlnd_result_meta.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Johannes Schlüter | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_RESULT_META_H #define MYSQLND_RESULT_META_H PHPAPI MYSQLND_RES_METADATA * mysqlnd_result_meta_init(MYSQLND_RES * result, unsigned int field_count); PHPAPI struct st_mysqlnd_res_meta_methods * mysqlnd_result_metadata_get_methods(); PHPAPI void ** _mysqlnd_plugin_get_plugin_result_metadata_data(const MYSQLND_RES_METADATA * meta, unsigned int plugin_id); #endif /* MYSQLND_RESULT_META_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!lext/mysqlnd/mysqlnd_commands.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_COMMANDS_H #define MYSQLND_COMMANDS_H extern func_mysqlnd__run_command mysqlnd_run_command; #endif /* MYSQLND_COMMANDS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!''ext/mysqlnd/mysqlnd_debug.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_DEBUG_H #define MYSQLND_DEBUG_H #include "mysqlnd_alloc.h" #include "zend_stack.h" struct st_mysqlnd_debug_methods { enum_func_status (*open)(MYSQLND_DEBUG * self, zend_bool reopen); void (*set_mode)(MYSQLND_DEBUG * self, const char * const mode); enum_func_status (*log)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, unsigned int level, const char * type, const char *message); enum_func_status (*log_va)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, unsigned int level, const char * type, const char *format, ...); zend_bool (*func_enter)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, const char * const func_name, unsigned int func_name_len); enum_func_status (*func_leave)(MYSQLND_DEBUG * self, unsigned int line, const char * const file, uint64_t call_time); enum_func_status (*close)(MYSQLND_DEBUG * self); enum_func_status (*free_handle)(MYSQLND_DEBUG * self); }; struct st_mysqlnd_debug { php_stream *stream; unsigned int flags; unsigned int nest_level_limit; int pid; char * file_name; zend_stack call_stack; zend_stack call_time_stack; HashTable not_filtered_functions; HashTable function_profiles; struct st_mysqlnd_debug_methods *m; const char ** skip_functions; }; struct st_mysqlnd_plugin_trace_log { struct st_mysqlnd_plugin_header plugin_header; struct { MYSQLND_DEBUG * (*trace_instance_init)(const char * skip_functions[]); } methods; }; void mysqlnd_debug_trace_plugin_register(void); PHPAPI MYSQLND_DEBUG * mysqlnd_debug_init(const char * skip_functions[]); #define MYSQLND_DEBUG_DUMP_TIME 1 #define MYSQLND_DEBUG_DUMP_TRACE 2 #define MYSQLND_DEBUG_DUMP_PID 4 #define MYSQLND_DEBUG_DUMP_LINE 8 #define MYSQLND_DEBUG_DUMP_FILE 16 #define MYSQLND_DEBUG_DUMP_LEVEL 32 #define MYSQLND_DEBUG_APPEND 64 #define MYSQLND_DEBUG_FLUSH 128 #define MYSQLND_DEBUG_TRACE_MEMORY_CALLS 256 #define MYSQLND_DEBUG_PROFILE_CALLS 512 #if defined(__GNUC__) || defined(PHP_WIN32) #ifdef PHP_WIN32 #include "win32/time.h" #else #include #endif #ifndef MYSQLND_PROFILING_DISABLED #define DBG_PROFILE_TIMEVAL_TO_DOUBLE(tp) ((tp.tv_sec * 1000000LL)+ tp.tv_usec) #define DBG_PROFILE_START_TIME() gettimeofday(&__dbg_prof_tp, NULL); __dbg_prof_start = DBG_PROFILE_TIMEVAL_TO_DOUBLE(__dbg_prof_tp); #define DBG_PROFILE_END_TIME(duration) gettimeofday(&__dbg_prof_tp, NULL); (duration) = (DBG_PROFILE_TIMEVAL_TO_DOUBLE(__dbg_prof_tp) - __dbg_prof_start); #else #define DBG_PROFILE_TIMEVAL_TO_DOUBLE(tp) #define DBG_PROFILE_START_TIME() #define DBG_PROFILE_END_TIME(duration) #endif #define DBG_INF_EX(dbg_obj, msg) do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "info : ", (msg)); } while (0) #define DBG_ERR_EX(dbg_obj, msg) do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log((dbg_obj), __LINE__, __FILE__, -1, "error: ", (msg)); } while (0) #define DBG_INF_FMT_EX(dbg_obj, ...) do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log_va((dbg_obj), __LINE__, __FILE__, -1, "info : ", __VA_ARGS__); } while (0) #define DBG_ERR_FMT_EX(dbg_obj, ...) do { if (dbg_skip_trace == FALSE && (dbg_obj)) (dbg_obj)->m->log_va((dbg_obj), __LINE__, __FILE__, -1, "error: ", __VA_ARGS__); } while (0) #define DBG_BLOCK_ENTER_EX(dbg_obj, block_name) DBG_BLOCK_ENTER_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL, (block_name)) #define DBG_BLOCK_LEAVE_EX(dbg_obj) DBG_BLOCK_LEAVE_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL) #define DBG_BLOCK_ENTER_EX2(dbg_obj1, dbg_obj2, block_name) \ { \ DBG_ENTER_EX2((dbg_obj1), (dbg_obj2), (block_name)); #define DBG_BLOCK_LEAVE_EX2(dbg_obj1, dbg_obj2) \ DBG_LEAVE_EX2((dbg_obj1), (dbg_obj2), ;) \ } \ #define DBG_ENTER_EX(dbg_obj, func_name) DBG_ENTER_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL, (func_name)) #define DBG_LEAVE_EX(dbg_obj, leave) DBG_LEAVE_EX2((dbg_obj), (MYSQLND_DEBUG *) NULL, leave) #define DBG_ENTER_EX2(dbg_obj1, dbg_obj2, func_name) \ struct timeval __dbg_prof_tp = {0}; \ uint64_t __dbg_prof_start = 0; /* initialization is needed */ \ zend_bool dbg_skip_trace = TRUE; \ ((void)__dbg_prof_start); \ if ((dbg_obj1)) { \ dbg_skip_trace = !(dbg_obj1)->m->func_enter((dbg_obj1), __LINE__, __FILE__, func_name, strlen(func_name)); \ } \ if ((dbg_obj2)) { \ dbg_skip_trace |= !(dbg_obj2)->m->func_enter((dbg_obj2), __LINE__, __FILE__, func_name, strlen(func_name)); \ } \ if (dbg_skip_trace) { \ /* EMPTY */ ; /* shut compiler's mouth */ \ } \ do { \ if (((dbg_obj1) && (dbg_obj1)->flags & MYSQLND_DEBUG_PROFILE_CALLS) || \ ((dbg_obj2) && (dbg_obj2)->flags & MYSQLND_DEBUG_PROFILE_CALLS)) \ { \ DBG_PROFILE_START_TIME(); \ } \ } while (0); #define DBG_LEAVE_EX2(dbg_obj1, dbg_obj2, leave) \ do {\ uint64_t this_call_duration = 0; \ if (((dbg_obj1) && (dbg_obj1)->flags & MYSQLND_DEBUG_PROFILE_CALLS) || \ ((dbg_obj2) && (dbg_obj2)->flags & MYSQLND_DEBUG_PROFILE_CALLS)) \ { \ DBG_PROFILE_END_TIME(this_call_duration); \ } \ if ((dbg_obj1)) { \ (dbg_obj1)->m->func_leave((dbg_obj1), __LINE__, __FILE__, this_call_duration); \ } \ if ((dbg_obj2)) { \ (dbg_obj2)->m->func_leave((dbg_obj2), __LINE__, __FILE__, this_call_duration); \ } \ leave \ } while (0); #define DBG_RETURN_EX(dbg_obj, value) DBG_LEAVE_EX((dbg_obj), return (value);) #define DBG_VOID_RETURN_EX(dbg_obj) DBG_LEAVE_EX((dbg_obj), return;) #define DBG_RETURN_EX2(dbg_obj1, dbg_obj2, value) DBG_LEAVE_EX2((dbg_obj1), (dbg_obj2), return (value);) #define DBG_VOID_RETURN_EX2(dbg_obj1, dbg_obj2) DBG_LEAVE_EX2((dbg_obj1), (dbg_obj2), return;) #else /* defined(__GNUC__) || defined(PHP_WIN32) */ static inline void DBG_INF_EX(MYSQLND_DEBUG * dbg_obj, const char * const msg) {} static inline void DBG_ERR_EX(MYSQLND_DEBUG * dbg_obj, const char * const msg) {} static inline void DBG_INF_FMT_EX(MYSQLND_DEBUG * dbg_obj, ...) {} static inline void DBG_ERR_FMT_EX(MYSQLND_DEBUG * dbg_obj, ...) {} static inline void DBG_ENTER_EX(MYSQLND_DEBUG * dbg_obj, const char * const func_name) {} #define DBG_BLOCK_ENTER(bname) { #define DBG_RETURN_EX(dbg_obj, value) return (value) #define DBG_VOID_RETURN_EX(dbg_obj) return #define DBG_BLOCK_LEAVE_EX(dbg_obj) } #endif #if MYSQLND_DBG_ENABLED == 1 #define DBG_INF(msg) DBG_INF_EX(MYSQLND_G(dbg), (msg)) #define DBG_ERR(msg) DBG_ERR_EX(MYSQLND_G(dbg), (msg)) #define DBG_INF_FMT(...) DBG_INF_FMT_EX(MYSQLND_G(dbg), __VA_ARGS__) #define DBG_ERR_FMT(...) DBG_ERR_FMT_EX(MYSQLND_G(dbg), __VA_ARGS__) #define DBG_ENTER(func_name) DBG_ENTER_EX(MYSQLND_G(dbg), (func_name)) #define DBG_BLOCK_ENTER(bname) DBG_BLOCK_ENTER_EX(MYSQLND_G(dbg), (bname)) #define DBG_RETURN(value) DBG_RETURN_EX(MYSQLND_G(dbg), (value)) #define DBG_VOID_RETURN DBG_VOID_RETURN_EX(MYSQLND_G(dbg)) #define DBG_BLOCK_LEAVE DBG_BLOCK_LEAVE_EX(MYSQLND_G(dbg)) #define TRACE_ALLOC_INF(msg) DBG_INF_EX(MYSQLND_G(trace_alloc), (msg)) #define TRACE_ALLOC_ERR(msg) DBG_ERR_EX(MYSQLND_G(trace_alloc), (msg)) #define TRACE_ALLOC_INF_FMT(...) DBG_INF_FMT_EX(MYSQLND_G(trace_alloc), __VA_ARGS__) #define TRACE_ALLOC_ERR_FMT(...) DBG_ERR_FMT_EX(MYSQLND_G(trace_alloc), __VA_ARGS__) #define TRACE_ALLOC_ENTER(func_name) DBG_ENTER_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc), (func_name)) #define TRACE_ALLOC_BLOCK_ENTER(bname) DBG_BLOCK_ENTER_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc), (bname)) #define TRACE_ALLOC_RETURN(value) DBG_RETURN_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc), (value)) #define TRACE_ALLOC_VOID_RETURN DBG_VOID_RETURN_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc)) #define TRACE_ALLOC_BLOCK_LEAVE DBG_BLOCK_LEAVE_EX2(MYSQLND_G(dbg), MYSQLND_G(trace_alloc)) #elif MYSQLND_DBG_ENABLED == 0 static inline void DBG_INF(const char * const msg) {} static inline void DBG_ERR(const char * const msg) {} static inline void DBG_INF_FMT(const char * const format, ...) {} static inline void DBG_ERR_FMT(const char * const format, ...) {} static inline void DBG_ENTER(const char * const func_name) {} #define DBG_BLOCK_ENTER(bname) { #define DBG_RETURN(value) return (value) #define DBG_VOID_RETURN return #define DBG_BLOCK_LEAVE } static inline void TRACE_ALLOC_INF(const char * const msg) {} static inline void TRACE_ALLOC_ERR(const char * const msg) {} static inline void TRACE_ALLOC_INF_FMT(const char * const format, ...) {} static inline void TRACE_ALLOC_ERR_FMT(const char * const format, ...) {} static inline void TRACE_ALLOC_ENTER(const char * const func_name) {} #define TRACE_ALLOC_BLOCK_ENTER(bname) { #define TRACE_ALLOC_RETURN(value) return (value) #define TRACE_ALLOC_VOID_RETURN return #define TRACE_ALLOC_BLOCK_LEAVE } #endif #endif /* MYSQLND_DEBUG_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!ext/mysqlnd/php_mysqlnd.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef PHP_MYSQLND_H #define PHP_MYSQLND_H #define phpext_mysqlnd_ptr &mysqlnd_module_entry extern zend_module_entry mysqlnd_module_entry; #endif /* PHP_MYSQLND_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!(`!ext/mysqlnd/mysqlnd_reverse_api.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | | Georg Richter | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_REVERSE_API_H #define MYSQLND_REVERSE_API_H typedef struct st_mysqlnd_reverse_api { zend_module_entry * module; MYSQLND *(*conversion_cb)(zval * zv); } MYSQLND_REVERSE_API; PHPAPI void mysqlnd_reverse_api_init(void); PHPAPI void mysqlnd_reverse_api_end(void); PHPAPI HashTable * mysqlnd_reverse_api_get_api_list(void); PHPAPI void mysqlnd_reverse_api_register_api(const MYSQLND_REVERSE_API * apiext); PHPAPI MYSQLND * zval_to_mysqlnd(zval * zv, const unsigned int client_api_capabilities, unsigned int * save_client_api_capabilities); #endif /* MYSQLND_REVERSE_API_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!~cL[f f ext/mysqlnd/mysqlnd_priv.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_PRIV_H #define MYSQLND_PRIV_H PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_object_factory); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_conn); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_conn_data); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_res); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_unbuffered); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_result_buffered); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol_payload_decoder_factory); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_protocol_packet_frame_codec); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_vio); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_upsert_status); PHPAPI extern MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(mysqlnd_error_info); enum_func_status mysqlnd_handle_local_infile(MYSQLND_CONN_DATA * conn, const char * const filename, zend_bool * is_warning); #endif /* MYSQLND_PRIV_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK! BB!ext/mysqlnd/mysqlnd_portability.hnu[/* Copyright Abandoned 1996 TCX DataKonsult AB & Monty Program KB & Detron HB This file is public domain and comes with NO WARRANTY of any kind */ /* Parts of the original, which are not applicable to mysqlnd have been removed. With small modifications, mostly casting but adding few more macros by Andrey Hristov . The additions are in the public domain and were added to improve the header file, to get it more consistent. */ #ifndef MYSQLND_PORTABILITY_H #define MYSQLND_PORTABILITY_H /* Comes from global.h as OFFSET, renamed to STRUCT_OFFSET */ #define STRUCT_OFFSET(t, f) ((size_t)(char *)&((t *)0)->f) #ifndef __attribute #if !defined(__GNUC__) #define __attribute(A) #endif #endif #ifdef __CYGWIN__ /* We use a Unix API, so pretend it's not Windows */ #undef WIN #undef WIN32 #undef _WIN #undef _WIN32 #undef _WIN64 #undef __WIN__ #undef __WIN32__ #endif /* __CYGWIN__ */ #if defined(_WIN32) || defined(_WIN64) || defined(__WIN32__) || defined(WIN32) # include "ext/mysqlnd/config-win.h" #endif /* _WIN32... */ #if __STDC_VERSION__ < 199901L && !defined(atoll) /* "inline" is a keyword */ #define atoll atol #endif #include "php_stdint.h" #if SIZEOF_LONG_LONG > 4 && !defined(_LONG_LONG) #define _LONG_LONG 1 /* For AIX string library */ #endif /* Go around some bugs in different OS and compilers */ #if defined(_HPUX_SOURCE) && defined(HAVE_SYS_STREAM_H) #include /* HPUX 10.20 defines ulong here. UGLY !!! */ #define HAVE_ULONG #endif #if SIZEOF_LONG_LONG > 4 #define HAVE_LONG_LONG 1 #endif #ifdef PHP_WIN32 #define MYSQLND_LLU_SPEC "%I64u" #define MYSQLND_LL_SPEC "%I64d" #define MYSQLND_SZ_T_SPEC "%Id" #ifndef L64 #define L64(x) x##i64 #endif #else #if __i386__ #define MYSQLND_LL_SPEC "%lli" #define MYSQLND_LLU_SPEC "%llu" #endif #if __ia64__ #define MYSQLND_LL_SPEC "%li" #define MYSQLND_LLU_SPEC "%lu" #endif #if __powerpc64__ || __ppc64__ #define MYSQLND_LL_SPEC "%li" #define MYSQLND_LLU_SPEC "%lu" #endif #if (__powerpc__ || __ppc__ ) && !(__powerpc64__ || __ppc64__) #define MYSQLND_LL_SPEC "%lli" #define MYSQLND_LLU_SPEC "%llu" #endif #if __x86_64__ #define MYSQLND_LL_SPEC "%li" #define MYSQLND_LLU_SPEC "%lu" #endif #if __s390x__ #define MYSQLND_LL_SPEC "%li" #define MYSQLND_LLU_SPEC "%lu" #endif #if __s390__ && !__s390x__ #define MYSQLND_LL_SPEC "%lli" #define MYSQLND_LLU_SPEC "%llu" #endif #ifdef _AIX #define MYSQLND_LL_SPEC "%lli" #define MYSQLND_LLU_SPEC "%llu" #endif #ifndef MYSQLND_LL_SPEC #if SIZEOF_LONG == 8 #define MYSQLND_LL_SPEC "%li" #elif SIZEOF_LONG == 4 #define MYSQLND_LL_SPEC "%lli" #endif #endif #ifndef MYSQLND_LLU_SPEC #if SIZEOF_LONG == 8 #define MYSQLND_LLU_SPEC "%lu" #elif SIZEOF_LONG == 4 #define MYSQLND_LLU_SPEC "%llu" #endif #endif /* MYSQLND_LLU_SPEC*/ #define MYSQLND_SZ_T_SPEC "%zd" #ifndef L64 #define L64(x) x##LL #endif #endif #define int1store(T,A) do { *((int8_t*) (T)) = (A); } while(0) #define uint1korr(A) (*(((uint8_t*)(A)))) /* Bit values are sent in reverted order of bytes, compared to normal !!! */ #define bit_uint2korr(A) ((uint16_t) (((uint16_t) (((unsigned char*) (A))[1])) +\ ((uint16_t) (((unsigned char*) (A))[0]) << 8))) #define bit_uint3korr(A) ((uint32_t) (((uint32_t) (((unsigned char*) (A))[2])) +\ (((uint32_t) (((unsigned char*) (A))[1])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[0])) << 16))) #define bit_uint4korr(A) ((uint32_t) (((uint32_t) (((unsigned char*) (A))[3])) +\ (((uint32_t) (((unsigned char*) (A))[2])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[1])) << 16) +\ (((uint32_t) (((unsigned char*) (A))[0])) << 24))) #define bit_uint5korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[4])) +\ (((uint32_t) (((unsigned char*) (A))[3])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[2])) << 16) +\ (((uint32_t) (((unsigned char*) (A))[1])) << 24)) +\ (((uint64_t) (((unsigned char*) (A))[0])) << 32)) #define bit_uint6korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[5])) +\ (((uint32_t) (((unsigned char*) (A))[4])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[3])) << 16) +\ (((uint32_t) (((unsigned char*) (A))[2])) << 24)) +\ (((uint64_t) (((uint32_t) (((unsigned char*) (A))[1])) +\ (((uint32_t) (((unsigned char*) (A))[0]) << 8)))) <<\ 32)) #define bit_uint7korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[6])) +\ (((uint32_t) (((unsigned char*) (A))[5])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[4])) << 16) +\ (((uint32_t) (((unsigned char*) (A))[3])) << 24)) +\ (((uint64_t) (((uint32_t) (((unsigned char*) (A))[2])) +\ (((uint32_t) (((unsigned char*) (A))[1])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[0])) << 16))) <<\ 32)) #define bit_uint8korr(A) ((uint64_t)(((uint32_t) (((unsigned char*) (A))[7])) +\ (((uint32_t) (((unsigned char*) (A))[6])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[5])) << 16) +\ (((uint32_t) (((unsigned char*) (A))[4])) << 24)) +\ (((uint64_t) (((uint32_t) (((unsigned char*) (A))[3])) +\ (((uint32_t) (((unsigned char*) (A))[2])) << 8) +\ (((uint32_t) (((unsigned char*) (A))[1])) << 16) +\ (((uint32_t) (((unsigned char*) (A))[0])) << 24))) <<\ 32)) /* ** Define-funktions for reading and storing in machine independent format ** (low byte first) */ /* Optimized store functions for Intel x86, non-valid for WIN64. __i386__ is GCC */ #if defined(__i386__) && !defined(_WIN64) #define sint2korr(A) (*((int16_t *) (A))) #define sint3korr(A) ((int32_t) ((((zend_uchar) (A)[2]) & 128) ? \ (((uint32_t) 255L << 24) | \ (((uint32_t) (zend_uchar) (A)[2]) << 16) |\ (((uint32_t) (zend_uchar) (A)[1]) << 8) | \ ((uint32_t) (zend_uchar) (A)[0])) : \ (((uint32_t) (zend_uchar) (A)[2]) << 16) |\ (((uint32_t) (zend_uchar) (A)[1]) << 8) | \ ((uint32_t) (zend_uchar) (A)[0]))) #define sint4korr(A) (*((zend_long *) (A))) #define uint2korr(A) (*((uint16_t *) (A))) #define uint3korr(A) (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\ (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\ (((uint32_t) ((zend_uchar) (A)[2])) << 16)) #define uint4korr(A) (*((zend_ulong *) (A))) #define uint8korr(A) (*((uint64_t *) (A))) #define sint8korr(A) (*((int64_t *) (A))) #define int2store(T,A) *((uint16_t*) (T))= (uint16_t) (A) #define int3store(T,A) { \ *(T)= (zend_uchar) ((A));\ *(T+1)=(zend_uchar) (((uint32_t) (A) >> 8));\ *(T+2)=(zend_uchar) (((A) >> 16)); } #define int4store(T,A) *((zend_long *) (T))= (zend_long) (A) #define int5store(T,A) { \ *((zend_uchar *)(T))= (zend_uchar)((A));\ *(((zend_uchar *)(T))+1)=(zend_uchar) (((A) >> 8));\ *(((zend_uchar *)(T))+2)=(zend_uchar) (((A) >> 16));\ *(((zend_uchar *)(T))+3)=(zend_uchar) (((A) >> 24)); \ *(((zend_uchar *)(T))+4)=(zend_uchar) (((A) >> 32)); } /* From Andrey Hristov, based on int5store() */ #define int6store(T,A) { \ *(((zend_uchar *)(T)))= (zend_uchar)((A));\ *(((zend_uchar *)(T))+1))=(zend_uchar) (((A) >> 8));\ *(((zend_uchar *)(T))+2))=(zend_uchar) (((A) >> 16));\ *(((zend_uchar *)(T))+3))=(zend_uchar) (((A) >> 24)); \ *(((zend_uchar *)(T))+4))=(zend_uchar) (((A) >> 32)); \ *(((zend_uchar *)(T))+5))=(zend_uchar) (((A) >> 40)); } #define int8store(T,A) *((uint64_t *) (T))= (uint64_t) (A) typedef union { double v; zend_long m[2]; } float8get_union; #define float8get(V,M) { ((float8get_union *)&(V))->m[0] = *((zend_long*) (M)); \ ((float8get_union *)&(V))->m[1] = *(((zend_long*) (M))+1); } #define float8store(T,V) { *((zend_long *) (T)) = ((float8get_union *)&(V))->m[0]; \ *(((zend_long *) (T))+1) = ((float8get_union *)&(V))->m[1]; } #define float4get(V,M) { *((float *) &(V)) = *((float*) (M)); } /* From Andrey Hristov based on float8get */ #define floatget(V,M) memcpy((char*) &(V),(char*) (M),sizeof(float)) #endif /* __i386__ */ /* If we haven't defined sint2korr, which is because the platform is not x86 or it's WIN64 */ #ifndef sint2korr #define sint2korr(A) (int16_t) (((int16_t) ((zend_uchar) (A)[0])) +\ ((int16_t) ((int16_t) (A)[1]) << 8)) #define sint3korr(A) ((int32_t) ((((zend_uchar) (A)[2]) & 128) ? \ (((uint32_t) 255L << 24) | \ (((uint32_t) (zend_uchar) (A)[2]) << 16) |\ (((uint32_t) (zend_uchar) (A)[1]) << 8) | \ ((uint32_t) (zend_uchar) (A)[0])) : \ (((uint32_t) (zend_uchar) (A)[2]) << 16) |\ (((uint32_t) (zend_uchar) (A)[1]) << 8) | \ ((uint32_t) (zend_uchar) (A)[0]))) #define sint4korr(A) (int32_t) (((int32_t) ((zend_uchar) (A)[0])) +\ (((int32_t) ((zend_uchar) (A)[1]) << 8)) +\ (((int32_t) ((zend_uchar) (A)[2]) << 16)) +\ (((int32_t) ((int16_t) (A)[3]) << 24))) #define sint8korr(A) (int64_t) uint8korr(A) #define uint2korr(A) (uint16_t) (((uint16_t) ((zend_uchar) (A)[0])) +\ ((uint16_t) ((zend_uchar) (A)[1]) << 8)) #define uint3korr(A) (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\ (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\ (((uint32_t) ((zend_uchar) (A)[2])) << 16)) #define uint4korr(A) (uint32_t) (((uint32_t) ((zend_uchar) (A)[0])) +\ (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\ (((uint32_t) ((zend_uchar) (A)[2])) << 16) +\ (((uint32_t) ((zend_uchar) (A)[3])) << 24)) #define uint8korr(A) ((uint64_t)(((uint32_t) ((zend_uchar) (A)[0])) +\ (((uint32_t) ((zend_uchar) (A)[1])) << 8) +\ (((uint32_t) ((zend_uchar) (A)[2])) << 16) +\ (((uint32_t) ((zend_uchar) (A)[3])) << 24)) +\ (((uint64_t) (((uint32_t) ((zend_uchar) (A)[4])) +\ (((uint32_t) ((zend_uchar) (A)[5])) << 8) +\ (((uint32_t) ((zend_uchar) (A)[6])) << 16) +\ (((uint32_t) ((zend_uchar) (A)[7])) << 24))) << 32)) #define int2store(T,A) do { uint32_t def_temp= (uint32_t) (A) ;\ *((zend_uchar*) (T)) = (zend_uchar)(def_temp); \ *((zend_uchar*) (T+1)) = (zend_uchar)((def_temp >> 8)); } while (0) #define int3store(T,A) do { /*lint -save -e734 */\ *(((char *)(T))) = (char) ((A));\ *(((char *)(T))+1) = (char) (((A) >> 8));\ *(((char *)(T))+2) = (char) (((A) >> 16)); \ /*lint -restore */} while (0) #define int4store(T,A) do { \ *(((char *)(T))) = (char) ((A));\ *(((char *)(T))+1) = (char) (((A) >> 8));\ *(((char *)(T))+2) = (char) (((A) >> 16));\ *(((char *)(T))+3) = (char) (((A) >> 24)); } while (0) #define int5store(T,A) do { \ *(((char *)(T))) = (char)((A));\ *(((char *)(T))+1) = (char)(((A) >> 8));\ *(((char *)(T))+2) = (char)(((A) >> 16));\ *(((char *)(T))+3) = (char)(((A) >> 24)); \ *(((char *)(T))+4) = (char)(((A) >> 32)); } while (0) /* Based on int5store() from Andrey Hristov */ #define int6store(T,A) do { \ *(((char *)(T))) = (char)((A));\ *(((char *)(T))+1) = (char)(((A) >> 8));\ *(((char *)(T))+2) = (char)(((A) >> 16));\ *(((char *)(T))+3) = (char)(((A) >> 24)); \ *(((char *)(T))+4) = (char)(((A) >> 32)); \ *(((char *)(T))+5) = (char)(((A) >> 40)); } while (0) #define int8store(T,A) { uint32_t def_temp= (uint32_t) (A), def_temp2= (uint32_t) ((A) >> 32); \ int4store((T),def_temp); \ int4store((T+4),def_temp2); \ } #ifdef WORDS_BIGENDIAN #define float4get(V,M) do { float def_temp;\ ((char*) &def_temp)[0] = (M)[3];\ ((char*) &def_temp)[1] = (M)[2];\ ((char*) &def_temp)[2] = (M)[1];\ ((char*) &def_temp)[3] = (M)[0];\ (V)=def_temp; } while (0) #define float8store(T,V) do { \ *(((char *)(T))) = (char) ((char *) &(V))[7];\ *(((char *)(T))+1) = (char) ((char *) &(V))[6];\ *(((char *)(T))+2) = (char) ((char *) &(V))[5];\ *(((char *)(T))+3) = (char) ((char *) &(V))[4];\ *(((char *)(T))+4) = (char) ((char *) &(V))[3];\ *(((char *)(T))+5) = (char) ((char *) &(V))[2];\ *(((char *)(T))+6) = (char) ((char *) &(V))[1];\ *(((char *)(T))+7) = (char) ((char *) &(V))[0]; } while (0) #define float8get(V,M) do { double def_temp;\ ((char*) &def_temp)[0] = (M)[7];\ ((char*) &def_temp)[1] = (M)[6];\ ((char*) &def_temp)[2] = (M)[5];\ ((char*) &def_temp)[3] = (M)[4];\ ((char*) &def_temp)[4] = (M)[3];\ ((char*) &def_temp)[5] = (M)[2];\ ((char*) &def_temp)[6] = (M)[1];\ ((char*) &def_temp)[7] = (M)[0];\ (V) = def_temp; \ } while (0) #else #define float4get(V,M) memcpy((char*) &(V),(char*) (M),sizeof(float)) #if defined(__FLOAT_WORD_ORDER) && (__FLOAT_WORD_ORDER == __BIG_ENDIAN) #define float8store(T,V) do { \ *(((char *)(T)))= ((char *) &(V))[4];\ *(((char *)(T))+1)=(char) ((char *) &(V))[5];\ *(((char *)(T))+2)=(char) ((char *) &(V))[6];\ *(((char *)(T))+3)=(char) ((char *) &(V))[7];\ *(((char *)(T))+4)=(char) ((char *) &(V))[0];\ *(((char *)(T))+5)=(char) ((char *) &(V))[1];\ *(((char *)(T))+6)=(char) ((char *) &(V))[2];\ *(((char *)(T))+7)=(char) ((char *) &(V))[3];} while (0) #define float8get(V,M) do { double def_temp;\ ((char*) &def_temp)[0]=(M)[4];\ ((char*) &def_temp)[1]=(M)[5];\ ((char*) &def_temp)[2]=(M)[6];\ ((char*) &def_temp)[3]=(M)[7];\ ((char*) &def_temp)[4]=(M)[0];\ ((char*) &def_temp)[5]=(M)[1];\ ((char*) &def_temp)[6]=(M)[2];\ ((char*) &def_temp)[7]=(M)[3];\ (V) = def_temp; } while (0) #endif /* __FLOAT_WORD_ORDER */ #endif /* WORDS_BIGENDIAN */ #endif /* sint2korr */ /* To here if the platform is not x86 or it's WIN64 */ /* Define-funktions for reading and storing in machine format from/to short/long to/from some place in memory V should be a (not register) variable, M is a pointer to byte */ #ifndef float8get #ifdef WORDS_BIGENDIAN #define float8get(V,M) memcpy((char*) &(V),(char*) (M), sizeof(double)) #define float8store(T,V) memcpy((char*) (T),(char*) &(V), sizeof(double)) #else #define float8get(V,M) memcpy((char*) &(V),(char*) (M),sizeof(double)) #define float8store(T,V) memcpy((char*) (T),(char*) &(V),sizeof(double)) #endif /* WORDS_BIGENDIAN */ #endif /* float8get */ #endif /* MYSQLND_PORTABILITY_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!CAUext/mysqlnd/mysqlnd_structs.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_STRUCTS_H #define MYSQLND_STRUCTS_H #include "zend_smart_str_public.h" #define MYSQLND_TYPEDEFED_METHODS #define MYSQLND_CLASS_METHOD_TABLE_NAME(class) mysqlnd_##class##_methods #define MYSQLND_CLASS_METHODS_TYPE(class) struct st_##class##_methods #define MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) MYSQLND_CLASS_METHODS_TYPE(class) MYSQLND_CLASS_METHOD_TABLE_NAME(class) #define MYSQLND_CLASS_METHODS_START(class) MYSQLND_CLASS_METHOD_TABLE_NAME_FORWARD(class) = { #define MYSQLND_CLASS_METHODS_END } #define MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) mysqlnd_##class##_methods_ptr #define MYSQLND_CLASS_METHODS_INSTANCE_DECLARE(class) extern const MYSQLND_CLASS_METHODS_TYPE(class) * MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) #define MYSQLND_CLASS_METHODS_INSTANCE_DEFINE(class) const MYSQLND_CLASS_METHODS_TYPE(class) * MYSQLND_CLASS_METHODS_INSTANCE_NAME(class) = & MYSQLND_CLASS_METHOD_TABLE_NAME(class) typedef struct st_mysqlnd_string { char *s; size_t l; } MYSQLND_STRING; typedef struct st_mysqlnd_const_string { const char *s; size_t l; } MYSQLND_CSTRING; typedef struct st_mysqlnd_memory_pool MYSQLND_MEMORY_POOL; struct st_mysqlnd_memory_pool { zend_arena *arena; void *last; void *checkpoint; void* (*get_chunk)(MYSQLND_MEMORY_POOL * pool, size_t size); void* (*resize_chunk)(MYSQLND_MEMORY_POOL * pool, void * ptr, size_t old_size, size_t size); void (*free_chunk)(MYSQLND_MEMORY_POOL * pool, void * ptr); }; typedef struct st_mysqlnd_row_buffer MYSQLND_ROW_BUFFER; struct st_mysqlnd_row_buffer { void *ptr; size_t size; }; typedef struct st_mysqlnd_cmd_buffer { zend_uchar *buffer; size_t length; } MYSQLND_CMD_BUFFER; typedef struct st_mysqlnd_field { zend_string *sname; /* Name of column */ zend_bool is_numeric; zend_ulong num_key; const char *name; /* Name of column in C string */ const char *org_name; /* Original column name, if an alias */ const char *table; /* Table of column if column was a field */ const char *org_table; /* Org table name, if table was an alias */ const char *db; /* Database for table */ const char *catalog; /* Catalog for table */ char *def; /* Default value */ zend_ulong length; /* Width of column (create length) */ zend_ulong max_length; /* Max width for selected set */ unsigned int name_length; unsigned int org_name_length; unsigned int table_length; unsigned int org_table_length; unsigned int db_length; unsigned int catalog_length; unsigned int def_length; unsigned int flags; /* Diverse flags */ unsigned int decimals; /* Number of decimals in field */ unsigned int charsetnr; /* Character set */ enum mysqlnd_field_types type; /* Type of field. See mysql_com.h for types */ char *root; size_t root_len; } MYSQLND_FIELD; typedef struct st_mysqlnd_upsert_status MYSQLND_UPSERT_STATUS; typedef void (*func_mysqlnd_upsert_status__reset)(MYSQLND_UPSERT_STATUS * const upsert_status); typedef void (*func_mysqlnd_upsert_status__set_affected_rows_to_error)(MYSQLND_UPSERT_STATUS * const upsert_status); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_upsert_status) { func_mysqlnd_upsert_status__reset reset; func_mysqlnd_upsert_status__set_affected_rows_to_error set_affected_rows_to_error; }; struct st_mysqlnd_upsert_status { unsigned int warning_count; unsigned int server_status; uint64_t affected_rows; uint64_t last_insert_id; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_upsert_status) *m; }; #define SET_EMPTY_ERROR(info) (info)->m->reset((info)) #define SET_CLIENT_ERROR(info, err_no, sqlstate, error) (err_no)? (info)->m->set_client_error((info), (err_no), (sqlstate), (error)) : (info)->m->reset((info)) #define SET_OOM_ERROR(info) SET_CLIENT_ERROR((info), CR_OUT_OF_MEMORY, UNKNOWN_SQLSTATE, mysqlnd_out_of_memory) #define COPY_CLIENT_ERROR(dest, source) SET_CLIENT_ERROR((dest), (source).error_no, (source).sqlstate, (source).error) typedef struct st_mysqlnd_error_info MYSQLND_ERROR_INFO; typedef void (*func_mysqlnd_error_info__reset)(MYSQLND_ERROR_INFO * const info); typedef void (*func_mysqlnd_error_info__set_client_error)(MYSQLND_ERROR_INFO * const info, const unsigned int err_no, const char * const sqlstate, const char * const error); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) { func_mysqlnd_error_info__reset reset; func_mysqlnd_error_info__set_client_error set_client_error; }; struct st_mysqlnd_error_info { char error[MYSQLND_ERRMSG_SIZE+1]; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; zend_llist error_list; zend_bool persistent; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) *m; }; typedef struct st_mysqlnd_error_list_element { char * error; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; } MYSQLND_ERROR_LIST_ELEMENT; typedef struct st_mysqlnd_infile_info { php_stream *fd; int error_no; char error_msg[MYSQLND_ERRMSG_SIZE + 1]; const char *filename; } MYSQLND_INFILE_INFO; /* character set information */ typedef struct st_mysqlnd_charset { unsigned int nr; const char *name; const char *collation; unsigned int char_minlen; unsigned int char_maxlen; const char *comment; unsigned int (*mb_charlen)(unsigned int c); unsigned int (*mb_valid)(const char *start, const char *end); } MYSQLND_CHARSET; /* local infile handler */ typedef struct st_mysqlnd_infile { int (*local_infile_init)(void **ptr, const char * const filename); int (*local_infile_read)(void *ptr, zend_uchar * buf, unsigned int buf_len); int (*local_infile_error)(void *ptr, char * error_msg, unsigned int error_msg_len); void (*local_infile_end)(void *ptr); } MYSQLND_INFILE; typedef struct st_mysqlnd_session_options { ulong flags; /* init commands - we need to send them to server directly after connect */ unsigned int num_commands; char **init_commands; /* configuration file information */ char *cfg_file; char *cfg_section; char *auth_protocol; /* We need to keep these because otherwise st_mysqlnd_conn will be changed. The ABI will be broken and the methods structure will be somewhere else in the memory which can crash external code. Feel free to reuse these. */ HashTable * connect_attr; char * unused1; char * unused2; char * unused3; enum_mysqlnd_session_protocol_type protocol; char *charset_name; /* maximum allowed packet size for communication */ ulong max_allowed_packet; #ifdef MYSQLND_STRING_TO_INT_CONVERSION zend_bool int_and_float_native; #endif } MYSQLND_SESSION_OPTIONS; typedef struct st_mysqlnd_vio_options { /* timeouts */ unsigned int timeout_connect; unsigned int timeout_read; unsigned int timeout_write; size_t net_read_buffer_size; /* SSL information */ char *ssl_key; char *ssl_cert; char *ssl_ca; char *ssl_capath; char *ssl_cipher; char *ssl_passphrase; enum mysqlnd_ssl_peer { MYSQLND_SSL_PEER_DEFAULT = 0, MYSQLND_SSL_PEER_VERIFY = 1, MYSQLND_SSL_PEER_DONT_VERIFY = 2, #define MYSQLND_SSL_PEER_DEFAULT_ACTION MYSQLND_SSL_PEER_VERIFY } ssl_verify_peer; } MYSQLND_VIO_OPTIONS; typedef struct st_mysqlnd_connection MYSQLND; typedef struct st_mysqlnd_connection_data MYSQLND_CONN_DATA; typedef struct st_mysqlnd_protocol_frame_codec MYSQLND_PFC; typedef struct st_mysqlnd_protocol_frame_codec_data MYSQLND_PFC_DATA; typedef struct st_mysqlnd_vio MYSQLND_VIO; typedef struct st_mysqlnd_vio_data MYSQLND_VIO_DATA; typedef struct st_mysqlnd_protocol_payload_decoder_factory MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY; typedef struct st_mysqlnd_res MYSQLND_RES; typedef char** MYSQLND_ROW_C; /* return data as array of strings */ typedef struct st_mysqlnd_stmt_data MYSQLND_STMT_DATA; typedef struct st_mysqlnd_stmt MYSQLND_STMT; typedef unsigned int MYSQLND_FIELD_OFFSET; typedef struct st_mysqlnd_param_bind MYSQLND_PARAM_BIND; typedef struct st_mysqlnd_result_bind MYSQLND_RESULT_BIND; typedef struct st_mysqlnd_result_metadata MYSQLND_RES_METADATA; typedef struct st_mysqlnd_buffered_result_parent MYSQLND_RES_BUFFERED; typedef struct st_mysqlnd_buffered_result_zval MYSQLND_RES_BUFFERED_ZVAL; typedef struct st_mysqlnd_buffered_result_c MYSQLND_RES_BUFFERED_C; typedef struct st_mysqlnd_unbuffered_result MYSQLND_RES_UNBUFFERED; typedef struct st_mysqlnd_debug MYSQLND_DEBUG; typedef MYSQLND_RES* (*mysqlnd_stmt_use_or_store_func)(MYSQLND_STMT * const); typedef enum_func_status (*mysqlnd_fetch_row_func)(MYSQLND_RES *result, void * param, const unsigned int flags, zend_bool * fetched_anything ); typedef struct st_mysqlnd_stats MYSQLND_STATS; typedef void (*mysqlnd_stat_trigger)(MYSQLND_STATS * stats, enum_mysqlnd_collected_stats stat, int64_t change); struct st_mysqlnd_stats { uint64_t *values; mysqlnd_stat_trigger *triggers; size_t count; zend_bool in_trigger; #ifdef ZTS MUTEX_T LOCK_access; #endif }; typedef enum_func_status (*func_mysqlnd_vio__init)(MYSQLND_VIO * const vio, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); typedef void (*func_mysqlnd_vio__dtor)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_vio__connect)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef void (*func_mysqlnd_vio__close_stream)(MYSQLND_VIO * const vio, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef php_stream * (*func_mysqlnd_vio__open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, const zend_bool persistent, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef php_stream * (*func_mysqlnd_vio__get_stream)(const MYSQLND_VIO * const vio); typedef enum_func_status (*func_mysqlnd_vio__set_stream)(MYSQLND_VIO * const vio, php_stream * vio_stream); typedef zend_bool (*func_mysqlnd_vio__has_valid_stream)(const MYSQLND_VIO * const vio); typedef func_mysqlnd_vio__open_stream (*func_mysqlnd_vio__get_open_stream)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_vio__set_client_option)(MYSQLND_VIO * const vio, enum_mysqlnd_client_option option, const char * const value); typedef void (*func_mysqlnd_vio__post_connect_set_opt)(MYSQLND_VIO * const vio, const MYSQLND_CSTRING scheme, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_vio__enable_ssl)(MYSQLND_VIO * const vio); typedef enum_func_status (*func_mysqlnd_vio__disable_ssl)(MYSQLND_VIO * const vio); typedef enum_func_status (*func_mysqlnd_vio__network_read)(MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); typedef size_t (*func_mysqlnd_vio__network_write)(MYSQLND_VIO * const vio, const zend_uchar * const buf, const size_t count, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); typedef size_t (*func_mysqlnd_vio__consume_uneaten_data)(MYSQLND_VIO * const vio, enum php_mysqlnd_server_command cmd); typedef void (*func_mysqlnd_vio__free_contents)(MYSQLND_VIO * vio); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) { func_mysqlnd_vio__init init; func_mysqlnd_vio__dtor dtor; func_mysqlnd_vio__connect connect; func_mysqlnd_vio__close_stream close_stream; func_mysqlnd_vio__open_stream open_pipe; func_mysqlnd_vio__open_stream open_tcp_or_unix; func_mysqlnd_vio__get_stream get_stream; func_mysqlnd_vio__set_stream set_stream; func_mysqlnd_vio__has_valid_stream has_valid_stream; func_mysqlnd_vio__get_open_stream get_open_stream; func_mysqlnd_vio__set_client_option set_client_option; func_mysqlnd_vio__post_connect_set_opt post_connect_set_opt; func_mysqlnd_vio__enable_ssl enable_ssl; func_mysqlnd_vio__disable_ssl disable_ssl; func_mysqlnd_vio__network_read network_read; func_mysqlnd_vio__network_write network_write; func_mysqlnd_vio__consume_uneaten_data consume_uneaten_data; func_mysqlnd_vio__free_contents free_contents; }; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory); typedef MYSQLND * (*func_mysqlnd_object_factory__get_connection)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) * factory, const zend_bool persistent); typedef MYSQLND * (*func_mysqlnd_object_factory__clone_connection_object)(MYSQLND * conn); typedef MYSQLND_STMT * (*func_mysqlnd_object_factory__get_prepared_statement)(MYSQLND_CONN_DATA * conn); typedef MYSQLND_PFC * (*func_mysqlnd_object_factory__get_pfc)(const zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); typedef MYSQLND_VIO * (*func_mysqlnd_object_factory__get_vio)(const zend_bool persistent, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); typedef MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * (*func_mysqlnd_object_factory__get_protocol_payload_decoder_factory)(MYSQLND_CONN_DATA * conn, const zend_bool persistent); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) { func_mysqlnd_object_factory__get_connection get_connection; func_mysqlnd_object_factory__clone_connection_object clone_connection_object; func_mysqlnd_object_factory__get_prepared_statement get_prepared_statement; func_mysqlnd_object_factory__get_pfc get_protocol_frame_codec; func_mysqlnd_object_factory__get_vio get_vio; func_mysqlnd_object_factory__get_protocol_payload_decoder_factory get_protocol_payload_decoder_factory; }; typedef enum_func_status (*func_mysqlnd_conn_data__connect)(MYSQLND_CONN_DATA * conn, MYSQLND_CSTRING hostname, MYSQLND_CSTRING username, MYSQLND_CSTRING password, MYSQLND_CSTRING database, unsigned int port, MYSQLND_CSTRING socket_or_pipe, unsigned int mysql_flags); typedef zend_ulong (*func_mysqlnd_conn_data__escape_string)(MYSQLND_CONN_DATA * const conn, char *newstr, const char *escapestr, size_t escapestr_len); typedef enum_func_status (*func_mysqlnd_conn_data__set_charset)(MYSQLND_CONN_DATA * const conn, const char * const charset); typedef enum_func_status (*func_mysqlnd_conn_data__query)(MYSQLND_CONN_DATA * conn, const char * const query, const size_t query_len); typedef enum_func_status (*func_mysqlnd_conn_data__send_query)(MYSQLND_CONN_DATA * conn, const char * const query, const size_t query_len, enum_mysqlnd_send_query_type type, zval *read_cb, zval *err_cb); typedef enum_func_status (*func_mysqlnd_conn_data__reap_query)(MYSQLND_CONN_DATA * conn, enum_mysqlnd_reap_result_type type); typedef MYSQLND_RES * (*func_mysqlnd_conn_data__use_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags); typedef MYSQLND_RES * (*func_mysqlnd_conn_data__store_result)(MYSQLND_CONN_DATA * const conn, const unsigned int flags); typedef enum_func_status (*func_mysqlnd_conn_data__next_result)(MYSQLND_CONN_DATA * const conn); typedef zend_bool (*func_mysqlnd_conn_data__more_results)(const MYSQLND_CONN_DATA * const conn); typedef MYSQLND_STMT * (*func_mysqlnd_conn_data__stmt_init)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__shutdown_server)(MYSQLND_CONN_DATA * const conn, uint8_t level); typedef enum_func_status (*func_mysqlnd_conn_data__refresh_server)(MYSQLND_CONN_DATA * const conn, uint8_t options); typedef enum_func_status (*func_mysqlnd_conn_data__ping)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__kill_connection)(MYSQLND_CONN_DATA * conn, unsigned int pid); typedef enum_func_status (*func_mysqlnd_conn_data__select_db)(MYSQLND_CONN_DATA * const conn, const char * const db, const size_t db_len); typedef enum_func_status (*func_mysqlnd_conn_data__server_dump_debug_information)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__change_user)(MYSQLND_CONN_DATA * const conn, const char * user, const char * passwd, const char * db, zend_bool silent, size_t passwd_len); typedef unsigned int (*func_mysqlnd_conn_data__get_error_no)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__get_error_str)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__get_sqlstate)(const MYSQLND_CONN_DATA * const conn); typedef uint64_t (*func_mysqlnd_conn_data__get_thread_id)(const MYSQLND_CONN_DATA * const conn); typedef void (*func_mysqlnd_conn_data__get_statistics)(const MYSQLND_CONN_DATA * const conn, zval *return_value ZEND_FILE_LINE_DC); typedef zend_ulong (*func_mysqlnd_conn_data__get_server_version)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__get_server_information)(const MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__get_server_statistics)(MYSQLND_CONN_DATA * conn, zend_string **message); typedef const char * (*func_mysqlnd_conn_data__get_host_information)(const MYSQLND_CONN_DATA * const conn); typedef unsigned int (*func_mysqlnd_conn_data__get_protocol_information)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__get_last_message)(const MYSQLND_CONN_DATA * const conn); typedef const char * (*func_mysqlnd_conn_data__charset_name)(const MYSQLND_CONN_DATA * const conn); typedef MYSQLND_RES * (*func_mysqlnd_conn_data__list_method)(MYSQLND_CONN_DATA * conn, const char * const query, const char * const achtung_wild, const char * const par1); typedef uint64_t (*func_mysqlnd_conn_data__get_last_insert_id)(const MYSQLND_CONN_DATA * const conn); typedef uint64_t (*func_mysqlnd_conn_data__get_affected_rows)(const MYSQLND_CONN_DATA * const conn); typedef unsigned int (*func_mysqlnd_conn_data__get_warning_count)(const MYSQLND_CONN_DATA * const conn); typedef unsigned int (*func_mysqlnd_conn_data__get_field_count)(const MYSQLND_CONN_DATA * const conn); typedef unsigned int (*func_mysqlnd_conn_data__get_server_status)(const MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__set_server_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_server_option option); typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option)(MYSQLND_CONN_DATA * const conn, enum_mysqlnd_client_option option, const char * const value); typedef void (*func_mysqlnd_conn_data__free_contents)(MYSQLND_CONN_DATA * conn);/* private */ typedef void (*func_mysqlnd_conn_data__free_options)(MYSQLND_CONN_DATA * conn); /* private */ typedef void (*func_mysqlnd_conn_data__dtor)(MYSQLND_CONN_DATA * conn); /* private */ typedef enum_func_status (*func_mysqlnd_conn_data__query_read_result_set_header)(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt); typedef MYSQLND_CONN_DATA * (*func_mysqlnd_conn_data__get_reference)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__free_reference)(MYSQLND_CONN_DATA * const conn); typedef enum_func_status (*func_mysqlnd_conn_data__send_command_do_request)(MYSQLND_CONN_DATA * const conn, const enum php_mysqlnd_server_command command, const zend_uchar * const arg, const size_t arg_len, const zend_bool silent, const zend_bool ignore_upsert_status); typedef enum_func_status (*func_mysqlnd_conn_data__send_command_handle_response)(MYSQLND_CONN_DATA * const conn, const enum mysqlnd_packet_type ok_packet, const zend_bool silent, const enum php_mysqlnd_server_command command, const zend_bool ignore_upsert_status); typedef enum_func_status (*func_mysqlnd_conn_data__restart_psession)(MYSQLND_CONN_DATA * conn); typedef enum_func_status (*func_mysqlnd_conn_data__end_psession)(MYSQLND_CONN_DATA * conn); typedef enum_func_status (*func_mysqlnd_conn_data__send_close)(MYSQLND_CONN_DATA * conn); typedef enum_func_status (*func_mysqlnd_conn_data__ssl_set)(MYSQLND_CONN_DATA * const conn, const char * key, const char * const cert, const char * const ca, const char * const capath, const char * const cipher); typedef MYSQLND_RES * (*func_mysqlnd_conn_data__result_init)(unsigned int field_count); typedef enum_func_status (*func_mysqlnd_conn_data__set_autocommit)(MYSQLND_CONN_DATA * conn, unsigned int mode); typedef enum_func_status (*func_mysqlnd_conn_data__tx_commit)(MYSQLND_CONN_DATA * conn); typedef enum_func_status (*func_mysqlnd_conn_data__tx_rollback)(MYSQLND_CONN_DATA * conn); typedef enum_func_status (*func_mysqlnd_conn_data__tx_begin)(MYSQLND_CONN_DATA * conn, const unsigned int mode, const char * const name); typedef enum_func_status (*func_mysqlnd_conn_data__tx_commit_or_rollback)(MYSQLND_CONN_DATA * conn, const zend_bool commit, const unsigned int flags, const char * const name); typedef void (*func_mysqlnd_conn_data__tx_cor_options_to_string)(const MYSQLND_CONN_DATA * const conn, smart_str * tmp_str, const unsigned int mode); typedef enum_func_status (*func_mysqlnd_conn_data__tx_savepoint)(MYSQLND_CONN_DATA * conn, const char * const name); typedef enum_func_status (*func_mysqlnd_conn_data__tx_savepoint_release)(MYSQLND_CONN_DATA * conn, const char * const name); typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_start)(MYSQLND_CONN_DATA * conn, const size_t this_func); typedef enum_func_status (*func_mysqlnd_conn_data__local_tx_end)(MYSQLND_CONN_DATA * conn, const size_t this_func, const enum_func_status status); typedef enum_func_status (*func_mysqlnd_conn_data__execute_init_commands)(MYSQLND_CONN_DATA * conn); typedef unsigned int (*func_mysqlnd_conn_data__get_updated_connect_flags)(MYSQLND_CONN_DATA * conn, unsigned int mysql_flags); typedef enum_func_status (*func_mysqlnd_conn_data__connect_handshake)(MYSQLND_CONN_DATA * conn, const MYSQLND_CSTRING * const scheme, const MYSQLND_CSTRING * const username, const MYSQLND_CSTRING * const password, const MYSQLND_CSTRING * const database, const unsigned int mysql_flags); typedef struct st_mysqlnd_authentication_plugin * (*func_mysqlnd_conn_data__fetch_auth_plugin_by_name)(const char * const requested_protocol); typedef enum_func_status (*func_mysqlnd_conn_data__set_client_option_2d)(MYSQLND_CONN_DATA * const conn, const enum_mysqlnd_client_option option, const char * const key, const char * const value); typedef size_t (*func_mysqlnd_conn_data__negotiate_client_api_capabilities)(MYSQLND_CONN_DATA * const conn, const size_t flags); typedef size_t (*func_mysqlnd_conn_data__get_client_api_capabilities)(const MYSQLND_CONN_DATA * const conn); typedef MYSQLND_STRING (*func_mysqlnd_conn_data__get_scheme)(MYSQLND_CONN_DATA * conn, MYSQLND_CSTRING hostname, MYSQLND_CSTRING *socket_or_pipe, unsigned int port, zend_bool * unix_socket, zend_bool * named_pipe); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) { func_mysqlnd_conn_data__connect connect; func_mysqlnd_conn_data__escape_string escape_string; func_mysqlnd_conn_data__set_charset set_charset; func_mysqlnd_conn_data__query query; func_mysqlnd_conn_data__send_query send_query; func_mysqlnd_conn_data__reap_query reap_query; func_mysqlnd_conn_data__use_result use_result; func_mysqlnd_conn_data__store_result store_result; func_mysqlnd_conn_data__next_result next_result; func_mysqlnd_conn_data__more_results more_results; func_mysqlnd_conn_data__stmt_init stmt_init; func_mysqlnd_conn_data__shutdown_server shutdown_server; func_mysqlnd_conn_data__refresh_server refresh_server; func_mysqlnd_conn_data__ping ping; func_mysqlnd_conn_data__kill_connection kill_connection; func_mysqlnd_conn_data__select_db select_db; func_mysqlnd_conn_data__server_dump_debug_information server_dump_debug_information; func_mysqlnd_conn_data__change_user change_user; func_mysqlnd_conn_data__get_error_no get_error_no; func_mysqlnd_conn_data__get_error_str get_error_str; func_mysqlnd_conn_data__get_sqlstate get_sqlstate; func_mysqlnd_conn_data__get_thread_id get_thread_id; func_mysqlnd_conn_data__get_statistics get_statistics; func_mysqlnd_conn_data__get_server_version get_server_version; func_mysqlnd_conn_data__get_server_information get_server_information; func_mysqlnd_conn_data__get_server_statistics get_server_statistics; func_mysqlnd_conn_data__get_host_information get_host_information; func_mysqlnd_conn_data__get_protocol_information get_protocol_information; func_mysqlnd_conn_data__get_last_message get_last_message; func_mysqlnd_conn_data__charset_name charset_name; func_mysqlnd_conn_data__list_method list_method; func_mysqlnd_conn_data__get_last_insert_id get_last_insert_id; func_mysqlnd_conn_data__get_affected_rows get_affected_rows; func_mysqlnd_conn_data__get_warning_count get_warning_count; func_mysqlnd_conn_data__get_field_count get_field_count; func_mysqlnd_conn_data__get_server_status get_server_status; func_mysqlnd_conn_data__set_server_option set_server_option; func_mysqlnd_conn_data__set_client_option set_client_option; func_mysqlnd_conn_data__free_contents free_contents; func_mysqlnd_conn_data__free_options free_options; func_mysqlnd_conn_data__dtor dtor; func_mysqlnd_conn_data__query_read_result_set_header query_read_result_set_header; func_mysqlnd_conn_data__get_reference get_reference; func_mysqlnd_conn_data__free_reference free_reference; func_mysqlnd_conn_data__restart_psession restart_psession; func_mysqlnd_conn_data__end_psession end_psession; func_mysqlnd_conn_data__send_close send_close; func_mysqlnd_conn_data__ssl_set ssl_set; func_mysqlnd_conn_data__result_init result_init; func_mysqlnd_conn_data__set_autocommit set_autocommit; func_mysqlnd_conn_data__tx_commit tx_commit; func_mysqlnd_conn_data__tx_rollback tx_rollback; func_mysqlnd_conn_data__tx_begin tx_begin; func_mysqlnd_conn_data__tx_commit_or_rollback tx_commit_or_rollback; func_mysqlnd_conn_data__tx_cor_options_to_string tx_cor_options_to_string; func_mysqlnd_conn_data__tx_savepoint tx_savepoint; func_mysqlnd_conn_data__tx_savepoint_release tx_savepoint_release; func_mysqlnd_conn_data__local_tx_start local_tx_start; func_mysqlnd_conn_data__local_tx_end local_tx_end; func_mysqlnd_conn_data__execute_init_commands execute_init_commands; func_mysqlnd_conn_data__get_updated_connect_flags get_updated_connect_flags; func_mysqlnd_conn_data__connect_handshake connect_handshake; func_mysqlnd_conn_data__fetch_auth_plugin_by_name fetch_auth_plugin_by_name; func_mysqlnd_conn_data__set_client_option_2d set_client_option_2d; func_mysqlnd_conn_data__negotiate_client_api_capabilities negotiate_client_api_capabilities; func_mysqlnd_conn_data__get_client_api_capabilities get_client_api_capabilities; func_mysqlnd_conn_data__get_scheme get_scheme; }; typedef enum_func_status (*func_mysqlnd_data__connect)(MYSQLND * conn, const MYSQLND_CSTRING hostname, const MYSQLND_CSTRING username, const MYSQLND_CSTRING password, const MYSQLND_CSTRING database, unsigned int port, const MYSQLND_CSTRING socket_or_pipe, unsigned int mysql_flags); typedef MYSQLND * (*func_mysqlnd_conn__clone_object)(MYSQLND * const conn); typedef void (*func_mysqlnd_conn__dtor)(MYSQLND * conn); typedef enum_func_status (*func_mysqlnd_conn__close)(MYSQLND * conn, const enum_connection_close_type close_type); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) { func_mysqlnd_data__connect connect; func_mysqlnd_conn__clone_object clone_object; func_mysqlnd_conn__dtor dtor; func_mysqlnd_conn__close close; }; /* for decoding - binary or text protocol */ typedef enum_func_status (*func_mysqlnd_res__row_decoder)(MYSQLND_ROW_BUFFER * row_buffer, zval * fields, unsigned int field_count, const MYSQLND_FIELD * fields_metadata, zend_bool as_int_or_float, MYSQLND_STATS * stats); typedef MYSQLND_RES * (*func_mysqlnd_res__use_result)(MYSQLND_RES * const result, const zend_bool ps_protocol); typedef MYSQLND_RES * (*func_mysqlnd_res__store_result)(MYSQLND_RES * result, MYSQLND_CONN_DATA * const conn, const unsigned int flags); typedef void (*func_mysqlnd_res__fetch_into)(MYSQLND_RES *result, const unsigned int flags, zval *return_value, enum_mysqlnd_extension ext ZEND_FILE_LINE_DC); typedef MYSQLND_ROW_C (*func_mysqlnd_res__fetch_row_c)(MYSQLND_RES *result); typedef void (*func_mysqlnd_res__fetch_all)(MYSQLND_RES *result, const unsigned int flags, zval *return_value ZEND_FILE_LINE_DC); typedef void (*func_mysqlnd_res__fetch_field_data)(MYSQLND_RES *result, unsigned int offset, zval *return_value); typedef uint64_t (*func_mysqlnd_res__num_rows)(const MYSQLND_RES * const result); typedef unsigned int (*func_mysqlnd_res__num_fields)(const MYSQLND_RES * const result); typedef enum_func_status (*func_mysqlnd_res__skip_result)(MYSQLND_RES * const result); typedef enum_func_status (*func_mysqlnd_res__seek_data)(MYSQLND_RES * const result, const uint64_t row); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__seek_field)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET field_offset); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res__field_tell)(const MYSQLND_RES * const result); typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field)(MYSQLND_RES * const result); typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_field_direct)(MYSQLND_RES * const result, const MYSQLND_FIELD_OFFSET fieldnr); typedef const MYSQLND_FIELD *(*func_mysqlnd_res__fetch_fields)(MYSQLND_RES * const result); typedef enum_func_status (*func_mysqlnd_res__read_result_metadata)(MYSQLND_RES * result, MYSQLND_CONN_DATA * conn); typedef const size_t * (*func_mysqlnd_res__fetch_lengths)(MYSQLND_RES * const result); typedef enum_func_status (*func_mysqlnd_res__store_result_fetch_data)(MYSQLND_CONN_DATA * const conn, MYSQLND_RES * result, MYSQLND_RES_METADATA * meta, MYSQLND_ROW_BUFFER ** row_buffers, zend_bool binary_protocol); typedef void (*func_mysqlnd_res__free_result_buffers)(MYSQLND_RES * result); /* private */ typedef enum_func_status (*func_mysqlnd_res__free_result)(MYSQLND_RES * result, const zend_bool implicit); typedef void (*func_mysqlnd_res__free_result_internal)(MYSQLND_RES *result); typedef void (*func_mysqlnd_res__free_result_contents)(MYSQLND_RES *result); typedef void (*func_mysqlnd_res__free_buffered_data)(MYSQLND_RES *result); typedef void (*func_mysqlnd_res__unbuffered_free_last_data)(MYSQLND_RES *result); typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res__result_meta_init)(MYSQLND_RES *result, unsigned int field_count); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) { mysqlnd_fetch_row_func fetch_row; func_mysqlnd_res__use_result use_result; func_mysqlnd_res__store_result store_result; func_mysqlnd_res__fetch_into fetch_into; func_mysqlnd_res__fetch_row_c fetch_row_c; func_mysqlnd_res__fetch_all fetch_all; func_mysqlnd_res__fetch_field_data fetch_field_data; func_mysqlnd_res__num_rows num_rows; func_mysqlnd_res__num_fields num_fields; func_mysqlnd_res__skip_result skip_result; func_mysqlnd_res__seek_data seek_data; func_mysqlnd_res__seek_field seek_field; func_mysqlnd_res__field_tell field_tell; func_mysqlnd_res__fetch_field fetch_field; func_mysqlnd_res__fetch_field_direct fetch_field_direct; func_mysqlnd_res__fetch_fields fetch_fields; func_mysqlnd_res__read_result_metadata read_result_metadata; func_mysqlnd_res__fetch_lengths fetch_lengths; func_mysqlnd_res__store_result_fetch_data store_result_fetch_data; func_mysqlnd_res__free_result_buffers free_result_buffers; func_mysqlnd_res__free_result free_result; func_mysqlnd_res__free_result_internal free_result_internal; func_mysqlnd_res__free_result_contents free_result_contents; func_mysqlnd_res__result_meta_init result_meta_init; void * unused1; void * unused2; void * unused3; void * unused4; void * unused5; }; typedef uint64_t (*func_mysqlnd_result_unbuffered__num_rows)(const MYSQLND_RES_UNBUFFERED * const result); typedef const size_t * (*func_mysqlnd_result_unbuffered__fetch_lengths)(MYSQLND_RES_UNBUFFERED * const result); typedef void (*func_mysqlnd_result_unbuffered__free_last_data)(MYSQLND_RES_UNBUFFERED * result, MYSQLND_STATS * const global_stats); typedef void (*func_mysqlnd_result_unbuffered__free_result)(MYSQLND_RES_UNBUFFERED * const result, MYSQLND_STATS * const global_stats); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) { mysqlnd_fetch_row_func fetch_row; func_mysqlnd_res__row_decoder row_decoder; func_mysqlnd_result_unbuffered__num_rows num_rows; func_mysqlnd_result_unbuffered__fetch_lengths fetch_lengths; func_mysqlnd_result_unbuffered__free_last_data free_last_data; func_mysqlnd_result_unbuffered__free_result free_result; }; typedef uint64_t (*func_mysqlnd_result_buffered__num_rows)(const MYSQLND_RES_BUFFERED * const result); typedef enum_func_status (*func_mysqlnd_result_buffered__initialize_result_set_rest)(MYSQLND_RES_BUFFERED * const result, MYSQLND_RES_METADATA * const meta, MYSQLND_STATS * stats, zend_bool int_and_float_native); typedef const size_t * (*func_mysqlnd_result_buffered__fetch_lengths)(MYSQLND_RES_BUFFERED * const result); typedef enum_func_status (*func_mysqlnd_result_buffered__data_seek)(MYSQLND_RES_BUFFERED * const result, const uint64_t row); typedef void (*func_mysqlnd_result_buffered__free_result)(MYSQLND_RES_BUFFERED * const result); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) { mysqlnd_fetch_row_func fetch_row; func_mysqlnd_res__row_decoder row_decoder; func_mysqlnd_result_buffered__num_rows num_rows; func_mysqlnd_result_buffered__fetch_lengths fetch_lengths; func_mysqlnd_result_buffered__data_seek data_seek; func_mysqlnd_result_buffered__initialize_result_set_rest initialize_result_set_rest; func_mysqlnd_result_buffered__free_result free_result; }; typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field)(MYSQLND_RES_METADATA * const meta); typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_field_direct)(const MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET fieldnr); typedef const MYSQLND_FIELD * (*func_mysqlnd_res_meta__fetch_fields)(MYSQLND_RES_METADATA * const meta); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_tell)(const MYSQLND_RES_METADATA * const meta); typedef MYSQLND_FIELD_OFFSET (*func_mysqlnd_res_meta__field_seek)(MYSQLND_RES_METADATA * const meta, const MYSQLND_FIELD_OFFSET field_offset); typedef enum_func_status (*func_mysqlnd_res_meta__read_metadata)(MYSQLND_RES_METADATA * const meta, MYSQLND_CONN_DATA * conn, MYSQLND_RES * result); typedef MYSQLND_RES_METADATA * (*func_mysqlnd_res_meta__clone_metadata)(MYSQLND_RES *result, const MYSQLND_RES_METADATA * const meta); typedef void (*func_mysqlnd_res_meta__free_metadata)(MYSQLND_RES_METADATA * meta); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta) { func_mysqlnd_res_meta__fetch_field fetch_field; func_mysqlnd_res_meta__fetch_field_direct fetch_field_direct; func_mysqlnd_res_meta__fetch_fields fetch_fields; func_mysqlnd_res_meta__field_tell field_tell; func_mysqlnd_res_meta__field_seek field_seek; func_mysqlnd_res_meta__read_metadata read_metadata; func_mysqlnd_res_meta__clone_metadata clone_metadata; func_mysqlnd_res_meta__free_metadata free_metadata; }; typedef enum_func_status (*func_mysqlnd_stmt__prepare)(MYSQLND_STMT * const stmt, const char * const query, const size_t query_len); typedef enum_func_status (*func_mysqlnd_stmt__send_execute)(MYSQLND_STMT * const s, const enum_mysqlnd_send_execute_type type, zval * read_cb, zval * err_cb); typedef enum_func_status (*func_mysqlnd_stmt__execute)(MYSQLND_STMT * const stmt); typedef MYSQLND_RES * (*func_mysqlnd_stmt__use_result)(MYSQLND_STMT * const stmt); typedef MYSQLND_RES * (*func_mysqlnd_stmt__store_result)(MYSQLND_STMT * const stmt); typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result)(MYSQLND_STMT * const stmt); typedef zend_bool (*func_mysqlnd_stmt__more_results)(const MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__next_result)(MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__free_result)(MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__seek_data)(const MYSQLND_STMT * const stmt, uint64_t row); typedef enum_func_status (*func_mysqlnd_stmt__reset)(MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__close_on_server)(MYSQLND_STMT * const stmt, zend_bool implicit); /* private */ typedef enum_func_status (*func_mysqlnd_stmt__dtor)(MYSQLND_STMT * const stmt, zend_bool implicit); /* use this for mysqlnd_stmt_close */ typedef enum_func_status (*func_mysqlnd_stmt__fetch)(MYSQLND_STMT * const stmt, zend_bool * const fetched_anything); typedef enum_func_status (*func_mysqlnd_stmt__bind_parameters)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND * const param_bind); typedef enum_func_status (*func_mysqlnd_stmt__bind_one_parameter)(MYSQLND_STMT * const stmt, unsigned int param_no, zval * const zv, zend_uchar type); typedef enum_func_status (*func_mysqlnd_stmt__refresh_bind_param)(MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__bind_result)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND * const result_bind); typedef enum_func_status (*func_mysqlnd_stmt__bind_one_result)(MYSQLND_STMT * const stmt, unsigned int param_no); typedef enum_func_status (*func_mysqlnd_stmt__send_long_data)(MYSQLND_STMT * const stmt, unsigned int param_num, const char * const data, zend_ulong length); typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_parameter_metadata)(MYSQLND_STMT * const stmt); typedef MYSQLND_RES * (*func_mysqlnd_stmt__get_result_metadata)(MYSQLND_STMT * const stmt); typedef uint64_t (*func_mysqlnd_stmt__get_last_insert_id)(const MYSQLND_STMT * const stmt); typedef uint64_t (*func_mysqlnd_stmt__get_affected_rows)(const MYSQLND_STMT * const stmt); typedef uint64_t (*func_mysqlnd_stmt__get_num_rows)(const MYSQLND_STMT * const stmt); typedef unsigned int (*func_mysqlnd_stmt__get_param_count)(const MYSQLND_STMT * const stmt); typedef unsigned int (*func_mysqlnd_stmt__get_field_count)(const MYSQLND_STMT * const stmt); typedef unsigned int (*func_mysqlnd_stmt__get_warning_count)(const MYSQLND_STMT * const stmt); typedef unsigned int (*func_mysqlnd_stmt__get_error_no)(const MYSQLND_STMT * const stmt); typedef const char * (*func_mysqlnd_stmt__get_error_str)(const MYSQLND_STMT * const stmt); typedef const char * (*func_mysqlnd_stmt__get_sqlstate)(const MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__get_attribute)(const MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, void * const value); typedef enum_func_status (*func_mysqlnd_stmt__set_attribute)(MYSQLND_STMT * const stmt, enum mysqlnd_stmt_attr attr_type, const void * const value); typedef MYSQLND_PARAM_BIND *(*func_mysqlnd_stmt__alloc_param_bind)(MYSQLND_STMT * const stmt); typedef MYSQLND_RESULT_BIND*(*func_mysqlnd_stmt__alloc_result_bind)(MYSQLND_STMT * const stmt); typedef void (*func_mysqlnd_stmt__free_parameter_bind)(MYSQLND_STMT * const stmt, MYSQLND_PARAM_BIND *); typedef void (*func_mysqlnd_stmt__free_result_bind)(MYSQLND_STMT * const stmt, MYSQLND_RESULT_BIND *); typedef unsigned int (*func_mysqlnd_stmt__server_status)(const MYSQLND_STMT * const stmt); typedef enum_func_status (*func_mysqlnd_stmt__generate_execute_request)(MYSQLND_STMT * const s, zend_uchar ** request, size_t *request_len, zend_bool * free_buffer); typedef enum_func_status (*func_mysqlnd_stmt__parse_execute_response)(MYSQLND_STMT * const s, enum_mysqlnd_parse_exec_response_type type); typedef void (*func_mysqlnd_stmt__free_stmt_content)(MYSQLND_STMT * const s); typedef enum_func_status (*func_mysqlnd_stmt__flush)(MYSQLND_STMT * const stmt); typedef void (*func_mysqlnd_stmt__free_stmt_result)(MYSQLND_STMT * const s); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) { func_mysqlnd_stmt__prepare prepare; func_mysqlnd_stmt__send_execute send_execute; func_mysqlnd_stmt__execute execute; func_mysqlnd_stmt__use_result use_result; func_mysqlnd_stmt__store_result store_result; func_mysqlnd_stmt__get_result get_result; func_mysqlnd_stmt__more_results more_results; func_mysqlnd_stmt__next_result next_result; func_mysqlnd_stmt__free_result free_result; func_mysqlnd_stmt__seek_data seek_data; func_mysqlnd_stmt__reset reset; func_mysqlnd_stmt__close_on_server close_on_server; func_mysqlnd_stmt__dtor dtor; func_mysqlnd_stmt__fetch fetch; func_mysqlnd_stmt__bind_parameters bind_parameters; func_mysqlnd_stmt__bind_one_parameter bind_one_parameter; func_mysqlnd_stmt__refresh_bind_param refresh_bind_param; func_mysqlnd_stmt__bind_result bind_result; func_mysqlnd_stmt__bind_one_result bind_one_result; func_mysqlnd_stmt__send_long_data send_long_data; func_mysqlnd_stmt__get_parameter_metadata get_parameter_metadata; func_mysqlnd_stmt__get_result_metadata get_result_metadata; func_mysqlnd_stmt__get_last_insert_id get_last_insert_id; func_mysqlnd_stmt__get_affected_rows get_affected_rows; func_mysqlnd_stmt__get_num_rows get_num_rows; func_mysqlnd_stmt__get_param_count get_param_count; func_mysqlnd_stmt__get_field_count get_field_count; func_mysqlnd_stmt__get_warning_count get_warning_count; func_mysqlnd_stmt__get_error_no get_error_no; func_mysqlnd_stmt__get_error_str get_error_str; func_mysqlnd_stmt__get_sqlstate get_sqlstate; func_mysqlnd_stmt__get_attribute get_attribute; func_mysqlnd_stmt__set_attribute set_attribute; func_mysqlnd_stmt__alloc_param_bind alloc_parameter_bind; func_mysqlnd_stmt__alloc_result_bind alloc_result_bind; func_mysqlnd_stmt__free_parameter_bind free_parameter_bind; func_mysqlnd_stmt__free_result_bind free_result_bind; func_mysqlnd_stmt__server_status get_server_status; func_mysqlnd_stmt__generate_execute_request generate_execute_request; func_mysqlnd_stmt__parse_execute_response parse_execute_response; func_mysqlnd_stmt__free_stmt_content free_stmt_content; func_mysqlnd_stmt__flush flush; func_mysqlnd_stmt__free_stmt_result free_stmt_result; }; struct st_mysqlnd_vio_data { php_stream *stream; zend_bool ssl; MYSQLND_VIO_OPTIONS options; #ifdef MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND zend_uchar last_command; #else zend_uchar unused_pad1; #endif zend_bool persistent; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) m; }; struct st_mysqlnd_vio { struct st_mysqlnd_vio_data * data; zend_bool persistent; }; typedef enum_func_status (*func_mysqlnd__run_command)(enum php_mysqlnd_server_command command, ...); typedef struct st_mysqlnd_connection_state MYSQLND_CONNECTION_STATE; typedef enum mysqlnd_connection_state (*func_mysqlnd_connection_state__get)(const MYSQLND_CONNECTION_STATE * const state_struct); typedef void (*func_mysqlnd_connection_state__set)(MYSQLND_CONNECTION_STATE * const state_struct, const enum mysqlnd_connection_state state); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_connection_state) { func_mysqlnd_connection_state__get get; func_mysqlnd_connection_state__set set; }; struct st_mysqlnd_connection_state { enum mysqlnd_connection_state state; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_connection_state) *m; }; struct st_mysqlnd_connection_data { /* Operation related */ MYSQLND_PFC * protocol_frame_codec; MYSQLND_VIO * vio; MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory; /* Information related */ MYSQLND_STRING hostname; MYSQLND_STRING unix_socket; MYSQLND_STRING username; MYSQLND_STRING password; MYSQLND_STRING scheme; uint64_t thread_id; char *server_version; char *host_info; MYSQLND_STRING authentication_plugin_data; const MYSQLND_CHARSET *charset; const MYSQLND_CHARSET *greet_charset; MYSQLND_STRING connect_or_select_db; MYSQLND_INFILE infile; unsigned int protocol_version; unsigned int port; zend_ulong server_capabilities; /* For UPSERT queries */ MYSQLND_UPSERT_STATUS * upsert_status; MYSQLND_UPSERT_STATUS upsert_status_impl; MYSQLND_STRING last_message; /* If error packet, we use these */ MYSQLND_ERROR_INFO * error_info; MYSQLND_ERROR_INFO error_info_impl; MYSQLND_CONNECTION_STATE state; enum_mysqlnd_query_type last_query_type; /* Temporary storage between query and (use|store)_result() call */ MYSQLND_RES *current_result; /* How many result sets reference this connection. It won't be freed until this number reaches 0. The last one, please close the door! :-) The result set objects can determine by inspecting 'quit_sent' whether the connection is still valid. */ unsigned int refcount; /* Temporal storage for mysql_query */ unsigned int field_count; /* options */ MYSQLND_SESSION_OPTIONS * options; MYSQLND_SESSION_OPTIONS options_impl; /* stats */ MYSQLND_STATS * stats; size_t client_api_capabilities; zval async_read_cb; zval async_err_cb; zend_bool in_async_read_cb; zend_bool in_async_err_cb; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) object_factory; func_mysqlnd__run_command run_command; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) * m; /* persistent connection */ zend_bool persistent; }; struct st_mysqlnd_connection { MYSQLND_CONN_DATA * data; zend_bool persistent; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) * m; }; struct st_mysqlnd_packet_greet; struct st_mysqlnd_packet_auth; struct st_mysqlnd_packet_auth_response; struct st_mysqlnd_packet_change_auth_response; struct st_mysqlnd_packet_ok; struct st_mysqlnd_packet_command; struct st_mysqlnd_packet_eof; struct st_mysqlnd_packet_rset_header; struct st_mysqlnd_packet_res_field; struct st_mysqlnd_packet_row; struct st_mysqlnd_packet_stats; struct st_mysqlnd_packet_prepare_response; struct st_mysqlnd_packet_chg_user_resp; struct st_mysqlnd_packet_auth_pam; struct st_mysqlnd_packet_sha256_pk_request; struct st_mysqlnd_packet_sha256_pk_request_response; typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_greet_packet)(struct st_mysqlnd_packet_greet *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_auth_packet)(struct st_mysqlnd_packet_auth *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_auth_response_packet)(struct st_mysqlnd_packet_auth_response *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_change_auth_response_packet)(struct st_mysqlnd_packet_change_auth_response *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_ok_packet)(struct st_mysqlnd_packet_ok *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_command_packet)(struct st_mysqlnd_packet_command *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_eof_packet)(struct st_mysqlnd_packet_eof *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_rset_header_packet)(struct st_mysqlnd_packet_rset_header *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_result_field_packet)(struct st_mysqlnd_packet_res_field *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_row_packet)(struct st_mysqlnd_packet_row *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_stats_packet)(struct st_mysqlnd_packet_stats *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_prepare_response_packet)(struct st_mysqlnd_packet_prepare_response *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_change_user_response_packet)(struct st_mysqlnd_packet_chg_user_resp *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_packet)(struct st_mysqlnd_packet_sha256_pk_request *packet); typedef void (*func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_response_packet)(struct st_mysqlnd_packet_sha256_pk_request_response *packet); typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command)( MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory, const enum php_mysqlnd_server_command command, const zend_uchar * const arg, const size_t arg_len, const zend_bool silent, MYSQLND_CONNECTION_STATE * connection_state, MYSQLND_ERROR_INFO * error_info, MYSQLND_UPSERT_STATUS * upsert_status, MYSQLND_STATS * stats, func_mysqlnd_conn_data__send_close send_close, void * send_close_ctx); typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_OK)( MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory, MYSQLND_ERROR_INFO * const error_info, MYSQLND_UPSERT_STATUS * const upsert_status, const zend_bool ignore_upsert_status, /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */ MYSQLND_STRING * const last_message); typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_EOF)( MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory, MYSQLND_ERROR_INFO * const error_info, MYSQLND_UPSERT_STATUS * const upsert_status); typedef enum_func_status (*func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_response)( MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * payload_decoder_factory, const enum mysqlnd_packet_type ok_packet, const zend_bool silent, const enum php_mysqlnd_server_command command, const zend_bool ignore_upsert_status, /* actually used only by LOAD DATA. COM_QUERY and COM_EXECUTE handle the responses themselves */ MYSQLND_ERROR_INFO * error_info, MYSQLND_UPSERT_STATUS * upsert_status, MYSQLND_STRING * last_message); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) { func_mysqlnd_protocol_payload_decoder_factory__init_greet_packet init_greet_packet; func_mysqlnd_protocol_payload_decoder_factory__init_auth_packet init_auth_packet; func_mysqlnd_protocol_payload_decoder_factory__init_auth_response_packet init_auth_response_packet; func_mysqlnd_protocol_payload_decoder_factory__init_change_auth_response_packet init_change_auth_response_packet; func_mysqlnd_protocol_payload_decoder_factory__init_ok_packet init_ok_packet; func_mysqlnd_protocol_payload_decoder_factory__init_command_packet init_command_packet; func_mysqlnd_protocol_payload_decoder_factory__init_eof_packet init_eof_packet; func_mysqlnd_protocol_payload_decoder_factory__init_rset_header_packet init_rset_header_packet; func_mysqlnd_protocol_payload_decoder_factory__init_result_field_packet init_result_field_packet; func_mysqlnd_protocol_payload_decoder_factory__init_row_packet init_row_packet; func_mysqlnd_protocol_payload_decoder_factory__init_stats_packet init_stats_packet; func_mysqlnd_protocol_payload_decoder_factory__init_prepare_response_packet init_prepare_response_packet; func_mysqlnd_protocol_payload_decoder_factory__init_change_user_response_packet init_change_user_response_packet; func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_packet init_sha256_pk_request_packet; func_mysqlnd_protocol_payload_decoder_factory__init_sha256_pk_request_response_packet init_sha256_pk_request_response_packet; func_mysqlnd_protocol_payload_decoder_factory__send_command send_command; func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_response send_command_handle_response; func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_OK send_command_handle_OK; func_mysqlnd_protocol_payload_decoder_factory__send_command_handle_EOF send_command_handle_EOF; }; struct st_mysqlnd_protocol_payload_decoder_factory { MYSQLND_CONN_DATA * conn; zend_bool persistent; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) m; }; typedef struct st_mysqlnd_read_buffer { zend_uchar * data; size_t offset; size_t size; size_t len; zend_bool (*is_empty)(const struct st_mysqlnd_read_buffer *); void (*read)(struct st_mysqlnd_read_buffer *, size_t count, zend_uchar * dest); size_t (*bytes_left)(const struct st_mysqlnd_read_buffer *); void (*free_buffer)(struct st_mysqlnd_read_buffer **); } MYSQLND_READ_BUFFER; typedef enum_func_status (*func_mysqlnd_pfc__init)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const stats, MYSQLND_ERROR_INFO * const error_info); typedef void (*func_mysqlnd_pfc__dtor)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_pfc__reset)(MYSQLND_PFC * const pfc, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_pfc__set_client_option)(MYSQLND_PFC * const pfc, enum_mysqlnd_client_option option, const char * const value); typedef enum_func_status (*func_mysqlnd_pfc__decode)(zend_uchar * uncompressed_data, const size_t uncompressed_data_len, const zend_uchar * const compressed_data, const size_t compressed_data_len); typedef enum_func_status (*func_mysqlnd_pfc__encode)(zend_uchar * compress_buffer, size_t * compress_buffer_len, const zend_uchar * const uncompressed_data, const size_t uncompressed_data_len); typedef size_t (*func_mysqlnd_pfc__send)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_pfc__receive)(MYSQLND_PFC * const pfc, MYSQLND_VIO * const vio, zend_uchar * const buffer, const size_t count, MYSQLND_STATS * const conn_stats, MYSQLND_ERROR_INFO * const error_info); typedef enum_func_status (*func_mysqlnd_pfc__read_compressed_packet_from_stream_and_fill_read_buffer)(MYSQLND_PFC * pfc, MYSQLND_VIO * const vio, size_t net_payload_size, MYSQLND_STATS * conn_stats, MYSQLND_ERROR_INFO * error_info); typedef void (*func_mysqlnd_pfc__free_contents)(MYSQLND_PFC * pfc); MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) { func_mysqlnd_pfc__init init; func_mysqlnd_pfc__dtor dtor; func_mysqlnd_pfc__reset reset; func_mysqlnd_pfc__set_client_option set_client_option; func_mysqlnd_pfc__decode decode; func_mysqlnd_pfc__encode encode; func_mysqlnd_pfc__send send; func_mysqlnd_pfc__receive receive; func_mysqlnd_pfc__read_compressed_packet_from_stream_and_fill_read_buffer read_compressed_packet_from_stream_and_fill_read_buffer; func_mysqlnd_pfc__free_contents free_contents; }; struct st_mysqlnd_protocol_frame_codec_data { php_stream *stream; zend_bool compressed; zend_bool ssl; uint64_t flags; char * sha256_server_public_key; #ifdef MYSQLND_COMPRESSION_ENABLED MYSQLND_READ_BUFFER * uncompressed_data; #else void * unused_pad1; #endif /* sequence for simple checking of correct packets */ zend_uchar packet_no; zend_uchar compressed_envelope_packet_no; zend_bool persistent; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) m; }; struct st_mysqlnd_protocol_frame_codec { MYSQLND_CMD_BUFFER cmd_buffer; struct st_mysqlnd_protocol_frame_codec_data * data; zend_bool persistent; }; struct st_mysqlnd_result_metadata { MYSQLND_FIELD *fields; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res_meta) * m; unsigned int current_field; unsigned int field_count; }; #define def_mysqlnd_buffered_result_parent \ MYSQLND_ROW_BUFFER *row_buffers; \ uint64_t row_count; \ uint64_t initialized_rows; \ \ /* Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ \ size_t *lengths; \ \ MYSQLND_MEMORY_POOL *result_set_memory_pool; \ \ unsigned int references; \ \ MYSQLND_ERROR_INFO error_info; \ \ unsigned int field_count; \ zend_bool ps; \ MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) m; \ enum mysqlnd_buffered_type type; \ void * unused1; \ void * unused2; \ void * unused3 struct st_mysqlnd_buffered_result_parent { def_mysqlnd_buffered_result_parent; }; struct st_mysqlnd_buffered_result_zval { def_mysqlnd_buffered_result_parent; zval *data; zval *data_cursor; }; struct st_mysqlnd_buffered_result_c { def_mysqlnd_buffered_result_parent; zend_uchar *initialized; /* every row is a single bit */ uint64_t current_row; }; struct st_mysqlnd_unbuffered_result { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) m; uint64_t row_count; /* For unbuffered (both normal and PS) */ zval *last_row_data; MYSQLND_ROW_BUFFER last_row_buffer; /* Column lengths of current row - both buffered and unbuffered. For buffered results it duplicates the data found in **data */ size_t *lengths; MYSQLND_MEMORY_POOL *result_set_memory_pool; struct st_mysqlnd_packet_row *row_packet; unsigned int field_count; zend_bool eof_reached; zend_bool ps; }; struct st_mysqlnd_res { MYSQLND_CONN_DATA *conn; enum_mysqlnd_res_type type; unsigned int field_count; /* For metadata functions */ MYSQLND_RES_METADATA *meta; /* To be used with store_result() - both normal and PS */ MYSQLND_RES_BUFFERED *stored_data; MYSQLND_RES_UNBUFFERED *unbuf; MYSQLND_MEMORY_POOL *memory_pool; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) m; }; struct st_mysqlnd_param_bind { zval zv; zend_uchar type; enum_param_bind_flags flags; }; struct st_mysqlnd_result_bind { zval zv; zend_bool bound; }; struct st_mysqlnd_stmt_data { MYSQLND_CONN_DATA *conn; zend_ulong stmt_id; zend_ulong flags;/* cursor is set here */ enum_mysqlnd_stmt_state state; MYSQLND_RES *result; unsigned int field_count; unsigned int param_count; unsigned char send_types_to_server; MYSQLND_PARAM_BIND *param_bind; MYSQLND_RESULT_BIND *result_bind; zend_bool result_zvals_separated_once; MYSQLND_UPSERT_STATUS * upsert_status; MYSQLND_UPSERT_STATUS upsert_status_impl; MYSQLND_ERROR_INFO * error_info; MYSQLND_ERROR_INFO error_info_impl; zend_bool update_max_length; zend_ulong prefetch_rows; zend_bool cursor_exists; mysqlnd_stmt_use_or_store_func default_rset_handler; zval execute_read_cb; zval execute_err_cb; zend_bool in_execute_read_cb; zend_bool in_execute_err_cb; MYSQLND_CMD_BUFFER execute_cmd_buffer; unsigned int execute_count;/* count how many times the stmt was executed */ }; struct st_mysqlnd_stmt { MYSQLND_STMT_DATA * data; MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * m; }; struct st_mysqlnd_plugin_header { unsigned int plugin_api_version; const char * plugin_name; zend_ulong plugin_version; const char * plugin_string_version; const char * plugin_license; const char * plugin_author; struct { MYSQLND_STATS * values; const MYSQLND_STRING * names; } plugin_stats; struct { enum_func_status (*plugin_shutdown)(void * plugin); } m; }; struct st_mysqlnd_plugin_core { struct st_mysqlnd_plugin_header plugin_header; }; struct st_mysqlnd_typeii_plugin_example { struct st_mysqlnd_plugin_header plugin_header; void * methods; unsigned int counter; }; struct st_mysqlnd_authentication_plugin; typedef zend_uchar * (*func_auth_plugin__get_auth_data)(struct st_mysqlnd_authentication_plugin * self, size_t * auth_data_len, MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, const MYSQLND_SESSION_OPTIONS * const session_options, const MYSQLND_PFC_DATA * const pfc_data, zend_ulong mysql_flags ); struct st_mysqlnd_authentication_plugin { struct st_mysqlnd_plugin_header plugin_header; struct { func_auth_plugin__get_auth_data get_auth_data; } methods; }; #endif /* MYSQLND_STRUCTS_H */ PK!5ee!ext/mysqlnd/mysqlnd_read_buffer.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_READ_BUFFER_H #define MYSQLND_READ_BUFFER_H PHPAPI MYSQLND_READ_BUFFER * mysqlnd_create_read_buffer(const size_t count); #endif /* MYSQLND_READ_BUFFER_H */ PK!}D} ! ! ext/mysqlnd/mysqlnd_ext_plugin.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Johannes Schlüter | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_EXT_PLUGIN_H #define MYSQLND_EXT_PLUGIN_H struct st_mysqlnd_plugin__plugin_area_getters { void ** (*get_connection_area)(const MYSQLND * conn, const unsigned int plugin_id); void ** (*get_connection_data_area)(const MYSQLND_CONN_DATA * conn, const unsigned int plugin_id); void ** (*get_result_area)(const MYSQLND_RES * result, const unsigned int plugin_id); void ** (*get_unbuffered_area)(const MYSQLND_RES_UNBUFFERED * result, const unsigned int plugin_id); void ** (*get_result_buffered_area)(const MYSQLND_RES_BUFFERED_ZVAL * result, const unsigned int plugin_id); void ** (*get_result_buffered_aread_c)(const MYSQLND_RES_BUFFERED_C * result, const unsigned int plugin_id); void ** (*get_stmt_area)(const MYSQLND_STMT * stmt, const unsigned int plugin_id); void ** (*get_protocol_decoder_area)(const MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * factory, const unsigned int plugin_id); void ** (*get_pfc_area)(const MYSQLND_PFC * pfc, const unsigned int plugin_id); void ** (*get_vio_area)(const MYSQLND_VIO * vio, const unsigned int plugin_id); }; PHPAPI extern struct st_mysqlnd_plugin__plugin_area_getters mysqlnd_plugin_area_getters; #define mysqlnd_plugin_get_plugin_connection_data(c, p_id) mysqlnd_plugin_area_getters.get_connection_area((c), (p_id)) #define mysqlnd_plugin_get_plugin_connection_data_data(c, p_id) mysqlnd_plugin_area_getters.get_connection_data_area((c), (p_id)) #define mysqlnd_plugin_get_plugin_result_data(res, p_id) mysqlnd_plugin_area_getters.get_result_area((res), (p_id)) #define mysqlnd_plugin_get_plugin_result_unbuffered_data(res, p_id) mysqlnd_plugin_area_getters.get_unbuffered_area((res), (p_id)) #define mysqlnd_plugin_get_plugin_result_buffered_data_zval(res, p_id) mysqlnd_plugin_area_getters.get_result_buffered_area((res), (p_id)) #define mysqlnd_plugin_get_plugin_result_buffered_data_c(res, p_id) mysqlnd_plugin_area_getters.get_result_buffered_aread_c((res), (p_id)) #define mysqlnd_plugin_get_plugin_stmt_data(stmt, p_id) mysqlnd_plugin_area_getters.get_stmt_area((stmt), (p_id)) #define mysqlnd_plugin_get_plugin_protocol_data(proto, p_id) mysqlnd_plugin_area_getters.get_protocol_decoder_area((proto), (p_id)) #define mysqlnd_plugin_get_plugin_pfc_data(pfc, p_id) mysqlnd_plugin_area_getters.get_pfc_area((pfc), (p_id)) #define mysqlnd_plugin_get_plugin_vio_data(vio, p_id) mysqlnd_plugin_area_getters.get_pfc_area((vio), (p_id)) struct st_mysqlnd_plugin_methods_xetters { struct st_mnd_object_factory_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *methods); } object_factory; struct st_mnd_connection_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn) *methods); } connection; struct st_mnd_connection_data_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_conn_data) *methods); } connection_data; struct st_mnd_result_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_res) *methods); } result; struct st_mnd_unbuffered_result_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_unbuffered) *methods); } unbuffered_result; struct st_mnd_buffered_result_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered)* (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_result_buffered) *methods); } buffered_result; struct st_mnd_stmt_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_stmt) * methods); } statement; struct st_mnd_protocol_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory)* (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_payload_decoder_factory) *methods); } protocol; struct st_mnd_pfc_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_protocol_packet_frame_codec) * methods); } pfc; struct st_mnd_vio_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_vio) * methods); } vio; struct st_mnd_error_info_xetters { MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) * (*get)(); void (*set)(MYSQLND_CLASS_METHODS_TYPE(mysqlnd_error_info) * methods); } error_info; struct st_mnd_command_factory_xetters { func_mysqlnd__run_command (*get)(); void (*set)(func_mysqlnd__run_command factory); } command_factory; }; PHPAPI extern struct st_mysqlnd_plugin_methods_xetters mysqlnd_plugin_methods_xetters; #define mysqlnd_object_factory_get_methods() mysqlnd_plugin_methods_xetters.object_factory.get() #define mysqlnd_object_factory_set_methods(m) mysqlnd_plugin_methods_xetters.object_factory.set((m)) #define mysqlnd_conn_get_methods() mysqlnd_plugin_methods_xetters.connection.get() #define mysqlnd_conn_set_methods(m) mysqlnd_plugin_methods_xetters.connection.set((m)) #define mysqlnd_conn_data_get_methods() mysqlnd_plugin_methods_xetters.connection_data.get() #define mysqlnd_conn_data_set_methods(m) mysqlnd_plugin_methods_xetters.connection_data.set((m)) #define mysqlnd_result_get_methods() mysqlnd_plugin_methods_xetters.result.get() #define mysqlnd_result_set_methods(m) mysqlnd_plugin_methods_xetters.result.set((m)) #define mysqlnd_result_unbuffered_get_methods() mysqlnd_plugin_methods_xetters.unbuffered_result.get() #define mysqlnd_result_unbuffered_set_methods(m) mysqlnd_plugin_methods_xetters.unbuffered_result.set((m)) #define mysqlnd_result_buffered_get_methods() mysqlnd_plugin_methods_xetters.buffered_result.get() #define mysqlnd_result_buffered_set_methods(m) mysqlnd_plugin_methods_xetters.buffered_result.set((m)) #define mysqlnd_stmt_get_methods() mysqlnd_plugin_methods_xetters.statement.get() #define mysqlnd_stmt_set_methods(m) mysqlnd_plugin_methods_xetters.statement.set((m)) #define mysqlnd_protocol_get_methods() mysqlnd_plugin_methods_xetters.protocol.get() #define mysqlnd_protocol_set_methods(m) mysqlnd_plugin_methods_xetters.protocol.set((m)) #define mysqlnd_pfc_get_methods() mysqlnd_plugin_methods_xetters.pfc.get() #define mysqlnd_pfc_set_methods(m) mysqlnd_plugin_methods_xetters.pfc.set((m)) #define mysqlnd_vio_get_methods() mysqlnd_plugin_methods_xetters.vio.get() #define mysqlnd_vio_set_methods(m) mysqlnd_plugin_methods_xetters.vio.set((m)) #define mysqlnd_command_factory_get() mysqlnd_plugin_methods_xetters.command_factory.get() #define mysqlnd_command_factory_set(m) mysqlnd_plugin_methods_xetters.command_factory.set((m)) #define mysqlnd_error_info_get_methods() mysqlnd_plugin_methods_xetters.error_info.get() #define mysqlnd_error_info_set_methods(m) mysqlnd_plugin_methods_xetters.error_info.set((m)) #endif /* MYSQLND_EXT_PLUGIN_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!V*ext/mysqlnd/mysqlnd_protocol_frame_codec.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_PROTOCOL_FRAME_CODEC_H #define MYSQLND_PROTOCOL_FRAME_CODEC_H PHPAPI MYSQLND_PFC * mysqlnd_pfc_init(const zend_bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); PHPAPI void mysqlnd_pfc_free(MYSQLND_PFC * const pfc, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); #endif /* MYSQLND_PROTOCOL_FRAME_CODEC_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!}`%ext/mysqlnd/mysqlnd_libmysql_compat.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | | Georg Richter | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_LIBMYSQL_COMPAT_H #define MYSQLND_LIBMYSQL_COMPAT_H /* Global types and definitions*/ #define MYSQL_NO_DATA MYSQLND_NO_DATA #define MYSQL_DATA_TRUNCATED MYSQLND_DATA_TRUNCATED #define MYSQL_STMT MYSQLND_STMT #define MYSQL_FIELD MYSQLND_FIELD #define MYSQL_RES MYSQLND_RES #define MYSQL_ROW MYSQLND_ROW_C #define MYSQL MYSQLND #define my_bool zend_bool #define my_ulonglong uint64_t #define MYSQL_VERSION_ID MYSQLND_VERSION_ID #define MYSQL_SERVER_VERSION PHP_MYSQLND_VERSION #define MYSQL_ERRMSG_SIZE MYSQLND_ERRMSG_SIZE #define SQLSTATE_LENGTH MYSQLND_SQLSTATE_LENGTH /* functions */ #define mysql_affected_rows(r) mysqlnd_affected_rows((r)) #define mysql_autocommit(r,m) mysqlnd_autocommit((r),(m)) #define mysql_change_user(r,a,b,c) mysqlnd_change_user((r), (a), (b), (c), FALSE) #define mysql_character_set_name(c) mysqlnd_character_set_name((c)) #define mysql_close(r) mysqlnd_close((r), MYSQLND_CLOSE_EXPLICIT) #define mysql_commit(r) mysqlnd_commit((r), TRANS_COR_NO_OPT, NULL) #define mysql_data_seek(r,o) mysqlnd_data_seek((r),(o)) #define mysql_debug(x) mysqlnd_debug((x)) #define mysql_dump_debug_info(r) mysqlnd_dump_debug_info((r)) #define mysql_errno(r) mysqlnd_errno((r)) #define mysql_error(r) mysqlnd_error((r)) #define mysql_escape_string(a,b,c) mysqlnd_escape_string((a), (b), (c)) #define mysql_fetch_field(r) mysqlnd_fetch_field((r)) #define mysql_fetch_field_direct(r,o) mysqlnd_fetch_field_direct((r), (o)) #define mysql_fetch_fields(r) mysqlnd_fetch_fields((r)) #define mysql_fetch_lengths(r) mysqlnd_fetch_lengths((r)) #define mysql_fetch_row(r) mysqlnd_fetch_row_c((r)) #define mysql_field_count(r) mysqlnd_field_count((r)) #define mysql_field_seek(r,o) mysqlnd_field_seek((r), (o)) #define mysql_field_tell(r) mysqlnd_field_tell((r)) #define mysql_init(a) mysqlnd_connection_init((a), false) #define mysql_insert_id(r) mysqlnd_insert_id((r)) #define mysql_kill(r,n) mysqlnd_kill((r), (n)) #define mysql_list_dbs(c, wild) mysqlnd_list_dbs((c), (wild)) #define mysql_list_processes(c) mysqlnd_list_processes((c)) #define mysql_list_tables(c, wild) mysqlnd_list_tables((c), (wild)) #define mysql_more_results(r) mysqlnd_more_results((r)) #define mysql_next_result(r) mysqlnd_next_result((r)) #define mysql_num_fields(r) mysqlnd_num_fields((r)) #define mysql_num_rows(r) mysqlnd_num_rows((r)) #define mysql_ping(r) mysqlnd_ping((r)) #define mysql_real_escape_string(r,a,b,c) mysqlnd_real_escape_string((r), (a), (b), (c)) #define mysql_real_query(r,a,b) mysqlnd_query((r), (a), (b)) #define mysql_refresh(conn, options) mysqlnd_refresh((conn), (options)) #define mysql_rollback(r) mysqlnd_rollback((r), TRANS_COR_NO_OPT, NULL) #define mysql_select_db(r,a) mysqlnd_select_db((r), (a) ,strlen((a))) #define mysql_set_server_option(r,o) mysqlnd_set_server_option((r), (o)) #define mysql_set_character_set(r,a) mysqlnd_set_character_set((r), (a)) #define mysql_sqlstate(r) mysqlnd_sqlstate((r)) #define mysql_ssl_set(c,key,cert,ca,capath,cipher) mysqlnd_ssl_set((c), (key), (cert), (ca), (capath), (cipher)) #define mysql_stmt_affected_rows(s) mysqlnd_stmt_affected_rows((s)) #define mysql_stmt_field_count(s) mysqlnd_stmt_field_count((s)) #define mysql_stmt_param_count(s) mysqlnd_stmt_param_count((s)) #define mysql_stmt_num_rows(s) mysqlnd_stmt_num_rows((s)) #define mysql_stmt_insert_id(s) mysqlnd_stmt_insert_id((s)) #define mysql_stmt_close(s) mysqlnd_stmt_close((s)) #define mysql_stmt_bind_param(s,b) mysqlnd_stmt_bind_param((s), (b)) #define mysql_stmt_bind_result(s,b) mysqlnd_stmt_bind_result((s), (b)) #define mysql_stmt_errno(s) mysqlnd_stmt_errno((s)) #define mysql_stmt_error(s) mysqlnd_stmt_error((s)) #define mysql_stmt_sqlstate(s) mysqlnd_stmt_sqlstate((s)) #define mysql_stmt_prepare(s,q,l) mysqlnd_stmt_prepare((s), (q), (l)) #define mysql_stmt_execute(s) mysqlnd_stmt_execute((s)) #define mysql_stmt_reset(s) mysqlnd_stmt_reset((s)) #define mysql_stmt_store_result(s) mysqlnd_stmt_store_result((s)) #define mysql_stmt_free_result(s) mysqlnd_stmt_free_result((s)) #define mysql_stmt_data_seek(s,r) mysqlnd_stmt_data_seek((s), (r)) #define mysql_stmt_send_long_data(s,p,d,l) mysqlnd_stmt_send_long_data((s), (p), (d), (l)) #define mysql_stmt_attr_get(s,a,v) mysqlnd_stmt_attr_get((s), (a), (v)) #define mysql_stmt_attr_set(s,a,v) mysqlnd_stmt_attr_set((s), (a), (v)) #define mysql_stmt_param_metadata(s) mysqlnd_stmt_param_metadata((s)) #define mysql_stmt_result_metadata(s) mysqlnd_stmt_result_metadata((s)) #define mysql_stmt_next_result(s) mysqlnd_stmt_next_result((s)) #define mysql_stmt_more_results(s) mysqlnd_stmt_more_results((s)) #define mysql_thread_safe() mysqlnd_thread_safe() #define mysql_info(r) mysqlnd_info((r)) #define mysql_options(c,a,v) mysqlnd_options((c), (a), (v)) #define mysql_options4(c,a,k,v) mysqlnd_options4((c), (a), (k), (v)) #define mysql_stmt_init(r) mysqlnd_stmt_init((r)) #define mysql_free_result(r) mysqlnd_free_result((r), FALSE) #define mysql_store_result(r) mysqlnd_store_result((r)) #define mysql_use_result(r) mysqlnd_use_result((r)) #define mysql_async_store_result(r) mysqlnd_async_store_result((r)) #define mysql_thread_id(r) mysqlnd_thread_id((r)) #define mysql_get_client_info() mysqlnd_get_client_info() #define mysql_get_client_version() mysqlnd_get_client_version() #define mysql_get_host_info(r) mysqlnd_get_host_info((r)) #define mysql_get_proto_info(r) mysqlnd_get_proto_info((r)) #define mysql_get_server_info(r) mysqlnd_get_server_info((r)) #define mysql_get_server_version(r) mysqlnd_get_server_version((r)) #define mysql_warning_count(r) mysqlnd_warning_count((r)) #define mysql_eof(r) (((r)->unbuf && (r)->unbuf->eof_reached) || (r)->stored_data) #define REFRESH_GRANT MYSQLND_REFRESH_GRANT #define REFRESH_LOG MYSQLND_REFRESH_LOG #define REFRESH_TABLES MYSQLND_REFRESH_TABLES #define REFRESH_HOSTS MYSQLND_REFRESH_HOSTS #define REFRESH_STATUS MYSQLND_REFRESH_STATUS #define REFRESH_THREADS MYSQLND_REFRESH_THREADS #define REFRESH_SLAVE MYSQLND_REFRESH_SLAVE #define REFRESH_MASTER MYSQLND_REFRESH_MASTER #define REFRESH_BACKUP_LOG MYSQLND_REFRESH_BACKUP_LOG #endif /* MYSQLND_LIBMYSQL_COMPAT_H */ PK!}*!ext/mysqlnd/mysqlnd_block_alloc.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_BLOCK_ALLOC_H #define MYSQLND_BLOCK_ALLOC_H PHPAPI MYSQLND_MEMORY_POOL * mysqlnd_mempool_create(size_t arena_size); PHPAPI void mysqlnd_mempool_destroy(MYSQLND_MEMORY_POOL * pool); PHPAPI void mysqlnd_mempool_save_state(MYSQLND_MEMORY_POOL * pool); PHPAPI void mysqlnd_mempool_restore_state(MYSQLND_MEMORY_POOL * pool); #endif /* MYSQLND_BLOCK_ALLOC_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!- ext/mysqlnd/mysqlnd_auth.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_AUTH_H #define MYSQLND_AUTH_H enum_func_status mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, const char * const db, const size_t db_len, const MYSQLND_SESSION_OPTIONS * const session_options, zend_ulong mysql_flags, unsigned int server_charset_no, zend_bool use_full_blown_auth_packet, const char * const auth_protocol, const zend_uchar * const auth_plugin_data, const size_t auth_plugin_data_len, char ** switch_to_auth_protocol, size_t * switch_to_auth_protocol_len, zend_uchar ** switch_to_auth_protocol_data, size_t * switch_to_auth_protocol_data_len ); enum_func_status mysqlnd_auth_handshake(MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, const char * const db, const size_t db_len, const MYSQLND_SESSION_OPTIONS * const session_options, zend_ulong mysql_flags, unsigned int server_charset_no, zend_bool use_full_blown_auth_packet, const char * const auth_protocol, const zend_uchar * const auth_plugin_data, const size_t auth_plugin_data_len, char ** switch_to_auth_protocol, size_t * switch_to_auth_protocol_len, zend_uchar ** switch_to_auth_protocol_data, size_t * switch_to_auth_protocol_data_len ); enum_func_status mysqlnd_auth_change_user(MYSQLND_CONN_DATA * const conn, const char * const user, const size_t user_len, const char * const passwd, const size_t passwd_len, const char * const db, const size_t db_len, const zend_bool silent, zend_bool use_full_blown_auth_packet, const char * const auth_protocol, zend_uchar * auth_plugin_data, size_t auth_plugin_data_len, char ** switch_to_auth_protocol, size_t * switch_to_auth_protocol_len, zend_uchar ** switch_to_auth_protocol_data, size_t * switch_to_auth_protocol_data_len ); enum_func_status mysqlnd_connect_run_authentication( MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const char * const db, size_t db_len, size_t passwd_len, MYSQLND_STRING authentication_plugin_data, const char * const authentication_protocol, const unsigned int charset_no, size_t server_capabilities, const MYSQLND_SESSION_OPTIONS * const session_options, zend_ulong mysql_flags ); enum_func_status mysqlnd_run_authentication( MYSQLND_CONN_DATA * conn, const char * const user, const char * const passwd, const size_t passwd_len, const char * const db, const size_t db_len, const MYSQLND_STRING auth_plugin_data, const char * const auth_protocol, unsigned int charset_no, const MYSQLND_SESSION_OPTIONS * const session_options, zend_ulong mysql_flags, zend_bool silent, zend_bool is_change_user ); PHPAPI void php_mysqlnd_scramble(zend_uchar * const buffer, const zend_uchar * const scramble, const zend_uchar * const pass, const size_t pass_len); #endif /* MYSQLND_AUTH_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!QQext/mysqlnd/mysqlnd_plugin.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_PLUGIN_H #define MYSQLND_PLUGIN_H void mysqlnd_plugin_subsystem_init(void); void mysqlnd_plugin_subsystem_end(void); void mysqlnd_register_builtin_authentication_plugins(void); void mysqlnd_example_plugin_register(void); #endif /* MYSQLND_PLUGIN_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!]ؓƬKKext/mysqlnd/mysqlnd.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | | Georg Richter | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_H #define MYSQLND_H #define PHP_MYSQLND_VERSION "mysqlnd 5.0.12-dev - 20150407 - $Id: 7cc7cc96e675f6d72e5cf0f267f48e167c2abb23 $" #define MYSQLND_VERSION_ID 50012 #define MYSQLND_PLUGIN_API_VERSION 2 #define MYSQLND_STRING_TO_INT_CONVERSION /* This force mysqlnd to do a single (or more depending on amount of data) non-blocking read() calls before sending a command to the server. Useful for debugging, if previous function hasn't consumed all the output sent to it - like stmt_send_long_data() error because the data was larger that max_allowed_packet_size, and COM_STMT_SEND_LONG_DATA by protocol doesn't use response packets, thus letting the next command to fail miserably, if the connector implementor is not aware of this deficiency. Should be off on production systems, if of course measured performance degradation is not minimal. */ #if A0 && PHP_DEBUG #define MYSQLND_DO_WIRE_CHECK_BEFORE_COMMAND 1 #endif #if PHP_DEBUG #define MYSQLND_DBG_ENABLED 1 #else #define MYSQLND_DBG_ENABLED 0 #endif #if defined(MYSQLND_COMPRESSION_WANTED) && defined(HAVE_ZLIB) #define MYSQLND_COMPRESSION_ENABLED 1 #endif #ifdef ZTS #include "TSRM.h" #endif #include "mysqlnd_portability.h" #include "mysqlnd_enum_n_def.h" #include "mysqlnd_structs.h" #define MYSQLND_STR_W_LEN(str) str, (sizeof(str) - 1) /* Library related */ PHPAPI void mysqlnd_library_init(void); PHPAPI void mysqlnd_library_end(void); PHPAPI unsigned int mysqlnd_plugin_register(); PHPAPI unsigned int mysqlnd_plugin_register_ex(struct st_mysqlnd_plugin_header * plugin); PHPAPI unsigned int mysqlnd_plugin_count(); PHPAPI void * mysqlnd_plugin_find(const char * const name); PHPAPI void mysqlnd_plugin_apply_with_argument(apply_func_arg_t apply_func, void * argument); #define mysqlnd_restart_psession(conn) ((conn)->data)->m->restart_psession((conn)->data) #define mysqlnd_end_psession(conn) ((conn)->data)->m->end_psession((conn)->data) PHPAPI void mysqlnd_minfo_print_hash(zval *values); #define mysqlnd_thread_safe() TRUE PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_nr(unsigned int charsetno); PHPAPI const MYSQLND_CHARSET * mysqlnd_find_charset_name(const char * const charsetname); /* Connect */ #define mysqlnd_init(flags, persistent) mysqlnd_connection_init((flags), (persistent), NULL /*use default factory*/) #define mysqlnd_connect(conn, host, user, pass, pass_len, db, db_len, port, socket, mysql_flags, client_api_flags) \ mysqlnd_connection_connect((conn), (host), (user), (pass), (pass_len), (db), (db_len), (port), (socket), (mysql_flags), (client_api_flags)) PHPAPI MYSQLND * mysqlnd_connection_init(const size_t client_flags, const zend_bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory); PHPAPI MYSQLND * mysqlnd_connection_connect(MYSQLND * conn, const char * const host, const char * const user, const char * const passwd, unsigned int passwd_len, const char * const db, unsigned int db_len, unsigned int port, const char * const socket_or_pipe, unsigned int mysql_flags, unsigned int client_api_flags ); #define mysqlnd_change_user(conn, user, passwd, db, silent) ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), strlen((passwd))) #define mysqlnd_change_user_ex(conn, user, passwd, db, silent, passwd_len) ((conn)->data)->m->change_user((conn)->data, (user), (passwd), (db), (silent), (passwd_len)) PHPAPI void mysqlnd_debug(const char *mode); /* Query */ #define mysqlnd_fetch_into(result, flags, ret_val, ext) (result)->m.fetch_into((result), (flags), (ret_val), (ext) ZEND_FILE_LINE_CC) #define mysqlnd_fetch_row_c(result) (result)->m.fetch_row_c((result)) #define mysqlnd_fetch_all(result, flags, return_value) (result)->m.fetch_all((result), (flags), (return_value) ZEND_FILE_LINE_CC) #define mysqlnd_result_fetch_field_data(res,offset,ret) (res)->m.fetch_field_data((res), (offset), (ret)) #define mysqlnd_get_connection_stats(conn, values) ((conn)->data)->m->get_statistics((conn)->data, (values) ZEND_FILE_LINE_CC) #define mysqlnd_get_client_stats(values) _mysqlnd_get_client_stats(mysqlnd_global_stats, (values) ZEND_FILE_LINE_CC) #define mysqlnd_close(conn,is_forced) (conn)->m->close((conn), (is_forced)) #define mysqlnd_query(conn, query_str, query_len) ((conn)->data)->m->query((conn)->data, (query_str), (query_len)) #define mysqlnd_async_query(conn, query_str, query_len) ((conn)->data)->m->send_query((conn)->data, (query_str), (query_len), MYSQLND_SEND_QUERY_EXPLICIT, NULL, NULL) #define mysqlnd_reap_async_query(conn) ((conn)->data)->m->reap_query((conn)->data, MYSQLND_REAP_RESULT_EXPLICIT) #define mysqlnd_unbuffered_skip_result(result) (result)->m.skip_result((result)) PHPAPI enum_func_status mysqlnd_poll(MYSQLND **r_array, MYSQLND **e_array, MYSQLND ***dont_poll, long sec, long usec, int * desc_num); #define mysqlnd_use_result(conn) ((conn)->data)->m->use_result((conn)->data, 0) #define mysqlnd_store_result(conn) ((conn)->data)->m->store_result((conn)->data, MYSQLND_STORE_NO_COPY) #define mysqlnd_store_result_ofs(conn) ((conn)->data)->m->store_result((conn)->data, MYSQLND_STORE_COPY) #define mysqlnd_next_result(conn) ((conn)->data)->m->next_result((conn)->data) #define mysqlnd_more_results(conn) ((conn)->data)->m->more_results((conn)->data) #define mysqlnd_free_result(r,e_or_i) ((MYSQLND_RES*)r)->m.free_result(((MYSQLND_RES*)(r)), (e_or_i)) #define mysqlnd_data_seek(result, row) (result)->m.seek_data((result), (row)) /* Errors */ #define mysqlnd_errno(conn) ((conn)->data)->m->get_error_no((conn)->data) #define mysqlnd_error(conn) ((conn)->data)->m->get_error_str((conn)->data) #define mysqlnd_sqlstate(conn) ((conn)->data)->m->get_sqlstate((conn)->data) /* Charset */ #define mysqlnd_character_set_name(conn) ((conn)->data)->m->charset_name((conn)->data) /* Simple metadata */ #define mysqlnd_field_count(conn) ((conn)->data)->m->get_field_count((conn)->data) #define mysqlnd_insert_id(conn) ((conn)->data)->m->get_last_insert_id((conn)->data) #define mysqlnd_affected_rows(conn) ((conn)->data)->m->get_affected_rows((conn)->data) #define mysqlnd_warning_count(conn) ((conn)->data)->m->get_warning_count((conn)->data) #define mysqlnd_info(conn) ((conn)->data)->m->get_last_message((conn)->data) #define mysqlnd_get_server_info(conn) ((conn)->data)->m->get_server_information((conn)->data) #define mysqlnd_get_server_version(conn) ((conn)->data)->m->get_server_version((conn)->data) #define mysqlnd_get_host_info(conn) ((conn)->data)->m->get_host_information((conn)->data) #define mysqlnd_get_proto_info(conn) ((conn)->data)->m->get_protocol_information((conn)->data) #define mysqlnd_thread_id(conn) ((conn)->data)->m->get_thread_id((conn)->data) #define mysqlnd_get_server_status(conn) ((conn)->data)->m->get_server_status((conn)->data) #define mysqlnd_num_rows(result) (result)->m.num_rows((result)) #define mysqlnd_num_fields(result) (result)->m.num_fields((result)) #define mysqlnd_fetch_lengths(result) (result)->m.fetch_lengths((result)) #define mysqlnd_field_seek(result, ofs) (result)->m.seek_field((result), (ofs)) #define mysqlnd_field_tell(result) (result)->m.field_tell((result)) #define mysqlnd_fetch_field(result) (result)->m.fetch_field((result)) #define mysqlnd_fetch_field_direct(result,fnr) (result)->m.fetch_field_direct((result), (fnr)) #define mysqlnd_fetch_fields(result) (result)->m.fetch_fields((result)) /* mysqlnd metadata */ PHPAPI const char * mysqlnd_get_client_info(); PHPAPI unsigned long mysqlnd_get_client_version(); #define mysqlnd_ssl_set(conn, key, cert, ca, capath, cipher) ((conn)->data)->m->ssl_set((conn)->data, (key), (cert), (ca), (capath), (cipher)) /* PS */ #define mysqlnd_stmt_insert_id(stmt) (stmt)->m->get_last_insert_id((stmt)) #define mysqlnd_stmt_affected_rows(stmt) (stmt)->m->get_affected_rows((stmt)) #define mysqlnd_stmt_num_rows(stmt) (stmt)->m->get_num_rows((stmt)) #define mysqlnd_stmt_param_count(stmt) (stmt)->m->get_param_count((stmt)) #define mysqlnd_stmt_field_count(stmt) (stmt)->m->get_field_count((stmt)) #define mysqlnd_stmt_warning_count(stmt) (stmt)->m->get_warning_count((stmt)) #define mysqlnd_stmt_server_status(stmt) (stmt)->m->get_server_status((stmt)) #define mysqlnd_stmt_errno(stmt) (stmt)->m->get_error_no((stmt)) #define mysqlnd_stmt_error(stmt) (stmt)->m->get_error_str((stmt)) #define mysqlnd_stmt_sqlstate(stmt) (stmt)->m->get_sqlstate((stmt)) PHPAPI void mysqlnd_efree_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind); PHPAPI void mysqlnd_efree_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind); PHPAPI void mysqlnd_free_param_bind_dtor(MYSQLND_PARAM_BIND * param_bind); PHPAPI void mysqlnd_free_result_bind_dtor(MYSQLND_RESULT_BIND * result_bind); PHPAPI const char * mysqlnd_field_type_name(const enum mysqlnd_field_types field_type); /* LOAD DATA LOCAL */ PHPAPI void mysqlnd_local_infile_default(MYSQLND_CONN_DATA * conn); /* Simple commands */ #define mysqlnd_autocommit(conn, mode) ((conn)->data)->m->set_autocommit((conn)->data, (mode)) #define mysqlnd_begin_transaction(conn,flags,name) ((conn)->data)->m->tx_begin((conn)->data, (flags), (name)) #define mysqlnd_commit(conn, flags, name) ((conn)->data)->m->tx_commit_or_rollback((conn)->data, TRUE, (flags), (name)) #define mysqlnd_rollback(conn, flags, name) ((conn)->data)->m->tx_commit_or_rollback((conn)->data, FALSE, (flags), (name)) #define mysqlnd_savepoint(conn, name) ((conn)->data)->m->tx_savepoint((conn)->data, (name)) #define mysqlnd_release_savepoint(conn, name) ((conn)->data)->m->tx_savepoint_release((conn)->data, (name)) #define mysqlnd_list_dbs(conn, wild) ((conn)->data)->m->list_method((conn)->data, wild? "SHOW DATABASES LIKE %s":"SHOW DATABASES", (wild), NULL) #define mysqlnd_list_processes(conn) ((conn)->data)->m->list_method((conn)->data, "SHOW PROCESSLIST", NULL, NULL) #define mysqlnd_list_tables(conn, wild) ((conn)->data)->m->list_method((conn)->data, wild? "SHOW TABLES LIKE %s":"SHOW TABLES", (wild), NULL) #define mysqlnd_dump_debug_info(conn) ((conn)->data)->m->server_dump_debug_information((conn)->data) #define mysqlnd_select_db(conn, db, db_len) ((conn)->data)->m->select_db((conn)->data, (db), (db_len)) #define mysqlnd_ping(conn) ((conn)->data)->m->ping((conn)->data) #define mysqlnd_kill(conn, pid) ((conn)->data)->m->kill_connection((conn)->data, (pid)) #define mysqlnd_refresh(conn, options) ((conn)->data)->m->refresh_server((conn)->data, (options)) #define mysqlnd_shutdown(conn, level) ((conn)->data)->m->shutdown_server((conn)->data, (level)) #define mysqlnd_set_character_set(conn, cs) ((conn)->data)->m->set_charset((conn)->data, (cs)) #define mysqlnd_stat(conn, msg) ((conn)->data)->m->get_server_statistics(((conn)->data), (msg)) #define mysqlnd_options(conn, opt, value) ((conn)->data)->m->set_client_option((conn)->data, (opt), (value)) #define mysqlnd_options4(conn, opt, k, v) ((conn)->data)->m->set_client_option_2d((conn)->data, (opt), (k), (v)) #define mysqlnd_set_server_option(conn, op) ((conn)->data)->m->set_server_option((conn)->data, (op)) /* Escaping */ #define mysqlnd_real_escape_string(conn, newstr, escapestr, escapestr_len) \ ((conn)->data)->m->escape_string((conn)->data, (newstr), (escapestr), (escapestr_len)) #define mysqlnd_escape_string(newstr, escapestr, escapestr_len) \ mysqlnd_old_escape_string((newstr), (escapestr), (escapestr_len)) PHPAPI zend_ulong mysqlnd_old_escape_string(char * newstr, const char * escapestr, size_t escapestr_len); /* PS */ #define mysqlnd_stmt_init(conn) ((conn)->data)->m->stmt_init(((conn)->data)) #define mysqlnd_stmt_store_result(stmt) (!mysqlnd_stmt_field_count((stmt)) ? PASS:((stmt)->m->store_result((stmt))? PASS:FAIL)) #define mysqlnd_stmt_get_result(stmt) (stmt)->m->get_result((stmt)) #define mysqlnd_stmt_more_results(stmt) (stmt)->m->more_results((stmt)) #define mysqlnd_stmt_next_result(stmt) (stmt)->m->next_result((stmt)) #define mysqlnd_stmt_data_seek(stmt, row) (stmt)->m->seek_data((stmt), (row)) #define mysqlnd_stmt_prepare(stmt, q, qlen) (stmt)->m->prepare((stmt), (q), (qlen)) #define mysqlnd_stmt_execute(stmt) (stmt)->m->execute((stmt)) #define mysqlnd_stmt_send_long_data(stmt,p,d,l) (stmt)->m->send_long_data((stmt), (p), (d), (l)) #define mysqlnd_stmt_alloc_param_bind(stmt) (stmt)->m->alloc_parameter_bind((stmt)) #define mysqlnd_stmt_free_param_bind(stmt,bind) (stmt)->m->free_parameter_bind((stmt), (bind)) #define mysqlnd_stmt_bind_param(stmt,bind) (stmt)->m->bind_parameters((stmt), (bind)) #define mysqlnd_stmt_bind_one_param(stmt,n,z,t) (stmt)->m->bind_one_parameter((stmt), (n), (z), (t)) #define mysqlnd_stmt_refresh_bind_param(s) (s)->m->refresh_bind_param((s)) #define mysqlnd_stmt_alloc_result_bind(stmt) (stmt)->m->alloc_result_bind((stmt)) #define mysqlnd_stmt_free_result_bind(stmt,bind) (stmt)->m->free_result_bind((stmt), (bind)) #define mysqlnd_stmt_bind_result(stmt,bind) (stmt)->m->bind_result((stmt), (bind)) #define mysqlnd_stmt_bind_one_result(s,no) (s)->m->bind_one_result((s), (no)) #define mysqlnd_stmt_param_metadata(stmt) (stmt)->m->get_parameter_metadata((stmt)) #define mysqlnd_stmt_result_metadata(stmt) (stmt)->m->get_result_metadata((stmt)) #define mysqlnd_stmt_free_result(stmt) (stmt)->m->free_result((stmt)) #define mysqlnd_stmt_close(stmt, implicit) (stmt)->m->dtor((stmt), (implicit)) #define mysqlnd_stmt_reset(stmt) (stmt)->m->reset((stmt)) #define mysqlnd_stmt_flush(stmt) (stmt)->m->flush((stmt)) #define mysqlnd_stmt_attr_get(stmt, attr, value) (stmt)->m->get_attribute((stmt), (attr), (value)) #define mysqlnd_stmt_attr_set(stmt, attr, value) (stmt)->m->set_attribute((stmt), (attr), (value)) #define mysqlnd_stmt_fetch(stmt, fetched) (stmt)->m->fetch((stmt), (fetched)) /* Performance statistics */ PHPAPI extern MYSQLND_STATS * mysqlnd_global_stats; PHPAPI extern const MYSQLND_STRING mysqlnd_stats_values_names[]; PHPAPI void _mysqlnd_get_client_stats(MYSQLND_STATS * stats, zval *return_value ZEND_FILE_LINE_DC); #ifndef MYSQLND_CORE_STATISTICS_DISABLED #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) \ MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)) #define MYSQLND_DEC_GLOBAL_STATISTIC(statistic) \ MYSQLND_DEC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)) #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) \ MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)) #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) \ MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic)); \ MYSQLND_INC_STATISTIC(MYSQLND_G(collect_statistics), (conn_stats), (statistic)); #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) \ MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic), (value)); \ MYSQLND_INC_STATISTIC_W_VALUE(MYSQLND_G(collect_statistics), (conn_stats), (statistic), (value)); #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) \ MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2)); \ MYSQLND_INC_STATISTIC_W_VALUE2(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2)); #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) \ MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), mysqlnd_global_stats, (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); \ MYSQLND_INC_STATISTIC_W_VALUE3(MYSQLND_G(collect_statistics), (conn_stats), (statistic1), (value1), (statistic2), (value2), (statistic3), (value3)); #else #define MYSQLND_INC_GLOBAL_STATISTIC(statistic) #define MYSQLND_DEC_GLOBAL_STATISTIC(statistic) #define MYSQLND_INC_GLOBAL_STATISTIC_W_VALUE2(statistic1, value1, statistic2, value2) #define MYSQLND_INC_CONN_STATISTIC(conn_stats, statistic) #define MYSQLND_INC_CONN_STATISTIC_W_VALUE(conn_stats, statistic, value) #define MYSQLND_INC_CONN_STATISTIC_W_VALUE2(conn_stats, statistic1, value1, statistic2, value2) #define MYSQLND_INC_CONN_STATISTIC_W_VALUE3(conn_stats, statistic1, value1, statistic2, value2, statistic3, value3) #endif /* MYSQLND_CORE_STATISTICS_DISABLED */ /* double check the class name to avoid naming conflicts when using these: */ #define MYSQLND_METHOD(class, method) mysqlnd_##class##_##method##_pub #define MYSQLND_METHOD_PRIVATE(class, method) mysqlnd_##class##_##method##_priv ZEND_BEGIN_MODULE_GLOBALS(mysqlnd) char * debug; /* The actual string */ char * trace_alloc_settings; /* The actual string */ MYSQLND_DEBUG * dbg; /* The DBG object for standard tracing */ MYSQLND_DEBUG * trace_alloc; /* The DBG object for allocation tracing */ zend_long net_cmd_buffer_size; zend_long net_read_buffer_size; zend_long log_mask; zend_long net_read_timeout; zend_long mempool_default_size; zend_long debug_emalloc_fail_threshold; zend_long debug_ecalloc_fail_threshold; zend_long debug_erealloc_fail_threshold; zend_long debug_malloc_fail_threshold; zend_long debug_calloc_fail_threshold; zend_long debug_realloc_fail_threshold; char * sha256_server_public_key; zend_bool fetch_data_copy; zend_bool collect_statistics; zend_bool collect_memory_statistics; ZEND_END_MODULE_GLOBALS(mysqlnd) PHPAPI ZEND_EXTERN_MODULE_GLOBALS(mysqlnd) #define MYSQLND_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqlnd, v) #if defined(ZTS) && defined(COMPILE_DL_MYSQLND) ZEND_TSRMLS_CACHE_EXTERN() #endif PHPAPI void mysqlnd_minfo_print_hash(zval *values); #endif /* MYSQLND_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!J"q^^ext/mysqlnd/mysqlnd_alloc.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_ALLOC_H #define MYSQLND_ALLOC_H PHPAPI extern const char * mysqlnd_debug_std_no_trace_funcs[]; #define MYSQLND_MEM_D ZEND_FILE_LINE_DC #define MYSQLND_MEM_C ZEND_FILE_LINE_CC struct st_mysqlnd_allocator_methods { void * (*m_emalloc)(size_t size MYSQLND_MEM_D); void * (*m_pemalloc)(size_t size, zend_bool persistent MYSQLND_MEM_D); void * (*m_ecalloc)(unsigned int nmemb, size_t size MYSQLND_MEM_D); void * (*m_pecalloc)(unsigned int nmemb, size_t size, zend_bool persistent MYSQLND_MEM_D); void * (*m_erealloc)(void *ptr, size_t new_size MYSQLND_MEM_D); void * (*m_perealloc)(void *ptr, size_t new_size, zend_bool persistent MYSQLND_MEM_D); void (*m_efree)(void *ptr MYSQLND_MEM_D); void (*m_pefree)(void *ptr, zend_bool persistent MYSQLND_MEM_D); void * (*m_malloc)(size_t size MYSQLND_MEM_D); void * (*m_calloc)(unsigned int nmemb, size_t size MYSQLND_MEM_D); void * (*m_realloc)(void *ptr, size_t new_size MYSQLND_MEM_D); void (*m_free)(void *ptr MYSQLND_MEM_D); char * (*m_pememdup)(const char * const ptr, size_t size, zend_bool persistent MYSQLND_MEM_D); char * (*m_pestrndup)(const char * const ptr, size_t size, zend_bool persistent MYSQLND_MEM_D); char * (*m_pestrdup)(const char * const ptr, zend_bool persistent MYSQLND_MEM_D); int (*m_sprintf)(char **pbuf, size_t max_len, const char *format, ...); int (*m_vsprintf)(char **pbuf, size_t max_len, const char *format, va_list ap); void (*m_sprintf_free)(char * p); }; PHPAPI extern struct st_mysqlnd_allocator_methods mysqlnd_allocator; #define mnd_emalloc(size) mysqlnd_allocator.m_emalloc((size) MYSQLND_MEM_C) #define mnd_pemalloc(size, pers) mysqlnd_allocator.m_pemalloc((size), (pers) MYSQLND_MEM_C) #define mnd_ecalloc(nmemb, size) mysqlnd_allocator.m_ecalloc((nmemb), (size) MYSQLND_MEM_C) #define mnd_pecalloc(nmemb, size, p) mysqlnd_allocator.m_pecalloc((nmemb), (size), (p) MYSQLND_MEM_C) #define mnd_erealloc(ptr, new_size) mysqlnd_allocator.m_erealloc((ptr), (new_size) MYSQLND_MEM_C) #define mnd_perealloc(ptr, new_size, p) mysqlnd_allocator.m_perealloc((ptr), (new_size), (p) MYSQLND_MEM_C) #define mnd_efree(ptr) mysqlnd_allocator.m_efree((ptr) MYSQLND_MEM_C) #define mnd_pefree(ptr, pers) mysqlnd_allocator.m_pefree((ptr), (pers) MYSQLND_MEM_C) #define mnd_malloc(size) mysqlnd_allocator.m_malloc((size) MYSQLND_MEM_C) #define mnd_calloc(nmemb, size) mysqlnd_allocator.m_calloc((nmemb), (size) MYSQLND_MEM_C) #define mnd_realloc(ptr, new_size) mysqlnd_allocator.m_realloc((ptr), (new_size) MYSQLND_MEM_C) #define mnd_free(ptr) mysqlnd_allocator.m_free((ptr) MYSQLND_MEM_C) #define mnd_pememdup(ptr, size, pers) mysqlnd_allocator.m_pememdup((ptr), (size), (pers) MYSQLND_MEM_C) #define mnd_pestrndup(ptr, size, pers) mysqlnd_allocator.m_pestrndup((ptr), (size), (pers) MYSQLND_MEM_C) #define mnd_pestrdup(ptr, pers) mysqlnd_allocator.m_pestrdup((ptr), (pers) MYSQLND_MEM_C) #define mnd_sprintf(p, mx_len, fmt,...) mysqlnd_allocator.m_sprintf((p), (mx_len), (fmt), __VA_ARGS__) #define mnd_vsprintf(p, mx_len, fmt,ap) mysqlnd_allocator.m_vsprintf((p), (mx_len), (fmt), (ap)) #define mnd_sprintf_free(p) mysqlnd_allocator.m_sprintf_free((p)) static inline MYSQLND_STRING mnd_dup_cstring(const MYSQLND_CSTRING str, const zend_bool persistent) { const MYSQLND_STRING ret = {(char*) mnd_pemalloc(str.l + 1, persistent), str.l}; if (ret.s) { memcpy(ret.s, str.s, str.l); ret.s[str.l] = '\0'; } return ret; } static inline MYSQLND_CSTRING mnd_str2c(const MYSQLND_STRING str) { const MYSQLND_CSTRING ret = {str.s, str.l}; return ret; } #endif /* MYSQLND_ALLOC_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!-j j ext/mysqlnd/mysqlnd_charset.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | | Georg Richter | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_CHARSET_H #define MYSQLND_CHARSET_H PHPAPI zend_ulong mysqlnd_cset_escape_quotes(const MYSQLND_CHARSET * const charset, char *newstr, const char *escapestr, size_t escapestr_len); PHPAPI zend_ulong mysqlnd_cset_escape_slashes(const MYSQLND_CHARSET * const cset, char *newstr, const char *escapestr, size_t escapestr_len); struct st_mysqlnd_plugin_charsets { const struct st_mysqlnd_plugin_header plugin_header; struct { const MYSQLND_CHARSET * (*const find_charset_by_nr)(unsigned int charsetnr); const MYSQLND_CHARSET * (*const find_charset_by_name)(const char * const name); zend_ulong (*const escape_quotes)(const MYSQLND_CHARSET * const cset, char * newstr, const char * escapestr, size_t escapestr_len); zend_ulong (*const escape_slashes)(const MYSQLND_CHARSET * const cset, char * newstr, const char * escapestr, size_t escapestr_len); } methods; }; void mysqlnd_charsets_plugin_register(void); #endif /* MYSQLND_CHARSET_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!rext/mysqlnd/mysqlnd_vio.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_VIO_H #define MYSQLND_VIO_H PHPAPI MYSQLND_VIO * mysqlnd_vio_init(zend_bool persistent, MYSQLND_CLASS_METHODS_TYPE(mysqlnd_object_factory) *object_factory, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); PHPAPI void mysqlnd_vio_free(MYSQLND_VIO * const vio, MYSQLND_STATS * stats, MYSQLND_ERROR_INFO * error_info); #endif /* MYSQLND_VIO_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!eext/mysqlnd/mysqlnd_result.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_RESULT_H #define MYSQLND_RESULT_H PHPAPI MYSQLND_RES * mysqlnd_result_init(const unsigned int field_count); PHPAPI MYSQLND_RES_UNBUFFERED * mysqlnd_result_unbuffered_init(MYSQLND_RES * result, const unsigned int field_count, const zend_bool ps); PHPAPI MYSQLND_RES_BUFFERED_ZVAL * mysqlnd_result_buffered_zval_init(MYSQLND_RES * result, const unsigned int field_count, const zend_bool ps); PHPAPI MYSQLND_RES_BUFFERED_C * mysqlnd_result_buffered_c_init(MYSQLND_RES * result, const unsigned int field_count, const zend_bool ps); enum_func_status mysqlnd_query_read_result_set_header(MYSQLND_CONN_DATA * conn, MYSQLND_STMT * stmt); #endif /* MYSQLND_RESULT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!dvv#ext/mysqlnd/mysql_float_to_double.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Keyur Govande | +----------------------------------------------------------------------+ */ #ifndef MYSQL_FLOAT_TO_DOUBLE_H #define MYSQL_FLOAT_TO_DOUBLE_H #include "main/php.h" #include #include "main/snprintf.h" #define MAX_CHAR_BUF_LEN 255 #ifndef FLT_DIG # define FLT_DIG 6 #endif /* * Convert from a 4-byte float to a 8-byte decimal by first converting * the float to a string (ignoring localization), and then the string to a double. * The decimals argument specifies the precision of the output. If decimals * is less than zero, then a gcvt(3) like logic is used with the significant * digits set to FLT_DIG i.e. 6. */ static inline double mysql_float_to_double(float fp4, int decimals) { char num_buf[MAX_CHAR_BUF_LEN]; /* Over allocated */ if (decimals < 0) { php_gcvt(fp4, FLT_DIG, '.', 'e', num_buf); } else { snprintf(num_buf, MAX_CHAR_BUF_LEN, "%.*F", decimals, fp4); } return zend_strtod(num_buf, NULL); } /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ #endif /* MYSQL_FLOAT_TO_DOUBLE_H */ PK!S S S ext/mysqlnd/mysqlnd_enum_n_def.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | | Georg Richter | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_ENUM_N_DEF_H #define MYSQLND_ENUM_N_DEF_H #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #define MYSQLND_MIN_COMPRESS_LEN 0 #define MYSQLND_MAX_PACKET_SIZE (256L*256L*256L-1) #define MYSQLND_ASSEMBLED_PACKET_MAX_SIZE 3UL*1024UL*1024UL*1024UL #define MYSQLND_DEFAULT_AUTH_PROTOCOL "mysql_native_password" #define MYSQLND_ERRMSG_SIZE 512 #define MYSQLND_SQLSTATE_LENGTH 5 #define MYSQLND_SQLSTATE_NULL "00000" #define MYSQLND_MAX_ALLOWED_USER_LEN 252 /* 63 char * 4byte . MySQL supports now only 16 char, but let it be forward compatible */ #define MYSQLND_MAX_ALLOWED_DB_LEN 1024 /* 256 char * 4byte. MySQL supports now only 64 char in the tables, but on the FS could be different. Forward compatible. */ #define MYSQLND_NET_CMD_BUFFER_MIN_SIZE 4096 #define MYSQLND_NET_CMD_BUFFER_MIN_SIZE_STR "4096" #define MYSQLND_STMT_ID_LENGTH 4 #define SERVER_STATUS_IN_TRANS 1 /* Transaction has started */ #define SERVER_STATUS_AUTOCOMMIT 2 /* Server in auto_commit mode */ #define SERVER_MORE_RESULTS_EXISTS 8 /* Multi query - next query exists */ #define SERVER_QUERY_NO_GOOD_INDEX_USED 16 #define SERVER_QUERY_NO_INDEX_USED 32 /* The server was able to fulfill the clients request and opened a read-only non-scrollable cursor for a query. This flag comes in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. */ #define SERVER_STATUS_CURSOR_EXISTS 64 /* This flag is sent when a read-only cursor is exhausted, in reply to COM_STMT_FETCH command. */ #define SERVER_STATUS_LAST_ROW_SENT 128 #define SERVER_STATUS_DB_DROPPED 256 /* A database was dropped */ #define SERVER_STATUS_NO_BACKSLASH_ESCAPES 512 #define SERVER_QUERY_WAS_SLOW 2048 #define SERVER_PS_OUT_PARAMS 4096 #define MYSQLND_NO_DATA 100 #define MYSQLND_DATA_TRUNCATED 101 #define SHA1_MAX_LENGTH 20 #define SCRAMBLE_LENGTH 20 #define SCRAMBLE_LENGTH_323 8 #define CLIENT_LONG_PASSWORD 1 /* new more secure passwords */ #define CLIENT_FOUND_ROWS 2 /* Found instead of affected rows */ #define CLIENT_LONG_FLAG 4 /* Get all column flags */ #define CLIENT_CONNECT_WITH_DB 8 /* One can specify db on connect */ #define CLIENT_NO_SCHEMA 16 /* Don't allow database.table.column */ #define CLIENT_COMPRESS 32 /* Can use compression protocol */ #define CLIENT_ODBC 64 /* Odbc client */ #define CLIENT_LOCAL_FILES 128 /* Can use LOAD DATA LOCAL */ #define CLIENT_IGNORE_SPACE 256 /* Ignore spaces before '(' */ #define CLIENT_PROTOCOL_41 512 /* New 4.1 protocol */ #define CLIENT_INTERACTIVE 1024 /* This is an interactive client */ #define CLIENT_SSL 2048 /* Switch to SSL after handshake */ #define CLIENT_IGNORE_SIGPIPE 4096 /* IGNORE sigpipes */ #define CLIENT_TRANSACTIONS 8192 /* Client knows about transactions */ #define CLIENT_RESERVED 16384 /* Old flag for 4.1 protocol */ #define CLIENT_SECURE_CONNECTION 32768 /* New 4.1 authentication */ #define CLIENT_MULTI_STATEMENTS (1UL << 16) /* Enable/disable multi-stmt support */ #define CLIENT_MULTI_RESULTS (1UL << 17) /* Enable/disable multi-results */ #define CLIENT_PS_MULTI_RESULTS (1UL << 18) /* Multi-results in PS-protocol */ #define CLIENT_PLUGIN_AUTH (1UL << 19) /* Client supports plugin authentication */ #define CLIENT_CONNECT_ATTRS (1UL << 20) /* Client supports connection attributes */ #define CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA (1UL << 21) /* Enable authentication response packet to be larger than 255 bytes. */ #define CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS (1UL << 22) /* Don't close the connection for a connection with expired password. */ #define CLIENT_SESSION_TRACK (1UL << 23) /* Extended OK */ /* This is a mysqlnd extension. CLIENT_ODBC is not used anyway. We will reuse it for our case and translate it to not using SSL peer verification */ #define CLIENT_SSL_DONT_VERIFY_SERVER_CERT CLIENT_ODBC #define CLIENT_SSL_VERIFY_SERVER_CERT (1UL << 30) #define CLIENT_REMEMBER_OPTIONS (1UL << 31) #define MYSQLND_CAPABILITIES (CLIENT_LONG_PASSWORD | CLIENT_LONG_FLAG | CLIENT_TRANSACTIONS | \ CLIENT_PROTOCOL_41 | CLIENT_SECURE_CONNECTION | \ CLIENT_MULTI_RESULTS | CLIENT_LOCAL_FILES | CLIENT_PLUGIN_AUTH) #define MYSQLND_PROTOCOL_FLAG_USE_COMPRESSION 1 /* Client Error codes */ #define CR_UNKNOWN_ERROR 2000 #define CR_CONNECTION_ERROR 2002 #define CR_SERVER_GONE_ERROR 2006 #define CR_OUT_OF_MEMORY 2008 #define CR_SERVER_LOST 2013 #define CR_COMMANDS_OUT_OF_SYNC 2014 #define CR_CANT_FIND_CHARSET 2019 #define CR_MALFORMED_PACKET 2027 #define CR_NOT_IMPLEMENTED 2054 #define CR_NO_PREPARE_STMT 2030 #define CR_PARAMS_NOT_BOUND 2031 #define CR_INVALID_PARAMETER_NO 2034 #define CR_INVALID_BUFFER_USE 2035 #define MYSQLND_EE_FILENOTFOUND 7890 #define UNKNOWN_SQLSTATE "HY000" #define MAX_CHARSET_LEN 32 #define TRANS_START_NO_OPT 0 #define TRANS_START_WITH_CONSISTENT_SNAPSHOT 1 #define TRANS_START_READ_WRITE 2 #define TRANS_START_READ_ONLY 4 #define TRANS_COR_NO_OPT 0 #define TRANS_COR_AND_CHAIN 1 #define TRANS_COR_AND_NO_CHAIN 2 #define TRANS_COR_RELEASE 4 #define TRANS_COR_NO_RELEASE 8 typedef enum mysqlnd_extension { MYSQLND_MYSQL = 0, MYSQLND_MYSQLI } enum_mysqlnd_extension; enum { MYSQLND_FETCH_ASSOC = 1, MYSQLND_FETCH_NUM = 2, MYSQLND_FETCH_BOTH = 1|2 }; /* Follow libmysql convention */ typedef enum func_status { PASS = 0, FAIL = 1 } enum_func_status; typedef enum mysqlnd_query_type { QUERY_UPSERT, QUERY_SELECT, QUERY_LOAD_LOCAL } enum_mysqlnd_query_type; typedef enum mysqlnd_res_type { MYSQLND_RES_NORMAL = 1, MYSQLND_RES_PS_BUF, MYSQLND_RES_PS_UNBUF } enum_mysqlnd_res_type; typedef enum mysqlnd_send_query_type { MYSQLND_SEND_QUERY_IMPLICIT = 0, MYSQLND_SEND_QUERY_EXPLICIT } enum_mysqlnd_send_query_type; typedef enum mysqlnd_reap_result_type { MYSQLND_REAP_RESULT_IMPLICIT = 0, MYSQLND_REAP_RESULT_EXPLICIT } enum_mysqlnd_reap_result_type; typedef enum mysqlnd_send_execute_type { MYSQLND_SEND_EXECUTE_IMPLICIT = 0, MYSQLND_SEND_EXECUTE_EXPLICIT } enum_mysqlnd_send_execute_type; typedef enum mysqlnd_parse_exec_response_type { MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT = 0, MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT_NEXT_RESULT, MYSQLND_PARSE_EXEC_RESPONSE_IMPLICIT_OUT_VARIABLES, MYSQLND_PARSE_EXEC_RESPONSE_EXPLICIT, } enum_mysqlnd_parse_exec_response_type; typedef enum mysqlnd_client_option { MYSQL_OPT_CONNECT_TIMEOUT, MYSQL_OPT_COMPRESS, MYSQL_OPT_NAMED_PIPE, MYSQL_INIT_COMMAND, MYSQL_READ_DEFAULT_FILE, MYSQL_READ_DEFAULT_GROUP, MYSQL_SET_CHARSET_DIR, MYSQL_SET_CHARSET_NAME, MYSQL_OPT_LOCAL_INFILE, MYSQL_OPT_PROTOCOL, MYSQL_SHARED_MEMORY_BASE_NAME, MYSQL_OPT_READ_TIMEOUT, MYSQL_OPT_WRITE_TIMEOUT, MYSQL_OPT_USE_RESULT, MYSQL_OPT_USE_REMOTE_CONNECTION, MYSQL_OPT_USE_EMBEDDED_CONNECTION, MYSQL_OPT_GUESS_CONNECTION, MYSQL_SET_CLIENT_IP, MYSQL_SECURE_AUTH, MYSQL_REPORT_DATA_TRUNCATION, MYSQL_OPT_RECONNECT, MYSQL_OPT_SSL_VERIFY_SERVER_CERT, MYSQL_PLUGIN_DIR, MYSQL_DEFAULT_AUTH, MYSQL_OPT_BIND, MYSQL_OPT_SSL_KEY, MYSQL_OPT_SSL_CERT, MYSQL_OPT_SSL_CA, MYSQL_OPT_SSL_CAPATH, MYSQL_OPT_SSL_CIPHER, MYSQL_OPT_SSL_CRL, MYSQL_OPT_SSL_CRLPATH, MYSQL_OPT_CONNECT_ATTR_RESET, MYSQL_OPT_CONNECT_ATTR_ADD, MYSQL_OPT_CONNECT_ATTR_DELETE, MYSQL_SERVER_PUBLIC_KEY, MYSQL_ENABLE_CLEARTEXT_PLUGIN, MYSQL_OPT_CAN_HANDLE_EXPIRED_PASSWORDS, MYSQL_OPT_SSL_ENFORCE, MYSQL_OPT_MAX_ALLOWED_PACKET, MYSQL_OPT_NET_BUFFER_LENGTH, MYSQL_OPT_TLS_VERSION, MYSQL_OPT_SSL_MODE, MYSQLND_DEPRECATED_ENUM1 = 200, #ifdef MYSQLND_STRING_TO_INT_CONVERSION MYSQLND_OPT_INT_AND_FLOAT_NATIVE = 201, #endif MYSQLND_OPT_NET_CMD_BUFFER_SIZE = 202, MYSQLND_OPT_NET_READ_BUFFER_SIZE = 203, MYSQLND_OPT_SSL_KEY = 204, MYSQLND_OPT_SSL_CERT = 205, MYSQLND_OPT_SSL_CA = 206, MYSQLND_OPT_SSL_CAPATH = 207, MYSQLND_OPT_SSL_CIPHER = 208, MYSQLND_OPT_SSL_PASSPHRASE = 209, MYSQLND_OPT_MAX_ALLOWED_PACKET = 210, MYSQLND_OPT_AUTH_PROTOCOL = 211 } enum_mysqlnd_client_option; typedef enum mysqlnd_session_protocol_type { MYSQL_PROTOCOL_DEFAULT = 0, MYSQL_PROTOCOL_TCP, /* all, supported */ MYSQL_PROTOCOL_SOCKET, /* unix, supported */ MYSQL_PROTOCOL_PIPE, /* win32, not-supported */ MYSQL_PROTOCOL_MEMORY, /* win32, not-supported */ MYSQL_PROTOCOL_LAST } enum_mysqlnd_session_protocol_type; typedef enum mysqlnd_field_types { MYSQL_TYPE_DECIMAL = 0, MYSQL_TYPE_TINY = 1, MYSQL_TYPE_SHORT = 2, MYSQL_TYPE_LONG = 3, MYSQL_TYPE_FLOAT = 4, MYSQL_TYPE_DOUBLE = 5, MYSQL_TYPE_NULL = 6, MYSQL_TYPE_TIMESTAMP= 7, MYSQL_TYPE_LONGLONG = 8, MYSQL_TYPE_INT24 = 9, MYSQL_TYPE_DATE = 10, MYSQL_TYPE_TIME = 11, MYSQL_TYPE_DATETIME = 12, MYSQL_TYPE_YEAR = 13, MYSQL_TYPE_NEWDATE = 14, MYSQL_TYPE_VARCHAR = 15, MYSQL_TYPE_BIT = 16, MYSQL_TYPE_JSON=245, MYSQL_TYPE_NEWDECIMAL=246, MYSQL_TYPE_ENUM=247, MYSQL_TYPE_SET=248, MYSQL_TYPE_TINY_BLOB=249, MYSQL_TYPE_MEDIUM_BLOB=250, MYSQL_TYPE_LONG_BLOB=251, MYSQL_TYPE_BLOB=252, MYSQL_TYPE_VAR_STRING=253, MYSQL_TYPE_STRING=254, MYSQL_TYPE_GEOMETRY=255 } enum_mysqlnd_field_types; /* Please update this if there is a new type after MYSQL_TYPE_GEOMETRY */ #define MYSQL_TYPE_LAST MYSQL_TYPE_GEOMETRY typedef enum mysqlnd_server_option { MYSQL_OPTION_MULTI_STATEMENTS_ON, MYSQL_OPTION_MULTI_STATEMENTS_OFF } enum_mysqlnd_server_option; #define FIELD_TYPE_DECIMAL MYSQL_TYPE_DECIMAL #define FIELD_TYPE_NEWDECIMAL MYSQL_TYPE_NEWDECIMAL #define FIELD_TYPE_TINY MYSQL_TYPE_TINY #define FIELD_TYPE_SHORT MYSQL_TYPE_SHORT #define FIELD_TYPE_LONG MYSQL_TYPE_LONG #define FIELD_TYPE_FLOAT MYSQL_TYPE_FLOAT #define FIELD_TYPE_DOUBLE MYSQL_TYPE_DOUBLE #define FIELD_TYPE_NULL MYSQL_TYPE_NULL #define FIELD_TYPE_TIMESTAMP MYSQL_TYPE_TIMESTAMP #define FIELD_TYPE_LONGLONG MYSQL_TYPE_LONGLONG #define FIELD_TYPE_INT24 MYSQL_TYPE_INT24 #define FIELD_TYPE_DATE MYSQL_TYPE_DATE #define FIELD_TYPE_TIME MYSQL_TYPE_TIME #define FIELD_TYPE_DATETIME MYSQL_TYPE_DATETIME #define FIELD_TYPE_YEAR MYSQL_TYPE_YEAR #define FIELD_TYPE_NEWDATE MYSQL_TYPE_NEWDATE #define FIELD_TYPE_ENUM MYSQL_TYPE_ENUM #define FIELD_TYPE_SET MYSQL_TYPE_SET #define FIELD_TYPE_JSON MYSQL_TYPE_JSON #define FIELD_TYPE_TINY_BLOB MYSQL_TYPE_TINY_BLOB #define FIELD_TYPE_MEDIUM_BLOB MYSQL_TYPE_MEDIUM_BLOB #define FIELD_TYPE_LONG_BLOB MYSQL_TYPE_LONG_BLOB #define FIELD_TYPE_BLOB MYSQL_TYPE_BLOB #define FIELD_TYPE_VAR_STRING MYSQL_TYPE_VAR_STRING #define FIELD_TYPE_STRING MYSQL_TYPE_STRING #define FIELD_TYPE_CHAR MYSQL_TYPE_TINY #define FIELD_TYPE_INTERVAL MYSQL_TYPE_ENUM #define FIELD_TYPE_GEOMETRY MYSQL_TYPE_GEOMETRY #define FIELD_TYPE_BIT MYSQL_TYPE_BIT #define NOT_NULL_FLAG 1 #define PRI_KEY_FLAG 2 #define UNIQUE_KEY_FLAG 4 #define MULTIPLE_KEY_FLAG 8 #define BLOB_FLAG 16 #define UNSIGNED_FLAG 32 #define ZEROFILL_FLAG 64 #define BINARY_FLAG 128 #define ENUM_FLAG 256 #define AUTO_INCREMENT_FLAG 512 #define TIMESTAMP_FLAG 1024 #define SET_FLAG 2048 #define NO_DEFAULT_VALUE_FLAG 4096 #define ON_UPDATE_NOW_FLAG 8192 #define PART_KEY_FLAG 16384 #define GROUP_FLAG 32768 #define NUM_FLAG 32768 #define IS_PRI_KEY(n) ((n) & PRI_KEY_FLAG) #define IS_NOT_NULL(n) ((n) & NOT_NULL_FLAG) #define IS_BLOB(n) ((n) & BLOB_FLAG) #define IS_NUM(t) ((t) <= FIELD_TYPE_INT24 || (t) == FIELD_TYPE_YEAR || (t) == FIELD_TYPE_NEWDECIMAL) /* see mysqlnd_charset.c for more information */ #define MYSQLND_BINARY_CHARSET_NR 63 /* /-----> CONN_CLOSE <---------------\ | ^ \ | | \ CONN_READY -> CONN_QUERY_SENT -> CONN_FETCHING_DATA ^ | \-------------------------------------/ */ typedef enum mysqlnd_connection_state { CONN_ALLOCED = 0, CONN_READY = 1, CONN_QUERY_SENT = 2, CONN_SENDING_LOAD_DATA = 3, CONN_FETCHING_DATA = 4, CONN_NEXT_RESULT_PENDING = 5, CONN_QUIT_SENT = 6 /* object is "destroyed" at this stage */ } enum_mysqlnd_connection_state; typedef enum mysqlnd_stmt_state { MYSQLND_STMT_INITTED = 0, MYSQLND_STMT_PREPARED = 1, MYSQLND_STMT_EXECUTED = 2, MYSQLND_STMT_WAITING_USE_OR_STORE = 3, MYSQLND_STMT_USE_OR_STORE_CALLED = 4, MYSQLND_STMT_USER_FETCHING = 5/* fetch_row_buff or fetch_row_unbuf */ } enum_mysqlnd_stmt_state; typedef enum param_bind_flags { MYSQLND_PARAM_BIND_BLOB_USED = 1 } enum_param_bind_flags; /* PS */ enum mysqlnd_stmt_attr { STMT_ATTR_UPDATE_MAX_LENGTH, STMT_ATTR_CURSOR_TYPE, STMT_ATTR_PREFETCH_ROWS }; enum myslqnd_cursor_type { CURSOR_TYPE_NO_CURSOR= 0, CURSOR_TYPE_READ_ONLY= 1, CURSOR_TYPE_FOR_UPDATE= 2, CURSOR_TYPE_SCROLLABLE= 4 }; typedef enum mysqlnd_connection_close_type { MYSQLND_CLOSE_EXPLICIT = 0, MYSQLND_CLOSE_IMPLICIT, MYSQLND_CLOSE_DISCONNECTED, MYSQLND_CLOSE_LAST /* for checking, should always be last */ } enum_connection_close_type; typedef enum mysqlnd_collected_stats { STAT_BYTES_SENT, STAT_BYTES_RECEIVED, STAT_PACKETS_SENT, STAT_PACKETS_RECEIVED, STAT_PROTOCOL_OVERHEAD_IN, STAT_PROTOCOL_OVERHEAD_OUT, STAT_BYTES_RECEIVED_OK, STAT_BYTES_RECEIVED_EOF, STAT_BYTES_RECEIVED_RSET_HEADER, STAT_BYTES_RECEIVED_RSET_FIELD_META, STAT_BYTES_RECEIVED_RSET_ROW, STAT_BYTES_RECEIVED_PREPARE_RESPONSE, STAT_BYTES_RECEIVED_CHANGE_USER, STAT_PACKETS_SENT_CMD, STAT_PACKETS_RECEIVED_OK, STAT_PACKETS_RECEIVED_EOF, STAT_PACKETS_RECEIVED_RSET_HEADER, STAT_PACKETS_RECEIVED_RSET_FIELD_META, STAT_PACKETS_RECEIVED_RSET_ROW, STAT_PACKETS_RECEIVED_PREPARE_RESPONSE, STAT_PACKETS_RECEIVED_CHANGE_USER, STAT_RSET_QUERY, STAT_NON_RSET_QUERY, STAT_NO_INDEX_USED, STAT_BAD_INDEX_USED, STAT_QUERY_WAS_SLOW, STAT_BUFFERED_SETS, STAT_UNBUFFERED_SETS, STAT_PS_BUFFERED_SETS, STAT_PS_UNBUFFERED_SETS, STAT_FLUSHED_NORMAL_SETS, STAT_FLUSHED_PS_SETS, STAT_PS_PREPARED_NEVER_EXECUTED, STAT_PS_PREPARED_ONCE_USED, STAT_ROWS_FETCHED_FROM_SERVER_NORMAL, STAT_ROWS_FETCHED_FROM_SERVER_PS, STAT_ROWS_BUFFERED_FROM_CLIENT_NORMAL, STAT_ROWS_BUFFERED_FROM_CLIENT_PS, STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_BUF, STAT_ROWS_FETCHED_FROM_CLIENT_NORMAL_UNBUF, STAT_ROWS_FETCHED_FROM_CLIENT_PS_BUF, STAT_ROWS_FETCHED_FROM_CLIENT_PS_UNBUF, STAT_ROWS_FETCHED_FROM_CLIENT_PS_CURSOR, STAT_ROWS_AFFECTED_NORMAL, STAT_ROWS_AFFECTED_PS, STAT_ROWS_SKIPPED_NORMAL, STAT_ROWS_SKIPPED_PS, STAT_COPY_ON_WRITE_SAVED, STAT_COPY_ON_WRITE_PERFORMED, STAT_CMD_BUFFER_TOO_SMALL, STAT_CONNECT_SUCCESS, STAT_CONNECT_FAILURE, STAT_CONNECT_REUSED, STAT_RECONNECT, STAT_PCONNECT_SUCCESS, STAT_OPENED_CONNECTIONS, STAT_OPENED_PERSISTENT_CONNECTIONS, STAT_CLOSE_EXPLICIT, STAT_CLOSE_IMPLICIT, STAT_CLOSE_DISCONNECT, STAT_CLOSE_IN_MIDDLE, STAT_FREE_RESULT_EXPLICIT, STAT_FREE_RESULT_IMPLICIT, STAT_STMT_CLOSE_EXPLICIT, STAT_STMT_CLOSE_IMPLICIT, STAT_MEM_EMALLOC_COUNT, STAT_MEM_EMALLOC_AMOUNT, STAT_MEM_ECALLOC_COUNT, STAT_MEM_ECALLOC_AMOUNT, STAT_MEM_EREALLOC_COUNT, STAT_MEM_EREALLOC_AMOUNT, STAT_MEM_EFREE_COUNT, STAT_MEM_EFREE_AMOUNT, STAT_MEM_MALLOC_COUNT, STAT_MEM_MALLOC_AMOUNT, STAT_MEM_CALLOC_COUNT, STAT_MEM_CALLOC_AMOUNT, STAT_MEM_REALLOC_COUNT, STAT_MEM_REALLOC_AMOUNT, STAT_MEM_FREE_COUNT, STAT_MEM_FREE_AMOUNT, STAT_MEM_ESTRNDUP_COUNT, STAT_MEM_STRNDUP_COUNT, STAT_MEM_ESTRDUP_COUNT, STAT_MEM_STRDUP_COUNT, STAT_MEM_EDUP_COUNT, STAT_MEM_DUP_COUNT, STAT_TEXT_TYPE_FETCHED_NULL, STAT_TEXT_TYPE_FETCHED_BIT, STAT_TEXT_TYPE_FETCHED_INT8, STAT_TEXT_TYPE_FETCHED_INT16, STAT_TEXT_TYPE_FETCHED_INT24, STAT_TEXT_TYPE_FETCHED_INT32, STAT_TEXT_TYPE_FETCHED_INT64, STAT_TEXT_TYPE_FETCHED_DECIMAL, STAT_TEXT_TYPE_FETCHED_FLOAT, STAT_TEXT_TYPE_FETCHED_DOUBLE, STAT_TEXT_TYPE_FETCHED_DATE, STAT_TEXT_TYPE_FETCHED_YEAR, STAT_TEXT_TYPE_FETCHED_TIME, STAT_TEXT_TYPE_FETCHED_DATETIME, STAT_TEXT_TYPE_FETCHED_TIMESTAMP, STAT_TEXT_TYPE_FETCHED_STRING, STAT_TEXT_TYPE_FETCHED_JSON, STAT_TEXT_TYPE_FETCHED_BLOB, STAT_TEXT_TYPE_FETCHED_ENUM, STAT_TEXT_TYPE_FETCHED_SET, STAT_TEXT_TYPE_FETCHED_GEOMETRY, STAT_TEXT_TYPE_FETCHED_OTHER, STAT_BINARY_TYPE_FETCHED_NULL, STAT_BINARY_TYPE_FETCHED_BIT, STAT_BINARY_TYPE_FETCHED_INT8, STAT_BINARY_TYPE_FETCHED_INT16, STAT_BINARY_TYPE_FETCHED_INT24, STAT_BINARY_TYPE_FETCHED_INT32, STAT_BINARY_TYPE_FETCHED_INT64, STAT_BINARY_TYPE_FETCHED_DECIMAL, STAT_BINARY_TYPE_FETCHED_FLOAT, STAT_BINARY_TYPE_FETCHED_DOUBLE, STAT_BINARY_TYPE_FETCHED_DATE, STAT_BINARY_TYPE_FETCHED_YEAR, STAT_BINARY_TYPE_FETCHED_TIME, STAT_BINARY_TYPE_FETCHED_DATETIME, STAT_BINARY_TYPE_FETCHED_TIMESTAMP, STAT_BINARY_TYPE_FETCHED_STRING, STAT_BINARY_TYPE_FETCHED_BLOB, STAT_BINARY_TYPE_FETCHED_ENUM, STAT_BINARY_TYPE_FETCHED_SET, STAT_BINARY_TYPE_FETCHED_GEOMETRY, STAT_BINARY_TYPE_FETCHED_OTHER, STAT_INIT_COMMAND_EXECUTED_COUNT, STAT_INIT_COMMAND_FAILED_COUNT, STAT_COM_QUIT, STAT_COM_INIT_DB, STAT_COM_QUERY, STAT_COM_FIELD_LIST, STAT_COM_CREATE_DB, STAT_COM_DROP_DB, STAT_COM_REFRESH, STAT_COM_SHUTDOWN, STAT_COM_STATISTICS, STAT_COM_PROCESS_INFO, STAT_COM_CONNECT, STAT_COM_PROCESS_KILL, STAT_COM_DEBUG, STAT_COM_PING, STAT_COM_TIME, STAT_COM_DELAYED_INSERT, STAT_COM_CHANGE_USER, STAT_COM_BINLOG_DUMP, STAT_COM_TABLE_DUMP, STAT_COM_CONNECT_OUT, STAT_COM_REGISTER_SLAVE, STAT_COM_STMT_PREPARE, STAT_COM_STMT_EXECUTE, STAT_COM_STMT_SEND_LONG_DATA, STAT_COM_STMT_CLOSE, STAT_COM_STMT_RESET, STAT_COM_SET_OPTION, STAT_COM_STMT_FETCH, STAT_COM_DAEMON, STAT_BYTES_RECEIVED_PURE_DATA_TEXT, STAT_BYTES_RECEIVED_PURE_DATA_PS, STAT_LAST /* Should be always the last */ } enum_mysqlnd_collected_stats; /* Enums */ enum mysqlnd_packet_type { PROT_GREET_PACKET= 0, PROT_AUTH_PACKET, PROT_AUTH_RESP_PACKET, PROT_CHANGE_AUTH_RESP_PACKET, PROT_OK_PACKET, PROT_EOF_PACKET, PROT_CMD_PACKET, PROT_RSET_HEADER_PACKET, PROT_RSET_FLD_PACKET, PROT_ROW_PACKET, PROT_STATS_PACKET, PROT_PREPARE_RESP_PACKET, PROT_CHG_USER_RESP_PACKET, PROT_SHA256_PK_REQUEST_PACKET, PROT_SHA256_PK_REQUEST_RESPONSE_PACKET, PROT_LAST /* should always be last */ }; /* After adding new elements please update `mysqlnd_command_to_text` in mysqlnd_wireprotocol.c */ enum php_mysqlnd_server_command { COM_SLEEP = 0, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, COM_TIME = 15, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, COM_TABLE_DUMP, COM_CONNECT_OUT = 20, COM_REGISTER_SLAVE, COM_STMT_PREPARE = 22, COM_STMT_EXECUTE = 23, COM_STMT_SEND_LONG_DATA = 24, COM_STMT_CLOSE = 25, COM_STMT_RESET = 26, COM_SET_OPTION = 27, COM_STMT_FETCH = 28, COM_DAEMON = 29, COM_BINLOG_DUMP_GTID = 30, COM_RESET_CONNECTION = 31, COM_STMT_EXECUTE_BATCH = 32, COM_END, /* Here follow own, non-protocol, commands */ COM_REAP_RESULT=240, /* own command */ COM_ENABLE_SSL, /* own command */ COM_HANDSHAKE, /* own command */ }; #define MYSQLND_DEFAULT_PREFETCH_ROWS (zend_ulong) 1 #define MYSQLND_REFRESH_GRANT 1 /* Refresh grant tables */ #define MYSQLND_REFRESH_LOG 2 /* Start on new log file */ #define MYSQLND_REFRESH_TABLES 4 /* close all tables */ #define MYSQLND_REFRESH_HOSTS 8 /* Flush host cache */ #define MYSQLND_REFRESH_STATUS 16 /* Flush status variables */ #define MYSQLND_REFRESH_THREADS 32 /* Flush thread cache */ #define MYSQLND_REFRESH_SLAVE 64 /* Reset master info and restart slave */ #define MYSQLND_REFRESH_MASTER 128 /* Remove all bin logs in the index */ #define MYSQLND_REFRESH_BACKUP_LOG 0x200000L #define MYSQLND_STORE_PS 1 #define MYSQLND_STORE_NO_COPY 2 #define MYSQLND_STORE_COPY 4 enum mysqlnd_buffered_type { MYSQLND_BUFFERED_TYPE_ZVAL = 1, MYSQLND_BUFFERED_TYPE_C }; #define MYSQLND_CLIENT_NO_FLAG 0 #define MYSQLND_CLIENT_KNOWS_RSET_COPY_DATA 1 #endif /* MYSQLND_ENUM_N_DEF_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!Az ext/mysqlnd/mysqlnd_statistics.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_STATISTICS_H #define MYSQLND_STATISTICS_H #ifdef ZTS #define MYSQLND_STATS_LOCK(stats) tsrm_mutex_lock((stats)->LOCK_access) #define MYSQLND_STATS_UNLOCK(stats) tsrm_mutex_unlock((stats)->LOCK_access) #else #define MYSQLND_STATS_LOCK(stats) #define MYSQLND_STATS_UNLOCK(stats) #endif #ifndef MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) \ if ((s_array)->triggers[(statistic)] && (s_array)->in_trigger == FALSE) { \ (s_array)->in_trigger = TRUE; \ MYSQLND_STATS_UNLOCK((s_array)); \ \ (s_array)->triggers[(statistic)]((s_array), (statistic), (val)); \ \ MYSQLND_STATS_LOCK((s_array)); \ (s_array)->in_trigger = FALSE; \ } #else #define MYSQLND_STAT_CALL_TRIGGER(s_array, statistic, val) #endif /* MYSQLND_CORE_STATISTICS_TRIGGERS_DISABLED */ #define MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(stats, statistic, value) \ { \ MYSQLND_STATS_LOCK(stats); \ (stats)->values[(statistic)] += (value); \ MYSQLND_STAT_CALL_TRIGGER((stats), (statistic), (value)); \ MYSQLND_STATS_UNLOCK(_p_s); \ } #define MYSQLND_DEC_STATISTIC(enabler, stats, statistic) \ { \ enum_mysqlnd_collected_stats _s = (statistic);\ MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ if ((enabler) && _p_s && _s != _p_s->count) { \ MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, -1); \ }\ } #define MYSQLND_INC_STATISTIC(enabler, stats, statistic) \ { \ enum_mysqlnd_collected_stats _s = (statistic);\ MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ if ((enabler) && _p_s && _s != _p_s->count) { \ MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, 1); \ }\ } #define MYSQLND_INC_STATISTIC_W_VALUE(enabler, stats, statistic, value) \ { \ enum_mysqlnd_collected_stats _s = (statistic);\ MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ if ((enabler) && _p_s && _s != _p_s->count) { \ uint64_t v = (uint64_t) (value); \ MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s, v); \ }\ } #define MYSQLND_INC_STATISTIC_W_VALUE2(enabler, stats, statistic1, value1, statistic2, value2) \ { \ MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ if ((enabler) && _p_s) { \ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ enum_mysqlnd_collected_stats _s1 = (statistic1);\ enum_mysqlnd_collected_stats _s2 = (statistic2);\ if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \ if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \ }\ } #define MYSQLND_INC_STATISTIC_W_VALUE3(enabler, stats, statistic1, value1, statistic2, value2, statistic3, value3) \ { \ MYSQLND_STATS * _p_s = (MYSQLND_STATS *) (stats); \ if ((enabler) && _p_s) { \ uint64_t v1 = (uint64_t) (value1); \ uint64_t v2 = (uint64_t) (value2); \ uint64_t v3 = (uint64_t) (value3); \ enum_mysqlnd_collected_stats _s1 = (statistic1);\ enum_mysqlnd_collected_stats _s2 = (statistic2);\ enum_mysqlnd_collected_stats _s3 = (statistic3);\ if (_s1 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s1, v1); \ if (_s2 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s2, v2); \ if (_s3 != _p_s->count) MYSQLND_UPDATE_VALUE_AND_CALL_TRIGGER(_p_s, _s3, v3); \ }\ } PHPAPI void mysqlnd_stats_init(MYSQLND_STATS ** stats, const size_t statistic_count, const zend_bool persistent); PHPAPI void mysqlnd_stats_end(MYSQLND_STATS * stats, const zend_bool persistent); PHPAPI void mysqlnd_fill_stats_hash(const MYSQLND_STATS * const stats, const MYSQLND_STRING * names, zval *return_value ZEND_FILE_LINE_DC); PHPAPI mysqlnd_stat_trigger mysqlnd_stats_set_trigger(MYSQLND_STATS * const stats, enum_mysqlnd_collected_stats stat, mysqlnd_stat_trigger trigger); PHPAPI mysqlnd_stat_trigger mysqlnd_stats_reset_triggers(MYSQLND_STATS * const stats); #endif /* MYSQLND_STATISTICS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!nˀ ext/mysqlnd/mysqlnd_ps.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_PS_H #define MYSQLND_PS_H /* PS stuff */ typedef void (*ps_field_fetch_func)(zval * zv, const MYSQLND_FIELD * const field, const unsigned int pack_len, const zend_uchar ** row); struct st_mysqlnd_perm_bind { ps_field_fetch_func func; /* should be signed int */ int pack_len; unsigned int php_type; zend_bool is_possibly_blob; zend_bool can_ret_as_str_in_uni; }; extern struct st_mysqlnd_perm_bind mysqlnd_ps_fetch_functions[MYSQL_TYPE_LAST + 1]; enum_func_status mysqlnd_stmt_fetch_row_buffered(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything); enum_func_status mysqlnd_fetch_stmt_row_cursor(MYSQLND_RES * result, void * param, const unsigned int flags, zend_bool * fetched_anything); void _mysqlnd_init_ps_subsystem();/* This one is private, mysqlnd_library_init() will call it */ void _mysqlnd_init_ps_fetch_subsystem(); void ps_fetch_from_1_to_8_bytes(zval * zv, const MYSQLND_FIELD * const field, const unsigned int pack_len, const zend_uchar ** row, unsigned int byte_count); #endif /* MYSQLND_PS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!$q 2 2 ext/mysqlnd/mysqlnd_connection.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_CONNECTION_H #define MYSQLND_CONNECTION_H PHPAPI extern const char * const mysqlnd_out_of_sync; PHPAPI extern const char * const mysqlnd_server_gone; PHPAPI extern const char * const mysqlnd_out_of_memory; void mysqlnd_upsert_status_init(MYSQLND_UPSERT_STATUS * const upsert_status); #define UPSERT_STATUS_RESET(status) (status)->m->reset((status)) #define UPSERT_STATUS_GET_SERVER_STATUS(status) (status)->server_status #define UPSERT_STATUS_SET_SERVER_STATUS(status, server_st) (status)->server_status = (server_st) #define UPSERT_STATUS_GET_WARNINGS(status) (status)->warning_count #define UPSERT_STATUS_SET_WARNINGS(status, warnings) (status)->warning_count = (warnings) #define UPSERT_STATUS_GET_AFFECTED_ROWS(status) (status)->affected_rows #define UPSERT_STATUS_SET_AFFECTED_ROWS(status, rows) (status)->affected_rows = (rows) #define UPSERT_STATUS_SET_AFFECTED_ROWS_TO_ERROR(status) (status)->m->set_affected_rows_to_error((status)) #define UPSERT_STATUS_GET_LAST_INSERT_ID(status) (status)->last_insert_id #define UPSERT_STATUS_SET_LAST_INSERT_ID(status, id) (status)->last_insert_id = (id) /* Error handling */ #define SET_NEW_MESSAGE(buf, buf_len, message, len) \ {\ if ((buf)) { \ mnd_efree((buf)); \ } \ if ((message)) { \ (buf) = mnd_pestrndup((message), (len), 0); \ } else { \ (buf) = NULL; \ } \ (buf_len) = (len); \ } #define SET_EMPTY_MESSAGE(buf, buf_len) \ {\ if ((buf)) { \ mnd_efree((buf)); \ (buf) = NULL; \ } \ (buf_len) = 0; \ } PHPAPI enum_func_status mysqlnd_error_info_init(MYSQLND_ERROR_INFO * const info, const zend_bool persistent); PHPAPI void mysqlnd_error_info_free_contents(MYSQLND_ERROR_INFO * const info); #define GET_CONNECTION_STATE(state_struct) (state_struct)->m->get((state_struct)) #define SET_CONNECTION_STATE(state_struct, s) (state_struct)->m->set((state_struct), (s)) PHPAPI void mysqlnd_connection_state_init(struct st_mysqlnd_connection_state * const state); #endif /* MYSQLND_CONNECTION_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!Ykw<&<&"ext/mysqlnd/mysqlnd_wireprotocol.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLND_WIREPROTOCOL_H #define MYSQLND_WIREPROTOCOL_H #define MYSQLND_HEADER_SIZE 4 #define COMPRESSED_HEADER_SIZE 3 #define MYSQLND_NULL_LENGTH (zend_ulong) ~0 /* Used in mysqlnd_debug.c */ PHPAPI extern const char mysqlnd_read_header_name[]; PHPAPI extern const char mysqlnd_read_body_name[]; /* Packet handling */ #define PACKET_WRITE(conn, packet) ((packet)->header.m->write_to_net((conn), (packet))) #define PACKET_READ(conn, packet) ((packet)->header.m->read_from_net((conn), (packet))) #define PACKET_FREE(packet) \ do { \ DBG_INF_FMT("PACKET_FREE(%p)", packet); \ if ((packet)->header.m->free_mem) { \ ((packet)->header.m->free_mem((packet))); \ } \ } while (0); PHPAPI extern const char * const mysqlnd_command_to_text[COM_END]; /* Low-level extraction functionality */ typedef struct st_mysqlnd_packet_methods { enum_func_status (*read_from_net)(MYSQLND_CONN_DATA * conn, void * packet); size_t (*write_to_net)(MYSQLND_CONN_DATA * conn, void * packet); void (*free_mem)(void *packet); } mysqlnd_packet_methods; typedef struct st_mysqlnd_packet_header { size_t size; zend_uchar packet_no; mysqlnd_packet_methods *m; } MYSQLND_PACKET_HEADER; /* Server greets the client */ typedef struct st_mysqlnd_packet_greet { MYSQLND_PACKET_HEADER header; uint8_t protocol_version; char *server_version; uint32_t thread_id; char intern_auth_plugin_data[SCRAMBLE_LENGTH]; MYSQLND_STRING authentication_plugin_data; /* 1 byte pad */ uint32_t server_capabilities; uint8_t charset_no; uint16_t server_status; /* 13 byte pad, in 5.5 first 2 bytes are more capabilities followed by 1 byte scramble_length */ zend_bool pre41; /* If error packet, we use these */ char error[MYSQLND_ERRMSG_SIZE+1]; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; char *auth_protocol; } MYSQLND_PACKET_GREET; /* Client authenticates */ typedef struct st_mysqlnd_packet_auth { MYSQLND_PACKET_HEADER header; const char *user; const zend_uchar *auth_data; size_t auth_data_len; const char *db; const char *auth_plugin_name; uint32_t client_flags; uint32_t max_packet_size; uint8_t charset_no; /* Here the packet ends. This is user supplied data */ zend_bool send_auth_data; zend_bool is_change_user_packet; zend_bool silent; HashTable *connect_attr; size_t db_len; } MYSQLND_PACKET_AUTH; /* Auth response packet */ typedef struct st_mysqlnd_packet_auth_response { MYSQLND_PACKET_HEADER header; uint8_t response_code; uint64_t affected_rows; uint64_t last_insert_id; uint16_t server_status; uint16_t warning_count; char *message; size_t message_len; /* If error packet, we use these */ char error[MYSQLND_ERRMSG_SIZE+1]; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; char *new_auth_protocol; size_t new_auth_protocol_len; zend_uchar *new_auth_protocol_data; size_t new_auth_protocol_data_len; } MYSQLND_PACKET_AUTH_RESPONSE; /* Auth response packet */ typedef struct st_mysqlnd_packet_change_auth_response { MYSQLND_PACKET_HEADER header; const zend_uchar *auth_data; size_t auth_data_len; } MYSQLND_PACKET_CHANGE_AUTH_RESPONSE; /* OK packet */ typedef struct st_mysqlnd_packet_ok { MYSQLND_PACKET_HEADER header; uint8_t field_count; /* always 0x0 */ uint64_t affected_rows; uint64_t last_insert_id; uint16_t server_status; uint16_t warning_count; char *message; size_t message_len; /* If error packet, we use these */ char error[MYSQLND_ERRMSG_SIZE+1]; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; } MYSQLND_PACKET_OK; /* Command packet */ typedef struct st_mysqlnd_packet_command { MYSQLND_PACKET_HEADER header; enum php_mysqlnd_server_command command; MYSQLND_CSTRING argument; } MYSQLND_PACKET_COMMAND; /* EOF packet */ typedef struct st_mysqlnd_packet_eof { MYSQLND_PACKET_HEADER header; uint8_t field_count; /* 0xFE */ uint16_t warning_count; uint16_t server_status; /* If error packet, we use these */ char error[MYSQLND_ERRMSG_SIZE+1]; char sqlstate[MYSQLND_SQLSTATE_LENGTH + 1]; unsigned int error_no; } MYSQLND_PACKET_EOF; /* EOF packet */ /* Result Set header*/ typedef struct st_mysqlnd_packet_rset_header { MYSQLND_PACKET_HEADER header; /* 0x00 => ok ~0 => LOAD DATA LOCAL error_no != 0 => error others => result set -> Read res_field packets up to field_count */ zend_ulong field_count; /* These are filled if no SELECT query. For SELECT warning_count and server status are in the last row packet, the EOF packet. */ uint16_t warning_count; uint16_t server_status; uint64_t affected_rows; uint64_t last_insert_id; /* This is for both LOAD DATA or info, when no result set */ MYSQLND_STRING info_or_local_file; /* If error packet, we use these */ MYSQLND_ERROR_INFO error_info; } MYSQLND_PACKET_RSET_HEADER; /* Result set field packet */ typedef struct st_mysqlnd_packet_res_field { MYSQLND_PACKET_HEADER header; MYSQLND_MEMORY_POOL *memory_pool; MYSQLND_FIELD *metadata; /* For table definitions, empty for result sets */ zend_bool skip_parsing; MYSQLND_ERROR_INFO error_info; } MYSQLND_PACKET_RES_FIELD; /* Row packet */ typedef struct st_mysqlnd_packet_row { MYSQLND_PACKET_HEADER header; zval *fields; uint32_t field_count; zend_bool eof; /* These are, of course, only for SELECT in the EOF packet, which is detected by this packet */ uint16_t warning_count; uint16_t server_status; MYSQLND_ROW_BUFFER row_buffer; MYSQLND_MEMORY_POOL * result_set_memory_pool; zend_bool skip_extraction; zend_bool binary_protocol; MYSQLND_FIELD *fields_metadata; /* If error packet, we use these */ MYSQLND_ERROR_INFO error_info; } MYSQLND_PACKET_ROW; /* Statistics packet */ typedef struct st_mysqlnd_packet_stats { MYSQLND_PACKET_HEADER header; MYSQLND_STRING message; } MYSQLND_PACKET_STATS; /* COM_PREPARE response packet */ typedef struct st_mysqlnd_packet_prepare_response { MYSQLND_PACKET_HEADER header; /* also known as field_count 0x00=OK , 0xFF=error */ unsigned char error_code; zend_ulong stmt_id; unsigned int field_count; unsigned int param_count; unsigned int warning_count; /* present in case of error */ MYSQLND_ERROR_INFO error_info; } MYSQLND_PACKET_PREPARE_RESPONSE; /* Statistics packet */ typedef struct st_mysqlnd_packet_chg_user_resp { MYSQLND_PACKET_HEADER header; uint32_t response_code; /* message_len is not part of the packet*/ uint16_t server_capabilities; /* If error packet, we use these */ MYSQLND_ERROR_INFO error_info; zend_bool server_asked_323_auth; char *new_auth_protocol; size_t new_auth_protocol_len; zend_uchar *new_auth_protocol_data; size_t new_auth_protocol_data_len; } MYSQLND_PACKET_CHG_USER_RESPONSE; /* Command packet */ typedef struct st_mysqlnd_packet_sha256_pk_request { MYSQLND_PACKET_HEADER header; } MYSQLND_PACKET_SHA256_PK_REQUEST; typedef struct st_mysqlnd_packet_sha256_pk_request_response { MYSQLND_PACKET_HEADER header; zend_uchar *public_key; size_t public_key_len; } MYSQLND_PACKET_SHA256_PK_REQUEST_RESPONSE; zend_ulong php_mysqlnd_net_field_length(const zend_uchar **packet); zend_uchar * php_mysqlnd_net_store_length(zend_uchar *packet, const uint64_t length); size_t php_mysqlnd_net_store_length_size(uint64_t length); PHPAPI extern const char * const mysqlnd_empty_string; enum_func_status php_mysqlnd_rowp_read_binary_protocol(MYSQLND_ROW_BUFFER * row_buffer, zval * fields, unsigned int field_count, const MYSQLND_FIELD * fields_metadata, zend_bool as_int_or_float, MYSQLND_STATS * stats); enum_func_status php_mysqlnd_rowp_read_text_protocol_zval(MYSQLND_ROW_BUFFER * row_buffer, zval * fields, unsigned int field_count, const MYSQLND_FIELD * fields_metadata, zend_bool as_int_or_float, MYSQLND_STATS * stats); enum_func_status php_mysqlnd_rowp_read_text_protocol_c(MYSQLND_ROW_BUFFER * row_buffer, zval * fields, unsigned int field_count, const MYSQLND_FIELD * fields_metadata, zend_bool as_int_or_float, MYSQLND_STATS * stats); PHPAPI MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * mysqlnd_protocol_payload_decoder_factory_init(MYSQLND_CONN_DATA * conn, const zend_bool persistent); PHPAPI void mysqlnd_protocol_payload_decoder_factory_free(MYSQLND_PROTOCOL_PAYLOAD_DECODER_FACTORY * const payload_decoder_factory); #endif /* MYSQLND_WIREPROTOCOL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!2ext/iconv/php_have_libiconv.hnu[ PK!ͣdext/iconv/php_have_iconv.hnu[#define HAVE_ICONV 1 PK!2&ext/iconv/php_iconv_aliased_libiconv.hnu[ PK!I QQext/iconv/php_iconv.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rui Hirokawa | | Stig Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_ICONV_H #define PHP_ICONV_H #ifdef PHP_WIN32 # ifdef PHP_ICONV_EXPORTS # define PHP_ICONV_API __declspec(dllexport) # else # define PHP_ICONV_API __declspec(dllimport) # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_ICONV_API __attribute__ ((visibility("default"))) #else # define PHP_ICONV_API #endif #include "php_version.h" #define PHP_ICONV_VERSION PHP_VERSION #ifdef PHP_ATOM_INC #include "ext/iconv/php_have_iconv.h" #include "ext/iconv/php_have_libiconv.h" #include "ext/iconv/php_iconv_aliased_libiconv.h" #include "ext/iconv/php_have_glibc_iconv.h" #include "ext/iconv/php_have_bsd_iconv.h" #include "ext/iconv/php_have_ibm_iconv.h" #include "ext/iconv/php_iconv_supports_errno.h" #include "ext/iconv/php_php_iconv_impl.h" #include "ext/iconv/php_php_iconv_h_path.h" #endif #ifdef HAVE_ICONV extern zend_module_entry iconv_module_entry; #define iconv_module_ptr &iconv_module_entry PHP_MINIT_FUNCTION(miconv); PHP_MSHUTDOWN_FUNCTION(miconv); PHP_MINFO_FUNCTION(miconv); PHP_NAMED_FUNCTION(php_if_iconv); PHP_FUNCTION(ob_iconv_handler); PHP_FUNCTION(iconv_get_encoding); PHP_FUNCTION(iconv_set_encoding); PHP_FUNCTION(iconv_strlen); PHP_FUNCTION(iconv_substr); PHP_FUNCTION(iconv_strpos); PHP_FUNCTION(iconv_strrpos); PHP_FUNCTION(iconv_mime_encode); PHP_FUNCTION(iconv_mime_decode); PHP_FUNCTION(iconv_mime_decode_headers); ZEND_BEGIN_MODULE_GLOBALS(iconv) char *input_encoding; char *internal_encoding; char *output_encoding; ZEND_END_MODULE_GLOBALS(iconv) #define ICONVG(v) ZEND_MODULE_GLOBALS_ACCESSOR(iconv, v) #if defined(ZTS) && defined(COMPILE_DL_ICONV) ZEND_TSRMLS_CACHE_EXTERN() #endif #ifdef HAVE_IBM_ICONV # define ICONV_ASCII_ENCODING "IBM-850" # define ICONV_UCS4_ENCODING "UCS-4" #else # define ICONV_ASCII_ENCODING "ASCII" # define ICONV_UCS4_ENCODING "UCS-4LE" #endif #ifndef ICONV_CSNMAXLEN #define ICONV_CSNMAXLEN 64 #endif /* {{{ typedef enum php_iconv_err_t */ typedef enum _php_iconv_err_t { PHP_ICONV_ERR_SUCCESS = SUCCESS, PHP_ICONV_ERR_CONVERTER = 1, PHP_ICONV_ERR_WRONG_CHARSET = 2, PHP_ICONV_ERR_TOO_BIG = 3, PHP_ICONV_ERR_ILLEGAL_SEQ = 4, PHP_ICONV_ERR_ILLEGAL_CHAR = 5, PHP_ICONV_ERR_UNKNOWN = 6, PHP_ICONV_ERR_MALFORMED = 7, PHP_ICONV_ERR_ALLOC = 8 } php_iconv_err_t; /* }}} */ PHP_ICONV_API php_iconv_err_t php_iconv_string(const char * in_p, size_t in_len, zend_string **out, const char *out_charset, const char *in_charset); #else #define iconv_module_ptr NULL #endif /* HAVE_ICONV */ #define phpext_iconv_ptr iconv_module_ptr #endif /* PHP_ICONV_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!2 ext/iconv/php_have_glibc_iconv.hnu[ PK!2ext/iconv/php_have_ibm_iconv.hnu[ PK!#ext/iconv/php_iconv_broken_ignore.hnu[#define ICONV_BROKEN_IGNORE 1 PK!2ext/iconv/php_have_bsd_iconv.hnu[ PK!2 ext/iconv/php_php_iconv_h_path.hnu[ PK!2$ext/iconv/php_iconv_supports_errno.hnu[ PK!2ext/iconv/php_php_iconv_impl.hnu[ PK!qext/gd/php_gd.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Stig Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_GD_H #define PHP_GD_H #if HAVE_LIBFREETYPE # ifndef ENABLE_GD_TTF # define ENABLE_GD_TTF # endif #endif #if defined(HAVE_LIBGD) || defined(HAVE_GD_BUNDLED) /* open_basedir and safe_mode checks */ #define PHP_GD_CHECK_OPEN_BASEDIR(filename, errormsg) \ if (!filename || php_check_open_basedir(filename)) { \ php_error_docref(NULL, E_WARNING, errormsg); \ RETURN_FALSE; \ } #define PHP_GDIMG_TYPE_GIF 1 #define PHP_GDIMG_TYPE_PNG 2 #define PHP_GDIMG_TYPE_JPG 3 #define PHP_GDIMG_TYPE_WBM 4 #define PHP_GDIMG_TYPE_XBM 5 #define PHP_GDIMG_TYPE_XPM 6 #define PHP_GDIMG_CONVERT_WBM 7 #define PHP_GDIMG_TYPE_GD 8 #define PHP_GDIMG_TYPE_GD2 9 #define PHP_GDIMG_TYPE_GD2PART 10 #define PHP_GDIMG_TYPE_WEBP 11 #define PHP_GDIMG_TYPE_BMP 12 #define PHP_IMG_GIF 1 #define PHP_IMG_JPG 2 #define PHP_IMG_JPEG 2 #define PHP_IMG_PNG 4 #define PHP_IMG_WBMP 8 #define PHP_IMG_XPM 16 #define PHP_IMG_WEBP 32 #define PHP_IMG_BMP 64 #ifdef PHP_WIN32 # define PHP_GD_API __declspec(dllexport) #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_GD_API __attribute__ ((visibility("default"))) #else # define PHP_GD_API #endif PHPAPI extern const char php_sig_gif[3]; PHPAPI extern const char php_sig_jpg[3]; PHPAPI extern const char php_sig_png[8]; PHPAPI extern const char php_sig_bmp[2]; PHPAPI extern const char php_sig_riff[4]; PHPAPI extern const char php_sig_webp[4]; extern zend_module_entry gd_module_entry; #define phpext_gd_ptr &gd_module_entry #include "php_version.h" #define PHP_GD_VERSION PHP_VERSION /* gd.c functions */ PHP_MINFO_FUNCTION(gd); PHP_MINIT_FUNCTION(gd); #if HAVE_GD_FREETYPE && HAVE_LIBFREETYPE PHP_RSHUTDOWN_FUNCTION(gd); #endif PHP_FUNCTION(gd_info); PHP_FUNCTION(imagearc); PHP_FUNCTION(imageellipse); PHP_FUNCTION(imagechar); PHP_FUNCTION(imagecharup); PHP_FUNCTION(imageistruecolor); PHP_FUNCTION(imagecolorallocate); PHP_FUNCTION(imagepalettecopy); PHP_FUNCTION(imagecolorat); PHP_FUNCTION(imagecolorclosest); PHP_FUNCTION(imagecolorclosesthwb); PHP_FUNCTION(imagecolordeallocate); PHP_FUNCTION(imagecolorresolve); PHP_FUNCTION(imagecolorexact); PHP_FUNCTION(imagecolorset); PHP_FUNCTION(imagecolorstotal); PHP_FUNCTION(imagecolorsforindex); PHP_FUNCTION(imagecolortransparent); PHP_FUNCTION(imagecopy); PHP_FUNCTION(imagecopymerge); PHP_FUNCTION(imagecopyresized); PHP_FUNCTION(imagetypes); PHP_FUNCTION(imagecreate); PHP_FUNCTION(imageftbbox); PHP_FUNCTION(imagefttext); PHP_FUNCTION(imagecreatetruecolor); PHP_FUNCTION(imagetruecolortopalette); PHP_FUNCTION(imagepalettetotruecolor); PHP_FUNCTION(imagesetthickness); PHP_FUNCTION(imagefilledellipse); PHP_FUNCTION(imagefilledarc); PHP_FUNCTION(imagealphablending); PHP_FUNCTION(imagesavealpha); PHP_FUNCTION(imagecolorallocatealpha); PHP_FUNCTION(imagecolorresolvealpha); PHP_FUNCTION(imagecolorclosestalpha); PHP_FUNCTION(imagecolorexactalpha); PHP_FUNCTION(imagecopyresampled); #ifdef PHP_WIN32 PHP_FUNCTION(imagegrabwindow); PHP_FUNCTION(imagegrabscreen); #endif PHP_FUNCTION(imagerotate); PHP_FUNCTION(imageflip); PHP_FUNCTION(imageantialias); PHP_FUNCTION(imagecrop); PHP_FUNCTION(imagecropauto); PHP_FUNCTION(imagescale); PHP_FUNCTION(imageaffine); PHP_FUNCTION(imageaffinematrixget); PHP_FUNCTION(imageaffinematrixconcat); PHP_FUNCTION(imagesetinterpolation); PHP_FUNCTION(imagesetthickness); PHP_FUNCTION(imagecopymergegray); PHP_FUNCTION(imagesetbrush); PHP_FUNCTION(imagesettile); PHP_FUNCTION(imagesetstyle); PHP_FUNCTION(imagecreatefromstring); PHP_FUNCTION(imagecreatefromgif); PHP_FUNCTION(imagecreatefromjpeg); PHP_FUNCTION(imagecreatefromxbm); PHP_FUNCTION(imagecreatefromwebp); PHP_FUNCTION(imagecreatefrompng); PHP_FUNCTION(imagecreatefromwbmp); PHP_FUNCTION(imagecreatefromgd); PHP_FUNCTION(imagecreatefromgd2); PHP_FUNCTION(imagecreatefromgd2part); #if defined(HAVE_GD_BMP) PHP_FUNCTION(imagecreatefrombmp); #endif #if defined(HAVE_GD_XPM) PHP_FUNCTION(imagecreatefromxpm); #endif PHP_FUNCTION(imagegammacorrect); PHP_FUNCTION(imagedestroy); PHP_FUNCTION(imagefill); PHP_FUNCTION(imagefilledpolygon); PHP_FUNCTION(imagefilledrectangle); PHP_FUNCTION(imagefilltoborder); PHP_FUNCTION(imagefontwidth); PHP_FUNCTION(imagefontheight); PHP_FUNCTION(imagegif ); PHP_FUNCTION(imagejpeg ); PHP_FUNCTION(imagepng); PHP_FUNCTION(imagewebp); PHP_FUNCTION(imagewbmp); PHP_FUNCTION(imagegd); PHP_FUNCTION(imagegd2); #if defined(HAVE_GD_BMP) PHP_FUNCTION(imagebmp); #endif PHP_FUNCTION(imageinterlace); PHP_FUNCTION(imageline); PHP_FUNCTION(imageloadfont); PHP_FUNCTION(imagepolygon); PHP_FUNCTION(imageopenpolygon); PHP_FUNCTION(imagerectangle); PHP_FUNCTION(imagesetpixel); PHP_FUNCTION(imagestring); PHP_FUNCTION(imagestringup); PHP_FUNCTION(imagesx); PHP_FUNCTION(imagesy); PHP_FUNCTION(imagesetclip); PHP_FUNCTION(imagegetclip); PHP_FUNCTION(imagedashedline); PHP_FUNCTION(imagettfbbox); PHP_FUNCTION(imagettftext); PHP_FUNCTION(jpeg2wbmp); PHP_FUNCTION(png2wbmp); PHP_FUNCTION(image2wbmp); PHP_FUNCTION(imagecolormatch); PHP_FUNCTION(imagelayereffect); PHP_FUNCTION(imagexbm); PHP_FUNCTION(imagefilter); PHP_FUNCTION(imageconvolution); PHP_FUNCTION(imageresolution); PHP_GD_API int phpi_get_le_gd(void); #else #define phpext_gd_ptr NULL #endif #endif /* PHP_GD_H */ PK!]ext/gd/gd_compat.hnu[#ifndef GD_COMPAT_H #define GD_COMPAT_H 1 #ifndef HAVE_GD_BUNDLED /* from gd_compat.c */ const char * gdPngGetVersionString(); const char * gdJpegGetVersionString(); #endif /* from gd_compat.c of libgd/gd_security.c */ int overflow2(int a, int b); #endif /* GD_COMPAT_H */ PK!^  ext/gd/gdcache.hnu[/* * $Id$ * * Caches of pointers to user structs in which the least-recently-used * element is replaced in the event of a cache miss after the cache has * reached a given size. * * John Ellson (ellson@lucent.com) Oct 31, 1997 * * Test this with: * gcc -o gdcache -g -Wall -DTEST gdcache.c * * The cache is implemented by a singly-linked list of elements * each containing a pointer to a user struct that is being managed by * the cache. * * The head structure has a pointer to the most-recently-used * element, and elements are moved to this position in the list each * time they are used. The head also contains pointers to three * user defined functions: * - a function to test if a cached userdata matches some keydata * - a function to provide a new userdata struct to the cache * if there has been a cache miss. * - a function to release a userdata struct when it is * no longer being managed by the cache * * In the event of a cache miss the cache is allowed to grow up to * a specified maximum size. After the maximum size is reached then * the least-recently-used element is discarded to make room for the * new. The most-recently-returned value is always left at the * beginning of the list after retrieval. * * In the current implementation the cache is traversed by a linear * search from most-recent to least-recent. This linear search * probably limits the usefulness of this implementation to cache * sizes of a few tens of elements. */ /*********************************************************/ /* header */ /*********************************************************/ #if (!defined(_OSD_POSIX) && !defined(__FreeBSD__)) && HAVE_MALLOC_H #include #else #include /* BS2000/OSD defines malloc() & friends in stdlib.h */ #endif #ifndef NULL #define NULL (void *)0 #endif /* user defined function templates */ typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata); typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata); typedef void (*gdCacheReleaseFn_t)(void *userdata); /* element structure */ typedef struct gdCache_element_s gdCache_element_t; struct gdCache_element_s { gdCache_element_t *next; void *userdata; }; /* head structure */ typedef struct gdCache_head_s gdCache_head_t; struct gdCache_head_s { gdCache_element_t *mru; int size; char *error; gdCacheTestFn_t gdCacheTest; gdCacheFetchFn_t gdCacheFetch; gdCacheReleaseFn_t gdCacheRelease; }; /* function templates */ gdCache_head_t * gdCacheCreate( int size, gdCacheTestFn_t gdCacheTest, gdCacheFetchFn_t gdCacheFetch, gdCacheReleaseFn_t gdCacheRelease ); void gdCacheDelete( gdCache_head_t *head ); void * gdCacheGet( gdCache_head_t *head, void *keydata ); PK!Zl춒 ext/gd/libgd/bmp.hnu[/* $Id$ */ #ifdef __cplusplus extern "C" { #endif /* gd_bmp.c Bitmap format support for libgd * Written 2007, Scott MacVicar --------------------------------------------------------------------------- Todo: RLE4, RLE8 and Bitfield encoding Add full support for Windows v4 and Windows v5 header formats ---------------------------------------------------------------------------- */ #ifndef BMP_H #define BMP_H 1 #define BMP_PALETTE_3 1 #define BMP_PALETTE_4 2 #define BMP_WINDOWS_V3 40 #define BMP_OS2_V1 12 #define BMP_OS2_V2 64 #define BMP_WINDOWS_V4 108 #define BMP_WINDOWS_V5 124 #define BMP_BI_RGB 0 #define BMP_BI_RLE8 1 #define BMP_BI_RLE4 2 #define BMP_BI_BITFIELDS 3 #define BMP_BI_JPEG 4 #define BMP_BI_PNG 5 #define BMP_RLE_COMMAND 0 #define BMP_RLE_ENDOFLINE 0 #define BMP_RLE_ENDOFBITMAP 1 #define BMP_RLE_DELTA 2 #define BMP_RLE_TYPE_RAW 0 #define BMP_RLE_TYPE_RLE 1 /* BMP header. */ typedef struct { /* 16 bit - header identifying the type */ signed short int magic; /* 32bit - size of the file */ int size; /* 16bit - these two are in the spec but "reserved" */ signed short int reserved1; signed short int reserved2; /* 32 bit - offset of the bitmap header from data in bytes */ signed int off; } bmp_hdr_t; /* BMP info. */ typedef struct { /* 16bit - Type, ie Windows or OS/2 for the palette info */ signed short int type; /* 32bit - The length of the bitmap information header in bytes. */ signed int len; /* 32bit - The width of the bitmap in pixels. */ signed int width; /* 32bit - The height of the bitmap in pixels. */ signed int height; /* 8 bit - The bitmap data is specified in top-down order. */ signed char topdown; /* 16 bit - The number of planes. This must be set to a value of one. */ signed short int numplanes; /* 16 bit - The number of bits per pixel. */ signed short int depth; /* 32bit - The type of compression used. */ signed int enctype; /* 32bit - The size of the image in bytes. */ signed int size; /* 32bit - The horizontal resolution in pixels/metre. */ signed int hres; /* 32bit - The vertical resolution in pixels/metre. */ signed int vres; /* 32bit - The number of color indices used by the bitmap. */ signed int numcolors; /* 32bit - The number of color indices important for displaying the bitmap. */ signed int mincolors; } bmp_info_t; #endif #ifdef __cplusplus } #endif PK!A,,ext/gd/libgd/gdhelpers.hnu[#ifndef GDHELPERS_H #define GDHELPERS_H 1 #include #include "php.h" /* TBB: strtok_r is not universal; provide an implementation of it. */ extern char *gd_strtok_r(char *s, char *sep, char **state); /* These functions wrap memory management. gdFree is in gd.h, where callers can utilize it to correctly free memory allocated by these functions with the right version of free(). */ #define gdCalloc(nmemb, size) ecalloc(nmemb, size) #define gdMalloc(size) emalloc(size) #define gdRealloc(ptr, size) erealloc(ptr, size) #define gdEstrdup(ptr) estrdup(ptr) #define gdFree(ptr) efree(ptr) #define gdPMalloc(ptr) pemalloc(ptr, 1) #define gdPFree(ptr) pefree(ptr, 1) #define gdPEstrdup(ptr) pestrdup(ptr, 1) /* Returns nonzero if multiplying the two quantities will result in integer overflow. Also returns nonzero if either quantity is negative. By Phil Knirsch based on netpbm fixes by Alan Cox. */ int overflow2(int a, int b); #ifdef ZTS #define gdMutexDeclare(x) MUTEX_T x #define gdMutexSetup(x) x = tsrm_mutex_alloc() #define gdMutexShutdown(x) tsrm_mutex_free(x) #define gdMutexLock(x) tsrm_mutex_lock(x) #define gdMutexUnlock(x) tsrm_mutex_unlock(x) #else #define gdMutexDeclare(x) #define gdMutexSetup(x) #define gdMutexShutdown(x) #define gdMutexLock(x) #define gdMutexUnlock(x) #endif #define DPCM2DPI(dpcm) (unsigned int)((dpcm)*2.54 + 0.5) #define DPM2DPI(dpm) (unsigned int)((dpm)*0.0254 + 0.5) #define DPI2DPCM(dpi) (unsigned int)((dpi)/2.54 + 0.5) #define DPI2DPM(dpi) (unsigned int)((dpi)/0.0254 + 0.5) #endif /* GDHELPERS_H */ PK!YHext/gd/libgd/gd_intern.hnu[#ifndef GD_INTERN_H #define GD_INTERN_H #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) #endif #define MIN3(a,b,c) ((a)<(b)?(MIN(a,c)):(MIN(b,c))) #ifndef MAX #define MAX(a,b) ((a)<(b)?(b):(a)) #endif #define MAX3(a,b,c) ((a)<(b)?(MAX(b,c)):(MAX(a,c))) #endif PK!Aﹴ ext/gd/libgd/gdcache.hnu[/* * gdcache.h * * Caches of pointers to user structs in which the least-recently-used * element is replaced in the event of a cache miss after the cache has * reached a given size. * * John Ellson (ellson@graphviz.org) Oct 31, 1997 * * Test this with: * gcc -o gdcache -g -Wall -DTEST gdcache.c * * The cache is implemented by a singly-linked list of elements * each containing a pointer to a user struct that is being managed by * the cache. * * The head structure has a pointer to the most-recently-used * element, and elements are moved to this position in the list each * time they are used. The head also contains pointers to three * user defined functions: * - a function to test if a cached userdata matches some keydata * - a function to provide a new userdata struct to the cache * if there has been a cache miss. * - a function to release a userdata struct when it is * no longer being managed by the cache * * In the event of a cache miss the cache is allowed to grow up to * a specified maximum size. After the maximum size is reached then * the least-recently-used element is discarded to make room for the * new. The most-recently-returned value is always left at the * beginning of the list after retrieval. * * In the current implementation the cache is traversed by a linear * search from most-recent to least-recent. This linear search * probably limits the usefulness of this implementation to cache * sizes of a few tens of elements. */ /*********************************************************/ /* header */ /*********************************************************/ #include #if (!defined(__OpenBSD__)) && HAVE_MALLOC_H #include #endif #ifndef NULL #define NULL (void *)0 #endif /* user defined function templates */ typedef int (*gdCacheTestFn_t)(void *userdata, void *keydata); typedef void *(*gdCacheFetchFn_t)(char **error, void *keydata); typedef void (*gdCacheReleaseFn_t)(void *userdata); /* element structure */ typedef struct gdCache_element_s gdCache_element_t; struct gdCache_element_s { gdCache_element_t *next; void *userdata; }; /* head structure */ typedef struct gdCache_head_s gdCache_head_t; struct gdCache_head_s { gdCache_element_t *mru; int size; char *error; gdCacheTestFn_t gdCacheTest; gdCacheFetchFn_t gdCacheFetch; gdCacheReleaseFn_t gdCacheRelease; }; /* function templates */ gdCache_head_t * gdCacheCreate( int size, gdCacheTestFn_t gdCacheTest, gdCacheFetchFn_t gdCacheFetch, gdCacheReleaseFn_t gdCacheRelease ); void gdCacheDelete( gdCache_head_t *head ); void * gdCacheGet( gdCache_head_t *head, void *keydata ); PK!AD00ext/gd/libgd/gd_io.hnu[#ifndef GD_IO_H #define GD_IO_H 1 #include #ifdef VMS #define Putchar gdPutchar #endif typedef struct gdIOCtx { int (*getC)(struct gdIOCtx*); int (*getBuf)(struct gdIOCtx*, void*, int); void (*putC)(struct gdIOCtx*, int); int (*putBuf)(struct gdIOCtx*, const void*, int); int (*seek)(struct gdIOCtx*, const int); long (*tell)(struct gdIOCtx*); void (*gd_free)(struct gdIOCtx*); void *data; } gdIOCtx; typedef struct gdIOCtx *gdIOCtxPtr; void Putword(int w, gdIOCtx *ctx); void Putchar(int c, gdIOCtx *ctx); void gdPutC(const unsigned char c, gdIOCtx *ctx); int gdPutBuf(const void *, int, gdIOCtx*); void gdPutWord(int w, gdIOCtx *ctx); void gdPutInt(int w, gdIOCtx *ctx); int gdGetC(gdIOCtx *ctx); int gdGetBuf(void *, int, gdIOCtx*); int gdGetByte(int *result, gdIOCtx *ctx); int gdGetWord(int *result, gdIOCtx *ctx); int gdGetWordLSB(signed short int *result, gdIOCtx *ctx); int gdGetInt(int *result, gdIOCtx *ctx); int gdGetIntLSB(signed int *result, gdIOCtx *ctx); int gdSeek(gdIOCtx *ctx, const int); long gdTell(gdIOCtx *ctx); #endif PK!fext/gd/libgd/gdfontl.hnu[ #ifndef _GDFONTL_H_ #define _GDFONTL_H_ 1 #ifdef __cplusplus extern "C" { #endif /* This is a header file for gd font, generated using bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz from bdf font -misc-fixed-medium-r-normal--16-140-75-75-c-80-iso8859-2 at Tue Jan 6 19:39:27 1998. The original bdf was holding following copyright: "Libor Skarvada, libor@informatics.muni.cz" */ #include "gd.h" extern gdFontPtr gdFontLarge; extern gdFontPtr gdFontGetLarge(void); #ifdef __cplusplus } #endif #endif PK!yext/gd/libgd/wbmp.hnu[/* WBMP ** ---- ** WBMP Level 0: B/W, Uncompressed ** This implements the WBMP format as specified in WAPSpec 1.1 and 1.2. ** It does not support ExtHeaders as defined in the spec. The spec states ** that a WAP client does not need to implement ExtHeaders. ** ** (c) 2000 Johan Van den Brande ** ** Header file */ #ifndef __WBMP_H #define __WBMP_H 1 #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php_compat.h" /* WBMP struct ** ----------- ** A Wireless bitmap structure ** */ typedef struct Wbmp_ { int type; /* type of the wbmp */ int width; /* width of the image */ int height; /* height of the image */ int *bitmap; /* pointer to data: 0 = WHITE , 1 = BLACK */ } Wbmp; #define WBMP_WHITE 1 #define WBMP_BLACK 0 /* Proto's ** ------- ** */ void putmbi( int i, void (*putout)(int c, void *out), void *out); int getmbi ( int (*getin)(void *in), void *in ); int skipheader( int (*getin)(void *in), void *in ); Wbmp *createwbmp( int width, int height, int color ); int readwbmp( int (*getin)(void *in), void *in, Wbmp **wbmp ); int writewbmp( Wbmp *wbmp, void (*putout)( int c, void *out), void *out); void freewbmp( Wbmp *wbmp ); void printwbmp( Wbmp *wbmp ); #endif PK!1ext/gd/libgd/gdfontmb.hnu[ #ifndef _GDFONTMB_H_ #define _GDFONTMB_H_ 1 #ifdef __cplusplus extern "C" { #endif /* This is a header file for gd font, generated using bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz from bdf font -misc-fixed-bold-r-normal-sans-13-94-100-100-c-70-iso8859-2 at Thu Jan 8 13:54:57 1998. No copyright info was found in the original bdf. */ #include "gd.h" extern gdFontPtr gdFontMediumBold; extern gdFontPtr gdFontGetMediumBold(void); #ifdef __cplusplus } #endif #endif PK!ٟ+ext/gd/libgd/gdfonts.hnu[ #ifndef _GDFONTS_H_ #define _GDFONTS_H_ 1 #ifdef __cplusplus extern "C" { #endif /* This is a header file for gd font, generated using bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz from bdf font -misc-fixed-medium-r-semicondensed-sans-12-116-75-75-c-60-iso8859-2 at Thu Jan 8 14:13:20 1998. No copyright info was found in the original bdf. */ #include "gd.h" extern gdFontPtr gdFontSmall; extern gdFontPtr gdFontGetSmall(void); #ifdef __cplusplus } #endif #endif PK!o%  ext/gd/libgd/gdfontt.hnu[ #ifndef _GDFONTT_H_ #define _GDFONTT_H_ 1 #ifdef __cplusplus extern "C" { #endif /* This is a header file for gd font, generated using bdftogd version 0.5 by Jan Pazdziora, adelton@fi.muni.cz from bdf font -Misc-Fixed-Medium-R-Normal--8-80-75-75-C-50-ISO8859-2 at Thu Jan 8 13:49:54 1998. The original bdf was holding following copyright: "Libor Skarvada, libor@informatics.muni.cz" */ #include "gd.h" extern gdFontPtr gdFontTiny; extern gdFontPtr gdFontGetTiny(void); #ifdef __cplusplus } #endif #endif PK!Ѷext/gd/libgd/jisx0208.hnu[#ifndef JISX0208_H #define JISX0208_H /* This file was derived from "src/VF_Ftype.c" in VFlib2-2.24.2 by Dr. Kakugawa */ /* JIS -> Unicode mapping table */ static unsigned short UnicodeTbl[][94] = { { /* category 01 */ 0x0000, 0x3001, 0x3002, 0xFF0C, 0xFF0E, 0x30FB, 0xFF1A, 0xFF1B, 0xFF1F, 0xFF01, 0x309B, 0x309C, 0x00B4, 0xFF40, 0x00A8, 0xFF3E, 0xFFE3, 0xFF3F, 0x30FD, 0x30FE, 0x309D, 0x309E, 0x3003, 0x4EDD, 0x3005, 0x3006, 0x3007, 0x30FC, 0x2015, 0x2010, 0xFF0F, 0xFF3C, 0xFF5E, 0x2225, 0xFF5C, 0x2026, 0x2025, 0x2018, 0x2019, 0x201C, 0x201D, 0xFF08, 0xFF09, 0x3014, 0x3015, 0xFF3B, 0xFF3D, 0xFF5B, 0xFF5D, 0x3008, 0x3009, 0x300A, 0x300B, 0x300C, 0x300D, 0x300E, 0x300F, 0x3010, 0x3011, 0xFF0B, 0xFF0D, 0x00B1, 0x00D7, 0x00F7, 0xFF1D, 0x2260, 0xFF1C, 0xFF1E, 0x2266, 0x2267, 0x221E, 0x2234, 0x2642, 0x2640, 0x00B0, 0x2032, 0x2033, 0x2103, 0xFFE5, 0xFF04, 0xFFE0, 0xFFE1, 0xFF05, 0xFF03, 0xFF06, 0xFF0A, 0xFF20, 0x00A7, 0x2606, 0x2605, 0x25CB, 0x25CF, 0x25CE, 0x25C7}, { /* category 02 */ 0x25C6, 0x25A1, 0x25A0, 0x25B3, 0x25B2, 0x25BD, 0x25BC, 0x203B, 0x3012, 0x2192, 0x2190, 0x2191, 0x2193, 0x3013, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2208, 0x220B, 0x2286, 0x2287, 0x2282, 0x2283, 0x222A, 0x2229, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2227, 0x2228, 0xFFE2, 0x21D2, 0x21D4, 0x2200, 0x2203, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x2220, 0x22A5, 0x2312, 0x2202, 0x2207, 0x2261, 0x2252, 0x226A, 0x226B, 0x221A, 0x223D, 0x221D, 0x2235, 0x222B, 0x222C, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x212B, 0x2030, 0x266F, 0x266D, 0x266A, 0x2020, 0x2021, /**/ 0x00B6, 0x0000, 0x0000, 0x0000, 0x0000, 0x25EF}, { /* category 03 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF10, 0xFF11, 0xFF12, 0xFF13, 0xFF14, 0xFF15, 0xFF16, 0xFF17, 0xFF18, 0xFF19, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF21, 0xFF22, 0xFF23, 0xFF24, 0xFF25, 0xFF26, 0xFF27, 0xFF28, 0xFF29, 0xFF2A, 0xFF2B, 0xFF2C, 0xFF2D, 0xFF2E, 0xFF2F, 0xFF30, 0xFF31, 0xFF32, 0xFF33, 0xFF34, 0xFF35, 0xFF36, 0xFF37, 0xFF38, 0xFF39, 0xFF3A, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFF41, 0xFF42, 0xFF43, 0xFF44, 0xFF45, 0xFF46, 0xFF47, 0xFF48, 0xFF49, 0xFF4A, 0xFF4B, 0xFF4C, 0xFF4D, 0xFF4E, 0xFF4F, 0xFF50, 0xFF51, 0xFF52, 0xFF53, 0xFF54, 0xFF55, 0xFF56, 0xFF57, 0xFF58, 0xFF59, 0xFF5A, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 04 */ 0x3041, 0x3042, 0x3043, 0x3044, 0x3045, 0x3046, 0x3047, 0x3048, 0x3049, 0x304A, 0x304B, 0x304C, 0x304D, 0x304E, 0x304F, 0x3050, 0x3051, 0x3052, 0x3053, 0x3054, 0x3055, 0x3056, 0x3057, 0x3058, 0x3059, 0x305A, 0x305B, 0x305C, 0x305D, 0x305E, 0x305F, 0x3060, 0x3061, 0x3062, 0x3063, 0x3064, 0x3065, 0x3066, 0x3067, 0x3068, 0x3069, 0x306A, 0x306B, 0x306C, 0x306D, 0x306E, 0x306F, 0x3070, 0x3071, 0x3072, 0x3073, 0x3074, 0x3075, 0x3076, 0x3077, 0x3078, 0x3079, 0x307A, 0x307B, 0x307C, 0x307D, 0x307E, 0x307F, 0x3080, 0x3081, 0x3082, 0x3083, 0x3084, 0x3085, 0x3086, 0x3087, 0x3088, 0x3089, 0x308A, 0x308B, 0x308C, 0x308D, 0x308E, 0x308F, 0x3090, 0x3091, 0x3092, 0x3093, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 05 */ 0x30A1, 0x30A2, 0x30A3, 0x30A4, 0x30A5, 0x30A6, 0x30A7, 0x30A8, 0x30A9, 0x30AA, 0x30AB, 0x30AC, 0x30AD, 0x30AE, 0x30AF, 0x30B0, 0x30B1, 0x30B2, 0x30B3, 0x30B4, 0x30B5, 0x30B6, 0x30B7, 0x30B8, 0x30B9, 0x30BA, 0x30BB, 0x30BC, 0x30BD, 0x30BE, 0x30BF, 0x30C0, 0x30C1, 0x30C2, 0x30C3, 0x30C4, 0x30C5, 0x30C6, 0x30C7, 0x30C8, 0x30C9, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D0, 0x30D1, 0x30D2, 0x30D3, 0x30D4, 0x30D5, 0x30D6, 0x30D7, 0x30D8, 0x30D9, 0x30DA, 0x30DB, 0x30DC, 0x30DD, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E3, 0x30E4, 0x30E5, 0x30E6, 0x30E7, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EE, 0x30EF, 0x30F0, 0x30F1, 0x30F2, 0x30F3, 0x30F4, 0x30F5, 0x30F6, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 06 */ 0x0391, 0x0392, 0x0393, 0x0394, 0x0395, 0x0396, 0x0397, 0x0398, 0x0399, 0x039A, 0x039B, 0x039C, 0x039D, 0x039E, 0x039F, 0x03A0, 0x03A1, 0x03A3, 0x03A4, 0x03A5, 0x03A6, 0x03A7, 0x03A8, 0x03A9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x03B1, 0x03B2, 0x03B3, 0x03B4, 0x03B5, 0x03B6, 0x03B7, 0x03B8, 0x03B9, 0x03BA, 0x03BB, 0x03BC, 0x03BD, 0x03BE, 0x03BF, 0x03C0, 0x03C1, 0x03C3, 0x03C4, 0x03C5, 0x03C6, 0x03C7, 0x03C8, 0x03C9, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 07 */ 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0401, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0451, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 08 */ 0x2500, 0x2502, 0x250C, 0x2510, 0x2518, 0x2514, 0x251C, 0x252C, 0x2524, 0x2534, 0x253C, 0x2501, 0x2503, 0x250F, 0x2513, 0x251B, 0x2517, 0x2523, 0x2533, 0x252B, 0x253B, 0x254B, 0x2520, 0x252F, 0x2528, 0x2537, 0x253F, 0x251D, 0x2530, 0x2525, 0x2538, 0x2542, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 09 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 10 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 11 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 12 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 13 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 14 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 15 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 16 */ 0x4E9C, 0x5516, 0x5A03, 0x963F, 0x54C0, 0x611B, 0x6328, 0x59F6, 0x9022, 0x8475, 0x831C, 0x7A50, 0x60AA, 0x63E1, 0x6E25, 0x65ED, 0x8466, 0x82A6, 0x9BF5, 0x6893, 0x5727, 0x65A1, 0x6271, 0x5B9B, 0x59D0, 0x867B, 0x98F4, 0x7D62, 0x7DBE, 0x9B8E, 0x6216, 0x7C9F, 0x88B7, 0x5B89, 0x5EB5, 0x6309, 0x6697, 0x6848, 0x95C7, 0x978D, 0x674F, 0x4EE5, 0x4F0A, 0x4F4D, 0x4F9D, 0x5049, 0x56F2, 0x5937, 0x59D4, 0x5A01, 0x5C09, 0x60DF, 0x610F, 0x6170, 0x6613, 0x6905, 0x70BA, 0x754F, 0x7570, 0x79FB, 0x7DAD, 0x7DEF, 0x80C3, 0x840E, 0x8863, 0x8B02, 0x9055, 0x907A, 0x533B, 0x4E95, 0x4EA5, 0x57DF, 0x80B2, 0x90C1, 0x78EF, 0x4E00, 0x58F1, 0x6EA2, 0x9038, 0x7A32, 0x8328, 0x828B, 0x9C2F, 0x5141, 0x5370, 0x54BD, 0x54E1, 0x56E0, 0x59FB, 0x5F15, 0x98F2, 0x6DEB, 0x80E4, 0x852D}, { /* category 17 */ 0x9662, 0x9670, 0x96A0, 0x97FB, 0x540B, 0x53F3, 0x5B87, 0x70CF, 0x7FBD, 0x8FC2, 0x96E8, 0x536F, 0x9D5C, 0x7ABA, 0x4E11, 0x7893, 0x81FC, 0x6E26, 0x5618, 0x5504, 0x6B1D, 0x851A, 0x9C3B, 0x59E5, 0x53A9, 0x6D66, 0x74DC, 0x958F, 0x5642, 0x4E91, 0x904B, 0x96F2, 0x834F, 0x990C, 0x53E1, 0x55B6, 0x5B30, 0x5F71, 0x6620, 0x66F3, 0x6804, 0x6C38, 0x6CF3, 0x6D29, 0x745B, 0x76C8, 0x7A4E, 0x9834, 0x82F1, 0x885B, 0x8A60, 0x92ED, 0x6DB2, 0x75AB, 0x76CA, 0x99C5, 0x60A6, 0x8B01, 0x8D8A, 0x95B2, 0x698E, 0x53AD, 0x5186, 0x5712, 0x5830, 0x5944, 0x5BB4, 0x5EF6, 0x6028, 0x63A9, 0x63F4, 0x6CBF, 0x6F14, 0x708E, 0x7114, 0x7159, 0x71D5, 0x733F, 0x7E01, 0x8276, 0x82D1, 0x8597, 0x9060, 0x925B, 0x9D1B, 0x5869, 0x65BC, 0x6C5A, 0x7525, 0x51F9, 0x592E, 0x5965, 0x5F80, 0x5FDC}, { /* category 18 */ 0x62BC, 0x65FA, 0x6A2A, 0x6B27, 0x6BB4, 0x738B, 0x7FC1, 0x8956, 0x9D2C, 0x9D0E, 0x9EC4, 0x5CA1, 0x6C96, 0x837B, 0x5104, 0x5C4B, 0x61B6, 0x81C6, 0x6876, 0x7261, 0x4E59, 0x4FFA, 0x5378, 0x6069, 0x6E29, 0x7A4F, 0x97F3, 0x4E0B, 0x5316, 0x4EEE, 0x4F55, 0x4F3D, 0x4FA1, 0x4F73, 0x52A0, 0x53EF, 0x5609, 0x590F, 0x5AC1, 0x5BB6, 0x5BE1, 0x79D1, 0x6687, 0x679C, 0x67B6, 0x6B4C, 0x6CB3, 0x706B, 0x73C2, 0x798D, 0x79BE, 0x7A3C, 0x7B87, 0x82B1, 0x82DB, 0x8304, 0x8377, 0x83EF, 0x83D3, 0x8766, 0x8AB2, 0x5629, 0x8CA8, 0x8FE6, 0x904E, 0x971E, 0x868A, 0x4FC4, 0x5CE8, 0x6211, 0x7259, 0x753B, 0x81E5, 0x82BD, 0x86FE, 0x8CC0, 0x96C5, 0x9913, 0x99D5, 0x4ECB, 0x4F1A, 0x89E3, 0x56DE, 0x584A, 0x58CA, 0x5EFB, 0x5FEB, 0x602A, 0x6094, 0x6062, 0x61D0, 0x6212, 0x62D0, 0x6539}, { /* category 19 */ 0x9B41, 0x6666, 0x68B0, 0x6D77, 0x7070, 0x754C, 0x7686, 0x7D75, 0x82A5, 0x87F9, 0x958B, 0x968E, 0x8C9D, 0x51F1, 0x52BE, 0x5916, 0x54B3, 0x5BB3, 0x5D16, 0x6168, 0x6982, 0x6DAF, 0x788D, 0x84CB, 0x8857, 0x8A72, 0x93A7, 0x9AB8, 0x6D6C, 0x99A8, 0x86D9, 0x57A3, 0x67FF, 0x86CE, 0x920E, 0x5283, 0x5687, 0x5404, 0x5ED3, 0x62E1, 0x64B9, 0x683C, 0x6838, 0x6BBB, 0x7372, 0x78BA, 0x7A6B, 0x899A, 0x89D2, 0x8D6B, 0x8F03, 0x90ED, 0x95A3, 0x9694, 0x9769, 0x5B66, 0x5CB3, 0x697D, 0x984D, 0x984E, 0x639B, 0x7B20, 0x6A2B, 0x6A7F, 0x68B6, 0x9C0D, 0x6F5F, 0x5272, 0x559D, 0x6070, 0x62EC, 0x6D3B, 0x6E07, 0x6ED1, 0x845B, 0x8910, 0x8F44, 0x4E14, 0x9C39, 0x53F6, 0x691B, 0x6A3A, 0x9784, 0x682A, 0x515C, 0x7AC3, 0x84B2, 0x91DC, 0x938C, 0x565B, 0x9D28, 0x6822, 0x8305, 0x8431}, { /* category 20 */ 0x7CA5, 0x5208, 0x82C5, 0x74E6, 0x4E7E, 0x4F83, 0x51A0, 0x5BD2, 0x520A, 0x52D8, 0x52E7, 0x5DFB, 0x559A, 0x582A, 0x59E6, 0x5B8C, 0x5B98, 0x5BDB, 0x5E72, 0x5E79, 0x60A3, 0x611F, 0x6163, 0x61BE, 0x63DB, 0x6562, 0x67D1, 0x6853, 0x68FA, 0x6B3E, 0x6B53, 0x6C57, 0x6F22, 0x6F97, 0x6F45, 0x74B0, 0x7518, 0x76E3, 0x770B, 0x7AFF, 0x7BA1, 0x7C21, 0x7DE9, 0x7F36, 0x7FF0, 0x809D, 0x8266, 0x839E, 0x89B3, 0x8ACC, 0x8CAB, 0x9084, 0x9451, 0x9593, 0x9591, 0x95A2, 0x9665, 0x97D3, 0x9928, 0x8218, 0x4E38, 0x542B, 0x5CB8, 0x5DCC, 0x73A9, 0x764C, 0x773C, 0x5CA9, 0x7FEB, 0x8D0B, 0x96C1, 0x9811, 0x9854, 0x9858, 0x4F01, 0x4F0E, 0x5371, 0x559C, 0x5668, 0x57FA, 0x5947, 0x5B09, 0x5BC4, 0x5C90, 0x5E0C, 0x5E7E, 0x5FCC, 0x63EE, 0x673A, 0x65D7, 0x65E2, 0x671F, 0x68CB, 0x68C4}, { /* category 21 */ 0x6A5F, 0x5E30, 0x6BC5, 0x6C17, 0x6C7D, 0x757F, 0x7948, 0x5B63, 0x7A00, 0x7D00, 0x5FBD, 0x898F, 0x8A18, 0x8CB4, 0x8D77, 0x8ECC, 0x8F1D, 0x98E2, 0x9A0E, 0x9B3C, 0x4E80, 0x507D, 0x5100, 0x5993, 0x5B9C, 0x622F, 0x6280, 0x64EC, 0x6B3A, 0x72A0, 0x7591, 0x7947, 0x7FA9, 0x87FB, 0x8ABC, 0x8B70, 0x63AC, 0x83CA, 0x97A0, 0x5409, 0x5403, 0x55AB, 0x6854, 0x6A58, 0x8A70, 0x7827, 0x6775, 0x9ECD, 0x5374, 0x5BA2, 0x811A, 0x8650, 0x9006, 0x4E18, 0x4E45, 0x4EC7, 0x4F11, 0x53CA, 0x5438, 0x5BAE, 0x5F13, 0x6025, 0x6551, 0x673D, 0x6C42, 0x6C72, 0x6CE3, 0x7078, 0x7403, 0x7A76, 0x7AAE, 0x7B08, 0x7D1A, 0x7CFE, 0x7D66, 0x65E7, 0x725B, 0x53BB, 0x5C45, 0x5DE8, 0x62D2, 0x62E0, 0x6319, 0x6E20, 0x865A, 0x8A31, 0x8DDD, 0x92F8, 0x6F01, 0x79A6, 0x9B5A, 0x4EA8, 0x4EAB, 0x4EAC}, { /* category 22 */ 0x4F9B, 0x4FA0, 0x50D1, 0x5147, 0x7AF6, 0x5171, 0x51F6, 0x5354, 0x5321, 0x537F, 0x53EB, 0x55AC, 0x5883, 0x5CE1, 0x5F37, 0x5F4A, 0x602F, 0x6050, 0x606D, 0x631F, 0x6559, 0x6A4B, 0x6CC1, 0x72C2, 0x72ED, 0x77EF, 0x80F8, 0x8105, 0x8208, 0x854E, 0x90F7, 0x93E1, 0x97FF, 0x9957, 0x9A5A, 0x4EF0, 0x51DD, 0x5C2D, 0x6681, 0x696D, 0x5C40, 0x66F2, 0x6975, 0x7389, 0x6850, 0x7C81, 0x50C5, 0x52E4, 0x5747, 0x5DFE, 0x9326, 0x65A4, 0x6B23, 0x6B3D, 0x7434, 0x7981, 0x79BD, 0x7B4B, 0x7DCA, 0x82B9, 0x83CC, 0x887F, 0x895F, 0x8B39, 0x8FD1, 0x91D1, 0x541F, 0x9280, 0x4E5D, 0x5036, 0x53E5, 0x533A, 0x72D7, 0x7396, 0x77E9, 0x82E6, 0x8EAF, 0x99C6, 0x99C8, 0x99D2, 0x5177, 0x611A, 0x865E, 0x55B0, 0x7A7A, 0x5076, 0x5BD3, 0x9047, 0x9685, 0x4E32, 0x6ADB, 0x91E7, 0x5C51, 0x5C48}, { /* category 23 */ 0x6398, 0x7A9F, 0x6C93, 0x9774, 0x8F61, 0x7AAA, 0x718A, 0x9688, 0x7C82, 0x6817, 0x7E70, 0x6851, 0x936C, 0x52F2, 0x541B, 0x85AB, 0x8A13, 0x7FA4, 0x8ECD, 0x90E1, 0x5366, 0x8888, 0x7941, 0x4FC2, 0x50BE, 0x5211, 0x5144, 0x5553, 0x572D, 0x73EA, 0x578B, 0x5951, 0x5F62, 0x5F84, 0x6075, 0x6176, 0x6167, 0x61A9, 0x63B2, 0x643A, 0x656C, 0x666F, 0x6842, 0x6E13, 0x7566, 0x7A3D, 0x7CFB, 0x7D4C, 0x7D99, 0x7E4B, 0x7F6B, 0x830E, 0x834A, 0x86CD, 0x8A08, 0x8A63, 0x8B66, 0x8EFD, 0x981A, 0x9D8F, 0x82B8, 0x8FCE, 0x9BE8, 0x5287, 0x621F, 0x6483, 0x6FC0, 0x9699, 0x6841, 0x5091, 0x6B20, 0x6C7A, 0x6F54, 0x7A74, 0x7D50, 0x8840, 0x8A23, 0x6708, 0x4EF6, 0x5039, 0x5026, 0x5065, 0x517C, 0x5238, 0x5263, 0x55A7, 0x570F, 0x5805, 0x5ACC, 0x5EFA, 0x61B2, 0x61F8, 0x62F3, 0x6372}, { /* category 24 */ 0x691C, 0x6A29, 0x727D, 0x72AC, 0x732E, 0x7814, 0x786F, 0x7D79, 0x770C, 0x80A9, 0x898B, 0x8B19, 0x8CE2, 0x8ED2, 0x9063, 0x9375, 0x967A, 0x9855, 0x9A13, 0x9E78, 0x5143, 0x539F, 0x53B3, 0x5E7B, 0x5F26, 0x6E1B, 0x6E90, 0x7384, 0x73FE, 0x7D43, 0x8237, 0x8A00, 0x8AFA, 0x9650, 0x4E4E, 0x500B, 0x53E4, 0x547C, 0x56FA, 0x59D1, 0x5B64, 0x5DF1, 0x5EAB, 0x5F27, 0x6238, 0x6545, 0x67AF, 0x6E56, 0x72D0, 0x7CCA, 0x88B4, 0x80A1, 0x80E1, 0x83F0, 0x864E, 0x8A87, 0x8DE8, 0x9237, 0x96C7, 0x9867, 0x9F13, 0x4E94, 0x4E92, 0x4F0D, 0x5348, 0x5449, 0x543E, 0x5A2F, 0x5F8C, 0x5FA1, 0x609F, 0x68A7, 0x6A8E, 0x745A, 0x7881, 0x8A9E, 0x8AA4, 0x8B77, 0x9190, 0x4E5E, 0x9BC9, 0x4EA4, 0x4F7C, 0x4FAF, 0x5019, 0x5016, 0x5149, 0x516C, 0x529F, 0x52B9, 0x52FE, 0x539A, 0x53E3, 0x5411}, { /* category 25 */ 0x540E, 0x5589, 0x5751, 0x57A2, 0x597D, 0x5B54, 0x5B5D, 0x5B8F, 0x5DE5, 0x5DE7, 0x5DF7, 0x5E78, 0x5E83, 0x5E9A, 0x5EB7, 0x5F18, 0x6052, 0x614C, 0x6297, 0x62D8, 0x63A7, 0x653B, 0x6602, 0x6643, 0x66F4, 0x676D, 0x6821, 0x6897, 0x69CB, 0x6C5F, 0x6D2A, 0x6D69, 0x6E2F, 0x6E9D, 0x7532, 0x7687, 0x786C, 0x7A3F, 0x7CE0, 0x7D05, 0x7D18, 0x7D5E, 0x7DB1, 0x8015, 0x8003, 0x80AF, 0x80B1, 0x8154, 0x818F, 0x822A, 0x8352, 0x884C, 0x8861, 0x8B1B, 0x8CA2, 0x8CFC, 0x90CA, 0x9175, 0x9271, 0x783F, 0x92FC, 0x95A4, 0x964D, 0x9805, 0x9999, 0x9AD8, 0x9D3B, 0x525B, 0x52AB, 0x53F7, 0x5408, 0x58D5, 0x62F7, 0x6FE0, 0x8C6A, 0x8F5F, 0x9EB9, 0x514B, 0x523B, 0x544A, 0x56FD, 0x7A40, 0x9177, 0x9D60, 0x9ED2, 0x7344, 0x6F09, 0x8170, 0x7511, 0x5FFD, 0x60DA, 0x9AA8, 0x72DB, 0x8FBC}, { /* category 26 */ 0x6B64, 0x9803, 0x4ECA, 0x56F0, 0x5764, 0x58BE, 0x5A5A, 0x6068, 0x61C7, 0x660F, 0x6606, 0x6839, 0x68B1, 0x6DF7, 0x75D5, 0x7D3A, 0x826E, 0x9B42, 0x4E9B, 0x4F50, 0x53C9, 0x5506, 0x5D6F, 0x5DE6, 0x5DEE, 0x67FB, 0x6C99, 0x7473, 0x7802, 0x8A50, 0x9396, 0x88DF, 0x5750, 0x5EA7, 0x632B, 0x50B5, 0x50AC, 0x518D, 0x6700, 0x54C9, 0x585E, 0x59BB, 0x5BB0, 0x5F69, 0x624D, 0x63A1, 0x683D, 0x6B73, 0x6E08, 0x707D, 0x91C7, 0x7280, 0x7815, 0x7826, 0x796D, 0x658E, 0x7D30, 0x83DC, 0x88C1, 0x8F09, 0x969B, 0x5264, 0x5728, 0x6750, 0x7F6A, 0x8CA1, 0x51B4, 0x5742, 0x962A, 0x583A, 0x698A, 0x80B4, 0x54B2, 0x5D0E, 0x57FC, 0x7895, 0x9DFA, 0x4F5C, 0x524A, 0x548B, 0x643E, 0x6628, 0x6714, 0x67F5, 0x7A84, 0x7B56, 0x7D22, 0x932F, 0x685C, 0x9BAD, 0x7B39, 0x5319, 0x518A, 0x5237}, { /* category 27 */ 0x5BDF, 0x62F6, 0x64AE, 0x64E6, 0x672D, 0x6BBA, 0x85A9, 0x96D1, 0x7690, 0x9BD6, 0x634C, 0x9306, 0x9BAB, 0x76BF, 0x6652, 0x4E09, 0x5098, 0x53C2, 0x5C71, 0x60E8, 0x6492, 0x6563, 0x685F, 0x71E6, 0x73CA, 0x7523, 0x7B97, 0x7E82, 0x8695, 0x8B83, 0x8CDB, 0x9178, 0x9910, 0x65AC, 0x66AB, 0x6B8B, 0x4ED5, 0x4ED4, 0x4F3A, 0x4F7F, 0x523A, 0x53F8, 0x53F2, 0x55E3, 0x56DB, 0x58EB, 0x59CB, 0x59C9, 0x59FF, 0x5B50, 0x5C4D, 0x5E02, 0x5E2B, 0x5FD7, 0x601D, 0x6307, 0x652F, 0x5B5C, 0x65AF, 0x65BD, 0x65E8, 0x679D, 0x6B62, 0x6B7B, 0x6C0F, 0x7345, 0x7949, 0x79C1, 0x7CF8, 0x7D19, 0x7D2B, 0x80A2, 0x8102, 0x81F3, 0x8996, 0x8A5E, 0x8A69, 0x8A66, 0x8A8C, 0x8AEE, 0x8CC7, 0x8CDC, 0x96CC, 0x98FC, 0x6B6F, 0x4E8B, 0x4F3C, 0x4F8D, 0x5150, 0x5B57, 0x5BFA, 0x6148, 0x6301, 0x6642}, { /* category 28 */ 0x6B21, 0x6ECB, 0x6CBB, 0x723E, 0x74BD, 0x75D4, 0x78C1, 0x793A, 0x800C, 0x8033, 0x81EA, 0x8494, 0x8F9E, 0x6C50, 0x9E7F, 0x5F0F, 0x8B58, 0x9D2B, 0x7AFA, 0x8EF8, 0x5B8D, 0x96EB, 0x4E03, 0x53F1, 0x57F7, 0x5931, 0x5AC9, 0x5BA4, 0x6089, 0x6E7F, 0x6F06, 0x75BE, 0x8CEA, 0x5B9F, 0x8500, 0x7BE0, 0x5072, 0x67F4, 0x829D, 0x5C61, 0x854A, 0x7E1E, 0x820E, 0x5199, 0x5C04, 0x6368, 0x8D66, 0x659C, 0x716E, 0x793E, 0x7D17, 0x8005, 0x8B1D, 0x8ECA, 0x906E, 0x86C7, 0x90AA, 0x501F, 0x52FA, 0x5C3A, 0x6753, 0x707C, 0x7235, 0x914C, 0x91C8, 0x932B, 0x82E5, 0x5BC2, 0x5F31, 0x60F9, 0x4E3B, 0x53D6, 0x5B88, 0x624B, 0x6731, 0x6B8A, 0x72E9, 0x73E0, 0x7A2E, 0x816B, 0x8DA3, 0x9152, 0x9996, 0x5112, 0x53D7, 0x546A, 0x5BFF, 0x6388, 0x6A39, 0x7DAC, 0x9700, 0x56DA, 0x53CE, 0x5468}, { /* category 29 */ 0x5B97, 0x5C31, 0x5DDE, 0x4FEE, 0x6101, 0x62FE, 0x6D32, 0x79C0, 0x79CB, 0x7D42, 0x7E4D, 0x7FD2, 0x81ED, 0x821F, 0x8490, 0x8846, 0x8972, 0x8B90, 0x8E74, 0x8F2F, 0x9031, 0x914B, 0x916C, 0x96C6, 0x919C, 0x4EC0, 0x4F4F, 0x5145, 0x5341, 0x5F93, 0x620E, 0x67D4, 0x6C41, 0x6E0B, 0x7363, 0x7E26, 0x91CD, 0x9283, 0x53D4, 0x5919, 0x5BBF, 0x6DD1, 0x795D, 0x7E2E, 0x7C9B, 0x587E, 0x719F, 0x51FA, 0x8853, 0x8FF0, 0x4FCA, 0x5CFB, 0x6625, 0x77AC, 0x7AE3, 0x821C, 0x99FF, 0x51C6, 0x5FAA, 0x65EC, 0x696F, 0x6B89, 0x6DF3, 0x6E96, 0x6F64, 0x76FE, 0x7D14, 0x5DE1, 0x9075, 0x9187, 0x9806, 0x51E6, 0x521D, 0x6240, 0x6691, 0x66D9, 0x6E1A, 0x5EB6, 0x7DD2, 0x7F72, 0x66F8, 0x85AF, 0x85F7, 0x8AF8, 0x52A9, 0x53D9, 0x5973, 0x5E8F, 0x5F90, 0x6055, 0x92E4, 0x9664, 0x50B7, 0x511F}, { /* category 30 */ 0x52DD, 0x5320, 0x5347, 0x53EC, 0x54E8, 0x5546, 0x5531, 0x5617, 0x5968, 0x59BE, 0x5A3C, 0x5BB5, 0x5C06, 0x5C0F, 0x5C11, 0x5C1A, 0x5E84, 0x5E8A, 0x5EE0, 0x5F70, 0x627F, 0x6284, 0x62DB, 0x638C, 0x6377, 0x6607, 0x660C, 0x662D, 0x6676, 0x677E, 0x68A2, 0x6A1F, 0x6A35, 0x6CBC, 0x6D88, 0x6E09, 0x6E58, 0x713C, 0x7126, 0x7167, 0x75C7, 0x7701, 0x785D, 0x7901, 0x7965, 0x79F0, 0x7AE0, 0x7B11, 0x7CA7, 0x7D39, 0x8096, 0x83D6, 0x848B, 0x8549, 0x885D, 0x88F3, 0x8A1F, 0x8A3C, 0x8A54, 0x8A73, 0x8C61, 0x8CDE, 0x91A4, 0x9266, 0x937E, 0x9418, 0x969C, 0x9798, 0x4E0A, 0x4E08, 0x4E1E, 0x4E57, 0x5197, 0x5270, 0x57CE, 0x5834, 0x58CC, 0x5B22, 0x5E38, 0x60C5, 0x64FE, 0x6761, 0x6756, 0x6D44, 0x72B6, 0x7573, 0x7A63, 0x84B8, 0x8B72, 0x91B8, 0x9320, 0x5631, 0x57F4, 0x98FE}, { /* category 31 */ 0x62ED, 0x690D, 0x6B96, 0x71ED, 0x7E54, 0x8077, 0x8272, 0x89E6, 0x98DF, 0x8755, 0x8FB1, 0x5C3B, 0x4F38, 0x4FE1, 0x4FB5, 0x5507, 0x5A20, 0x5BDD, 0x5BE9, 0x5FC3, 0x614E, 0x632F, 0x65B0, 0x664B, 0x68EE, 0x699B, 0x6D78, 0x6DF1, 0x7533, 0x75B9, 0x771F, 0x795E, 0x79E6, 0x7D33, 0x81E3, 0x82AF, 0x85AA, 0x89AA, 0x8A3A, 0x8EAB, 0x8F9B, 0x9032, 0x91DD, 0x9707, 0x4EBA, 0x4EC1, 0x5203, 0x5875, 0x58EC, 0x5C0B, 0x751A, 0x5C3D, 0x814E, 0x8A0A, 0x8FC5, 0x9663, 0x976D, 0x7B25, 0x8ACF, 0x9808, 0x9162, 0x56F3, 0x53A8, 0x9017, 0x5439, 0x5782, 0x5E25, 0x63A8, 0x6C34, 0x708A, 0x7761, 0x7C8B, 0x7FE0, 0x8870, 0x9042, 0x9154, 0x9310, 0x9318, 0x968F, 0x745E, 0x9AC4, 0x5D07, 0x5D69, 0x6570, 0x67A2, 0x8DA8, 0x96DB, 0x636E, 0x6749, 0x6919, 0x83C5, 0x9817, 0x96C0, 0x88FE}, { /* category 32 */ 0x6F84, 0x647A, 0x5BF8, 0x4E16, 0x702C, 0x755D, 0x662F, 0x51C4, 0x5236, 0x52E2, 0x59D3, 0x5F81, 0x6027, 0x6210, 0x653F, 0x6574, 0x661F, 0x6674, 0x68F2, 0x6816, 0x6B63, 0x6E05, 0x7272, 0x751F, 0x76DB, 0x7CBE, 0x8056, 0x58F0, 0x88FD, 0x897F, 0x8AA0, 0x8A93, 0x8ACB, 0x901D, 0x9192, 0x9752, 0x9759, 0x6589, 0x7A0E, 0x8106, 0x96BB, 0x5E2D, 0x60DC, 0x621A, 0x65A5, 0x6614, 0x6790, 0x77F3, 0x7A4D, 0x7C4D, 0x7E3E, 0x810A, 0x8CAC, 0x8D64, 0x8DE1, 0x8E5F, 0x78A9, 0x5207, 0x62D9, 0x63A5, 0x6442, 0x6298, 0x8A2D, 0x7A83, 0x7BC0, 0x8AAC, 0x96EA, 0x7D76, 0x820C, 0x8749, 0x4ED9, 0x5148, 0x5343, 0x5360, 0x5BA3, 0x5C02, 0x5C16, 0x5DDD, 0x6226, 0x6247, 0x64B0, 0x6813, 0x6834, 0x6CC9, 0x6D45, 0x6D17, 0x67D3, 0x6F5C, 0x714E, 0x717D, 0x65CB, 0x7A7F, 0x7BAD, 0x7DDA}, { /* category 33 */ 0x7E4A, 0x7FA8, 0x817A, 0x821B, 0x8239, 0x85A6, 0x8A6E, 0x8CCE, 0x8DF5, 0x9078, 0x9077, 0x92AD, 0x9291, 0x9583, 0x9BAE, 0x524D, 0x5584, 0x6F38, 0x7136, 0x5168, 0x7985, 0x7E55, 0x81B3, 0x7CCE, 0x564C, 0x5851, 0x5CA8, 0x63AA, 0x66FE, 0x66FD, 0x695A, 0x72D9, 0x758F, 0x758E, 0x790E, 0x7956, 0x79DF, 0x7C97, 0x7D20, 0x7D44, 0x8607, 0x8A34, 0x963B, 0x9061, 0x9F20, 0x50E7, 0x5275, 0x53CC, 0x53E2, 0x5009, 0x55AA, 0x58EE, 0x594F, 0x723D, 0x5B8B, 0x5C64, 0x531D, 0x60E3, 0x60F3, 0x635C, 0x6383, 0x633F, 0x63BB, 0x64CD, 0x65E9, 0x66F9, 0x5DE3, 0x69CD, 0x69FD, 0x6F15, 0x71E5, 0x4E89, 0x75E9, 0x76F8, 0x7A93, 0x7CDF, 0x7DCF, 0x7D9C, 0x8061, 0x8349, 0x8358, 0x846C, 0x84BC, 0x85FB, 0x88C5, 0x8D70, 0x9001, 0x906D, 0x9397, 0x971C, 0x9A12, 0x50CF, 0x5897, 0x618E}, { /* category 34 */ 0x81D3, 0x8535, 0x8D08, 0x9020, 0x4FC3, 0x5074, 0x5247, 0x5373, 0x606F, 0x6349, 0x675F, 0x6E2C, 0x8DB3, 0x901F, 0x4FD7, 0x5C5E, 0x8CCA, 0x65CF, 0x7D9A, 0x5352, 0x8896, 0x5176, 0x63C3, 0x5B58, 0x5B6B, 0x5C0A, 0x640D, 0x6751, 0x905C, 0x4ED6, 0x591A, 0x592A, 0x6C70, 0x8A51, 0x553E, 0x5815, 0x59A5, 0x60F0, 0x6253, 0x67C1, 0x8235, 0x6955, 0x9640, 0x99C4, 0x9A28, 0x4F53, 0x5806, 0x5BFE, 0x8010, 0x5CB1, 0x5E2F, 0x5F85, 0x6020, 0x614B, 0x6234, 0x66FF, 0x6CF0, 0x6EDE, 0x80CE, 0x817F, 0x82D4, 0x888B, 0x8CB8, 0x9000, 0x902E, 0x968A, 0x9EDB, 0x9BDB, 0x4EE3, 0x53F0, 0x5927, 0x7B2C, 0x918D, 0x984C, 0x9DF9, 0x6EDD, 0x7027, 0x5353, 0x5544, 0x5B85, 0x6258, 0x629E, 0x62D3, 0x6CA2, 0x6FEF, 0x7422, 0x8A17, 0x9438, 0x6FC1, 0x8AFE, 0x8338, 0x51E7, 0x86F8, 0x53EA}, { /* category 35 */ 0x53E9, 0x4F46, 0x9054, 0x8FB0, 0x596A, 0x8131, 0x5DFD, 0x7AEA, 0x8FBF, 0x68DA, 0x8C37, 0x72F8, 0x9C48, 0x6A3D, 0x8AB0, 0x4E39, 0x5358, 0x5606, 0x5766, 0x62C5, 0x63A2, 0x65E6, 0x6B4E, 0x6DE1, 0x6E5B, 0x70AD, 0x77ED, 0x7AEF, 0x7BAA, 0x7DBB, 0x803D, 0x80C6, 0x86CB, 0x8A95, 0x935B, 0x56E3, 0x58C7, 0x5F3E, 0x65AD, 0x6696, 0x6A80, 0x6BB5, 0x7537, 0x8AC7, 0x5024, 0x77E5, 0x5730, 0x5F1B, 0x6065, 0x667A, 0x6C60, 0x75F4, 0x7A1A, 0x7F6E, 0x81F4, 0x8718, 0x9045, 0x99B3, 0x7BC9, 0x755C, 0x7AF9, 0x7B51, 0x84C4, 0x9010, 0x79E9, 0x7A92, 0x8336, 0x5AE1, 0x7740, 0x4E2D, 0x4EF2, 0x5B99, 0x5FE0, 0x62BD, 0x663C, 0x67F1, 0x6CE8, 0x866B, 0x8877, 0x8A3B, 0x914E, 0x92F3, 0x99D0, 0x6A17, 0x7026, 0x732A, 0x82E7, 0x8457, 0x8CAF, 0x4E01, 0x5146, 0x51CB, 0x558B, 0x5BF5}, { /* category 36 */ 0x5E16, 0x5E33, 0x5E81, 0x5F14, 0x5F35, 0x5F6B, 0x5FB4, 0x61F2, 0x6311, 0x66A2, 0x671D, 0x6F6E, 0x7252, 0x753A, 0x773A, 0x8074, 0x8139, 0x8178, 0x8776, 0x8ABF, 0x8ADC, 0x8D85, 0x8DF3, 0x929A, 0x9577, 0x9802, 0x9CE5, 0x52C5, 0x6357, 0x76F4, 0x6715, 0x6C88, 0x73CD, 0x8CC3, 0x93AE, 0x9673, 0x6D25, 0x589C, 0x690E, 0x69CC, 0x8FFD, 0x939A, 0x75DB, 0x901A, 0x585A, 0x6802, 0x63B4, 0x69FB, 0x4F43, 0x6F2C, 0x67D8, 0x8FBB, 0x8526, 0x7DB4, 0x9354, 0x693F, 0x6F70, 0x576A, 0x58F7, 0x5B2C, 0x7D2C, 0x722A, 0x540A, 0x91E3, 0x9DB4, 0x4EAD, 0x4F4E, 0x505C, 0x5075, 0x5243, 0x8C9E, 0x5448, 0x5824, 0x5B9A, 0x5E1D, 0x5E95, 0x5EAD, 0x5EF7, 0x5F1F, 0x608C, 0x62B5, 0x633A, 0x63D0, 0x68AF, 0x6C40, 0x7887, 0x798E, 0x7A0B, 0x7DE0, 0x8247, 0x8A02, 0x8AE6, 0x8E44, 0x9013}, { /* category 37 */ 0x90B8, 0x912D, 0x91D8, 0x9F0E, 0x6CE5, 0x6458, 0x64E2, 0x6575, 0x6EF4, 0x7684, 0x7B1B, 0x9069, 0x93D1, 0x6EBA, 0x54F2, 0x5FB9, 0x64A4, 0x8F4D, 0x8FED, 0x9244, 0x5178, 0x586B, 0x5929, 0x5C55, 0x5E97, 0x6DFB, 0x7E8F, 0x751C, 0x8CBC, 0x8EE2, 0x985B, 0x70B9, 0x4F1D, 0x6BBF, 0x6FB1, 0x7530, 0x96FB, 0x514E, 0x5410, 0x5835, 0x5857, 0x59AC, 0x5C60, 0x5F92, 0x6597, 0x675C, 0x6E21, 0x767B, 0x83DF, 0x8CED, 0x9014, 0x90FD, 0x934D, 0x7825, 0x783A, 0x52AA, 0x5EA6, 0x571F, 0x5974, 0x6012, 0x5012, 0x515A, 0x51AC, 0x51CD, 0x5200, 0x5510, 0x5854, 0x5858, 0x5957, 0x5B95, 0x5CF6, 0x5D8B, 0x60BC, 0x6295, 0x642D, 0x6771, 0x6843, 0x68BC, 0x68DF, 0x76D7, 0x6DD8, 0x6E6F, 0x6D9B, 0x706F, 0x71C8, 0x5F53, 0x75D8, 0x7977, 0x7B49, 0x7B54, 0x7B52, 0x7CD6, 0x7D71, 0x5230}, { /* category 38 */ 0x8463, 0x8569, 0x85E4, 0x8A0E, 0x8B04, 0x8C46, 0x8E0F, 0x9003, 0x900F, 0x9419, 0x9676, 0x982D, 0x9A30, 0x95D8, 0x50CD, 0x52D5, 0x540C, 0x5802, 0x5C0E, 0x61A7, 0x649E, 0x6D1E, 0x77B3, 0x7AE5, 0x80F4, 0x8404, 0x9053, 0x9285, 0x5CE0, 0x9D07, 0x533F, 0x5F97, 0x5FB3, 0x6D9C, 0x7279, 0x7763, 0x79BF, 0x7BE4, 0x6BD2, 0x72EC, 0x8AAD, 0x6803, 0x6A61, 0x51F8, 0x7A81, 0x6934, 0x5C4A, 0x9CF6, 0x82EB, 0x5BC5, 0x9149, 0x701E, 0x5678, 0x5C6F, 0x60C7, 0x6566, 0x6C8C, 0x8C5A, 0x9041, 0x9813, 0x5451, 0x66C7, 0x920D, 0x5948, 0x90A3, 0x5185, 0x4E4D, 0x51EA, 0x8599, 0x8B0E, 0x7058, 0x637A, 0x934B, 0x6962, 0x99B4, 0x7E04, 0x7577, 0x5357, 0x6960, 0x8EDF, 0x96E3, 0x6C5D, 0x4E8C, 0x5C3C, 0x5F10, 0x8FE9, 0x5302, 0x8CD1, 0x8089, 0x8679, 0x5EFF, 0x65E5, 0x4E73, 0x5165}, { /* category 39 */ 0x5982, 0x5C3F, 0x97EE, 0x4EFB, 0x598A, 0x5FCD, 0x8A8D, 0x6FE1, 0x79B0, 0x7962, 0x5BE7, 0x8471, 0x732B, 0x71B1, 0x5E74, 0x5FF5, 0x637B, 0x649A, 0x71C3, 0x7C98, 0x4E43, 0x5EFC, 0x4E4B, 0x57DC, 0x56A2, 0x60A9, 0x6FC3, 0x7D0D, 0x80FD, 0x8133, 0x81BF, 0x8FB2, 0x8997, 0x86A4, 0x5DF4, 0x628A, 0x64AD, 0x8987, 0x6777, 0x6CE2, 0x6D3E, 0x7436, 0x7834, 0x5A46, 0x7F75, 0x82AD, 0x99AC, 0x4FF3, 0x5EC3, 0x62DD, 0x6392, 0x6557, 0x676F, 0x76C3, 0x724C, 0x80CC, 0x80BA, 0x8F29, 0x914D, 0x500D, 0x57F9, 0x5A92, 0x6885, 0x6973, 0x7164, 0x72FD, 0x8CB7, 0x58F2, 0x8CE0, 0x966A, 0x9019, 0x877F, 0x79E4, 0x77E7, 0x8429, 0x4F2F, 0x5265, 0x535A, 0x62CD, 0x67CF, 0x6CCA, 0x767D, 0x7B94, 0x7C95, 0x8236, 0x8584, 0x8FEB, 0x66DD, 0x6F20, 0x7206, 0x7E1B, 0x83AB, 0x99C1, 0x9EA6}, { /* category 40 */ 0x51FD, 0x7BB1, 0x7872, 0x7BB8, 0x8087, 0x7B48, 0x6AE8, 0x5E61, 0x808C, 0x7551, 0x7560, 0x516B, 0x9262, 0x6E8C, 0x767A, 0x9197, 0x9AEA, 0x4F10, 0x7F70, 0x629C, 0x7B4F, 0x95A5, 0x9CE9, 0x567A, 0x5859, 0x86E4, 0x96BC, 0x4F34, 0x5224, 0x534A, 0x53CD, 0x53DB, 0x5E06, 0x642C, 0x6591, 0x677F, 0x6C3E, 0x6C4E, 0x7248, 0x72AF, 0x73ED, 0x7554, 0x7E41, 0x822C, 0x85E9, 0x8CA9, 0x7BC4, 0x91C6, 0x7169, 0x9812, 0x98EF, 0x633D, 0x6669, 0x756A, 0x76E4, 0x78D0, 0x8543, 0x86EE, 0x532A, 0x5351, 0x5426, 0x5983, 0x5E87, 0x5F7C, 0x60B2, 0x6249, 0x6279, 0x62AB, 0x6590, 0x6BD4, 0x6CCC, 0x75B2, 0x76AE, 0x7891, 0x79D8, 0x7DCB, 0x7F77, 0x80A5, 0x88AB, 0x8AB9, 0x8CBB, 0x907F, 0x975E, 0x98DB, 0x6A0B, 0x7C38, 0x5099, 0x5C3E, 0x5FAE, 0x6787, 0x6BD8, 0x7435, 0x7709, 0x7F8E}, { /* category 41 */ 0x9F3B, 0x67CA, 0x7A17, 0x5339, 0x758B, 0x9AED, 0x5F66, 0x819D, 0x83F1, 0x8098, 0x5F3C, 0x5FC5, 0x7562, 0x7B46, 0x903C, 0x6867, 0x59EB, 0x5A9B, 0x7D10, 0x767E, 0x8B2C, 0x4FF5, 0x5F6A, 0x6A19, 0x6C37, 0x6F02, 0x74E2, 0x7968, 0x8868, 0x8A55, 0x8C79, 0x5EDF, 0x63CF, 0x75C5, 0x79D2, 0x82D7, 0x9328, 0x92F2, 0x849C, 0x86ED, 0x9C2D, 0x54C1, 0x5F6C, 0x658C, 0x6D5C, 0x7015, 0x8CA7, 0x8CD3, 0x983B, 0x654F, 0x74F6, 0x4E0D, 0x4ED8, 0x57E0, 0x592B, 0x5A66, 0x5BCC, 0x51A8, 0x5E03, 0x5E9C, 0x6016, 0x6276, 0x6577, 0x65A7, 0x666E, 0x6D6E, 0x7236, 0x7B26, 0x8150, 0x819A, 0x8299, 0x8B5C, 0x8CA0, 0x8CE6, 0x8D74, 0x961C, 0x9644, 0x4FAE, 0x64AB, 0x6B66, 0x821E, 0x8461, 0x856A, 0x90E8, 0x5C01, 0x6953, 0x98A8, 0x847A, 0x8557, 0x4F0F, 0x526F, 0x5FA9, 0x5E45, 0x670D}, { /* category 42 */ 0x798F, 0x8179, 0x8907, 0x8986, 0x6DF5, 0x5F17, 0x6255, 0x6CB8, 0x4ECF, 0x7269, 0x9B92, 0x5206, 0x543B, 0x5674, 0x58B3, 0x61A4, 0x626E, 0x711A, 0x596E, 0x7C89, 0x7CDE, 0x7D1B, 0x96F0, 0x6587, 0x805E, 0x4E19, 0x4F75, 0x5175, 0x5840, 0x5E63, 0x5E73, 0x5F0A, 0x67C4, 0x4E26, 0x853D, 0x9589, 0x965B, 0x7C73, 0x9801, 0x50FB, 0x58C1, 0x7656, 0x78A7, 0x5225, 0x77A5, 0x8511, 0x7B86, 0x504F, 0x5909, 0x7247, 0x7BC7, 0x7DE8, 0x8FBA, 0x8FD4, 0x904D, 0x4FBF, 0x52C9, 0x5A29, 0x5F01, 0x97AD, 0x4FDD, 0x8217, 0x92EA, 0x5703, 0x6355, 0x6B69, 0x752B, 0x88DC, 0x8F14, 0x7A42, 0x52DF, 0x5893, 0x6155, 0x620A, 0x66AE, 0x6BCD, 0x7C3F, 0x83E9, 0x5023, 0x4FF8, 0x5305, 0x5446, 0x5831, 0x5949, 0x5B9D, 0x5CF0, 0x5CEF, 0x5D29, 0x5E96, 0x62B1, 0x6367, 0x653E, 0x65B9, 0x670B}, { /* category 43 */ 0x6CD5, 0x6CE1, 0x70F9, 0x7832, 0x7E2B, 0x80DE, 0x82B3, 0x840C, 0x84EC, 0x8702, 0x8912, 0x8A2A, 0x8C4A, 0x90A6, 0x92D2, 0x98FD, 0x9CF3, 0x9D6C, 0x4E4F, 0x4EA1, 0x508D, 0x5256, 0x574A, 0x59A8, 0x5E3D, 0x5FD8, 0x5FD9, 0x623F, 0x66B4, 0x671B, 0x67D0, 0x68D2, 0x5192, 0x7D21, 0x80AA, 0x81A8, 0x8B00, 0x8C8C, 0x8CBF, 0x927E, 0x9632, 0x5420, 0x982C, 0x5317, 0x50D5, 0x535C, 0x58A8, 0x64B2, 0x6734, 0x7267, 0x7766, 0x7A46, 0x91E6, 0x52C3, 0x6CA1, 0x6B86, 0x5800, 0x5E4C, 0x5954, 0x672C, 0x7FFB, 0x51E1, 0x76C6, 0x6469, 0x78E8, 0x9B54, 0x9EBB, 0x57CB, 0x59B9, 0x6627, 0x679A, 0x6BCE, 0x54E9, 0x69D9, 0x5E55, 0x819C, 0x6795, 0x9BAA, 0x67FE, 0x9C52, 0x685D, 0x4EA6, 0x4FE3, 0x53C8, 0x62B9, 0x672B, 0x6CAB, 0x8FC4, 0x4FAD, 0x7E6D, 0x9EBF, 0x4E07, 0x6162, 0x6E80}, { /* category 44 */ 0x6F2B, 0x8513, 0x5473, 0x672A, 0x9B45, 0x5DF3, 0x7B95, 0x5CAC, 0x5BC6, 0x871C, 0x6E4A, 0x84D1, 0x7A14, 0x8108, 0x5999, 0x7C8D, 0x6C11, 0x7720, 0x52D9, 0x5922, 0x7121, 0x725F, 0x77DB, 0x9727, 0x9D61, 0x690B, 0x5A7F, 0x5A18, 0x51A5, 0x540D, 0x547D, 0x660E, 0x76DF, 0x8FF7, 0x9298, 0x9CF4, 0x59EA, 0x725D, 0x6EC5, 0x514D, 0x68C9, 0x7DBF, 0x7DEC, 0x9762, 0x9EBA, 0x6478, 0x6A21, 0x8302, 0x5984, 0x5B5F, 0x6BDB, 0x731B, 0x76F2, 0x7DB2, 0x8017, 0x8499, 0x5132, 0x6728, 0x9ED9, 0x76EE, 0x6762, 0x52FF, 0x9905, 0x5C24, 0x623B, 0x7C7E, 0x8CB0, 0x554F, 0x60B6, 0x7D0B, 0x9580, 0x5301, 0x4E5F, 0x51B6, 0x591C, 0x723A, 0x8036, 0x91CE, 0x5F25, 0x77E2, 0x5384, 0x5F79, 0x7D04, 0x85AC, 0x8A33, 0x8E8D, 0x9756, 0x67F3, 0x85AE, 0x9453, 0x6109, 0x6108, 0x6CB9, 0x7652}, { /* category 45 */ 0x8AED, 0x8F38, 0x552F, 0x4F51, 0x512A, 0x52C7, 0x53CB, 0x5BA5, 0x5E7D, 0x60A0, 0x6182, 0x63D6, 0x6709, 0x67DA, 0x6E67, 0x6D8C, 0x7336, 0x7337, 0x7531, 0x7950, 0x88D5, 0x8A98, 0x904A, 0x9091, 0x90F5, 0x96C4, 0x878D, 0x5915, 0x4E88, 0x4F59, 0x4E0E, 0x8A89, 0x8F3F, 0x9810, 0x50AD, 0x5E7C, 0x5996, 0x5BB9, 0x5EB8, 0x63DA, 0x63FA, 0x64C1, 0x66DC, 0x694A, 0x69D8, 0x6D0B, 0x6EB6, 0x7194, 0x7528, 0x7AAF, 0x7F8A, 0x8000, 0x8449, 0x84C9, 0x8981, 0x8B21, 0x8E0A, 0x9065, 0x967D, 0x990A, 0x617E, 0x6291, 0x6B32, 0x6C83, 0x6D74, 0x7FCC, 0x7FFC, 0x6DC0, 0x7F85, 0x87BA, 0x88F8, 0x6765, 0x83B1, 0x983C, 0x96F7, 0x6D1B, 0x7D61, 0x843D, 0x916A, 0x4E71, 0x5375, 0x5D50, 0x6B04, 0x6FEB, 0x85CD, 0x862D, 0x89A7, 0x5229, 0x540F, 0x5C65, 0x674E, 0x68A8, 0x7406, 0x7483}, { /* category 46 */ 0x75E2, 0x88CF, 0x88E1, 0x91CC, 0x96E2, 0x9678, 0x5F8B, 0x7387, 0x7ACB, 0x844E, 0x63A0, 0x7565, 0x5289, 0x6D41, 0x6E9C, 0x7409, 0x7559, 0x786B, 0x7C92, 0x9686, 0x7ADC, 0x9F8D, 0x4FB6, 0x616E, 0x65C5, 0x865C, 0x4E86, 0x4EAE, 0x50DA, 0x4E21, 0x51CC, 0x5BEE, 0x6599, 0x6881, 0x6DBC, 0x731F, 0x7642, 0x77AD, 0x7A1C, 0x7CE7, 0x826F, 0x8AD2, 0x907C, 0x91CF, 0x9675, 0x9818, 0x529B, 0x7DD1, 0x502B, 0x5398, 0x6797, 0x6DCB, 0x71D0, 0x7433, 0x81E8, 0x8F2A, 0x96A3, 0x9C57, 0x9E9F, 0x7460, 0x5841, 0x6D99, 0x7D2F, 0x985E, 0x4EE4, 0x4F36, 0x4F8B, 0x51B7, 0x52B1, 0x5DBA, 0x601C, 0x73B2, 0x793C, 0x82D3, 0x9234, 0x96B7, 0x96F6, 0x970A, 0x9E97, 0x9F62, 0x66A6, 0x6B74, 0x5217, 0x52A3, 0x70C8, 0x88C2, 0x5EC9, 0x604B, 0x6190, 0x6F23, 0x7149, 0x7C3E, 0x7DF4, 0x806F}, { /* category 47 */ 0x84EE, 0x9023, 0x932C, 0x5442, 0x9B6F, 0x6AD3, 0x7089, 0x8CC2, 0x8DEF, 0x9732, 0x52B4, 0x5A41, 0x5ECA, 0x5F04, 0x6717, 0x697C, 0x6994, 0x6D6A, 0x6F0F, 0x7262, 0x72FC, 0x7BED, 0x8001, 0x807E, 0x874B, 0x90CE, 0x516D, 0x9E93, 0x7984, 0x808B, 0x9332, 0x8AD6, 0x502D, 0x548C, 0x8A71, 0x6B6A, 0x8CC4, 0x8107, 0x60D1, 0x67A0, 0x9DF2, 0x4E99, 0x4E98, 0x9C10, 0x8A6B, 0x85C1, 0x8568, 0x6900, 0x6E7E, 0x7897, 0x8155, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 48 */ 0x5F0C, 0x4E10, 0x4E15, 0x4E2A, 0x4E31, 0x4E36, 0x4E3C, 0x4E3F, 0x4E42, 0x4E56, 0x4E58, 0x4E82, 0x4E85, 0x8C6B, 0x4E8A, 0x8212, 0x5F0D, 0x4E8E, 0x4E9E, 0x4E9F, 0x4EA0, 0x4EA2, 0x4EB0, 0x4EB3, 0x4EB6, 0x4ECE, 0x4ECD, 0x4EC4, 0x4EC6, 0x4EC2, 0x4ED7, 0x4EDE, 0x4EED, 0x4EDF, 0x4EF7, 0x4F09, 0x4F5A, 0x4F30, 0x4F5B, 0x4F5D, 0x4F57, 0x4F47, 0x4F76, 0x4F88, 0x4F8F, 0x4F98, 0x4F7B, 0x4F69, 0x4F70, 0x4F91, 0x4F6F, 0x4F86, 0x4F96, 0x5118, 0x4FD4, 0x4FDF, 0x4FCE, 0x4FD8, 0x4FDB, 0x4FD1, 0x4FDA, 0x4FD0, 0x4FE4, 0x4FE5, 0x501A, 0x5028, 0x5014, 0x502A, 0x5025, 0x5005, 0x4F1C, 0x4FF6, 0x5021, 0x5029, 0x502C, 0x4FFE, 0x4FEF, 0x5011, 0x5006, 0x5043, 0x5047, 0x6703, 0x5055, 0x5050, 0x5048, 0x505A, 0x5056, 0x506C, 0x5078, 0x5080, 0x509A, 0x5085, 0x50B4, 0x50B2}, { /* category 49 */ 0x50C9, 0x50CA, 0x50B3, 0x50C2, 0x50D6, 0x50DE, 0x50E5, 0x50ED, 0x50E3, 0x50EE, 0x50F9, 0x50F5, 0x5109, 0x5101, 0x5102, 0x5116, 0x5115, 0x5114, 0x511A, 0x5121, 0x513A, 0x5137, 0x513C, 0x513B, 0x513F, 0x5140, 0x5152, 0x514C, 0x5154, 0x5162, 0x7AF8, 0x5169, 0x516A, 0x516E, 0x5180, 0x5182, 0x56D8, 0x518C, 0x5189, 0x518F, 0x5191, 0x5193, 0x5195, 0x5196, 0x51A4, 0x51A6, 0x51A2, 0x51A9, 0x51AA, 0x51AB, 0x51B3, 0x51B1, 0x51B2, 0x51B0, 0x51B5, 0x51BD, 0x51C5, 0x51C9, 0x51DB, 0x51E0, 0x8655, 0x51E9, 0x51ED, 0x51F0, 0x51F5, 0x51FE, 0x5204, 0x520B, 0x5214, 0x520E, 0x5227, 0x522A, 0x522E, 0x5233, 0x5239, 0x524F, 0x5244, 0x524B, 0x524C, 0x525E, 0x5254, 0x526A, 0x5274, 0x5269, 0x5273, 0x527F, 0x527D, 0x528D, 0x5294, 0x5292, 0x5271, 0x5288, 0x5291, 0x8FA8}, { /* category 50 */ 0x8FA7, 0x52AC, 0x52AD, 0x52BC, 0x52B5, 0x52C1, 0x52CD, 0x52D7, 0x52DE, 0x52E3, 0x52E6, 0x98ED, 0x52E0, 0x52F3, 0x52F5, 0x52F8, 0x52F9, 0x5306, 0x5308, 0x7538, 0x530D, 0x5310, 0x530F, 0x5315, 0x531A, 0x5323, 0x532F, 0x5331, 0x5333, 0x5338, 0x5340, 0x5346, 0x5345, 0x4E17, 0x5349, 0x534D, 0x51D6, 0x535E, 0x5369, 0x536E, 0x5918, 0x537B, 0x5377, 0x5382, 0x5396, 0x53A0, 0x53A6, 0x53A5, 0x53AE, 0x53B0, 0x53B6, 0x53C3, 0x7C12, 0x96D9, 0x53DF, 0x66FC, 0x71EE, 0x53EE, 0x53E8, 0x53ED, 0x53FA, 0x5401, 0x543D, 0x5440, 0x542C, 0x542D, 0x543C, 0x542E, 0x5436, 0x5429, 0x541D, 0x544E, 0x548F, 0x5475, 0x548E, 0x545F, 0x5471, 0x5477, 0x5470, 0x5492, 0x547B, 0x5480, 0x5476, 0x5484, 0x5490, 0x5486, 0x54C7, 0x54A2, 0x54B8, 0x54A5, 0x54AC, 0x54C4, 0x54C8, 0x54A8}, { /* category 51 */ 0x54AB, 0x54C2, 0x54A4, 0x54BE, 0x54BC, 0x54D8, 0x54E5, 0x54E6, 0x550F, 0x5514, 0x54FD, 0x54EE, 0x54ED, 0x54FA, 0x54E2, 0x5539, 0x5540, 0x5563, 0x554C, 0x552E, 0x555C, 0x5545, 0x5556, 0x5557, 0x5538, 0x5533, 0x555D, 0x5599, 0x5580, 0x54AF, 0x558A, 0x559F, 0x557B, 0x557E, 0x5598, 0x559E, 0x55AE, 0x557C, 0x5583, 0x55A9, 0x5587, 0x55A8, 0x55DA, 0x55C5, 0x55DF, 0x55C4, 0x55DC, 0x55E4, 0x55D4, 0x5614, 0x55F7, 0x5616, 0x55FE, 0x55FD, 0x561B, 0x55F9, 0x564E, 0x5650, 0x71DF, 0x5634, 0x5636, 0x5632, 0x5638, 0x566B, 0x5664, 0x562F, 0x566C, 0x566A, 0x5686, 0x5680, 0x568A, 0x56A0, 0x5694, 0x568F, 0x56A5, 0x56AE, 0x56B6, 0x56B4, 0x56C2, 0x56BC, 0x56C1, 0x56C3, 0x56C0, 0x56C8, 0x56CE, 0x56D1, 0x56D3, 0x56D7, 0x56EE, 0x56F9, 0x5700, 0x56FF, 0x5704, 0x5709}, { /* category 52 */ 0x5708, 0x570B, 0x570D, 0x5713, 0x5718, 0x5716, 0x55C7, 0x571C, 0x5726, 0x5737, 0x5738, 0x574E, 0x573B, 0x5740, 0x574F, 0x5769, 0x57C0, 0x5788, 0x5761, 0x577F, 0x5789, 0x5793, 0x57A0, 0x57B3, 0x57A4, 0x57AA, 0x57B0, 0x57C3, 0x57C6, 0x57D4, 0x57D2, 0x57D3, 0x580A, 0x57D6, 0x57E3, 0x580B, 0x5819, 0x581D, 0x5872, 0x5821, 0x5862, 0x584B, 0x5870, 0x6BC0, 0x5852, 0x583D, 0x5879, 0x5885, 0x58B9, 0x589F, 0x58AB, 0x58BA, 0x58DE, 0x58BB, 0x58B8, 0x58AE, 0x58C5, 0x58D3, 0x58D1, 0x58D7, 0x58D9, 0x58D8, 0x58E5, 0x58DC, 0x58E4, 0x58DF, 0x58EF, 0x58FA, 0x58F9, 0x58FB, 0x58FC, 0x58FD, 0x5902, 0x590A, 0x5910, 0x591B, 0x68A6, 0x5925, 0x592C, 0x592D, 0x5932, 0x5938, 0x593E, 0x7AD2, 0x5955, 0x5950, 0x594E, 0x595A, 0x5958, 0x5962, 0x5960, 0x5967, 0x596C, 0x5969}, { /* category 53 */ 0x5978, 0x5981, 0x599D, 0x4F5E, 0x4FAB, 0x59A3, 0x59B2, 0x59C6, 0x59E8, 0x59DC, 0x598D, 0x59D9, 0x59DA, 0x5A25, 0x5A1F, 0x5A11, 0x5A1C, 0x5A09, 0x5A1A, 0x5A40, 0x5A6C, 0x5A49, 0x5A35, 0x5A36, 0x5A62, 0x5A6A, 0x5A9A, 0x5ABC, 0x5ABE, 0x5ACB, 0x5AC2, 0x5ABD, 0x5AE3, 0x5AD7, 0x5AE6, 0x5AE9, 0x5AD6, 0x5AFA, 0x5AFB, 0x5B0C, 0x5B0B, 0x5B16, 0x5B32, 0x5AD0, 0x5B2A, 0x5B36, 0x5B3E, 0x5B43, 0x5B45, 0x5B40, 0x5B51, 0x5B55, 0x5B5A, 0x5B5B, 0x5B65, 0x5B69, 0x5B70, 0x5B73, 0x5B75, 0x5B78, 0x6588, 0x5B7A, 0x5B80, 0x5B83, 0x5BA6, 0x5BB8, 0x5BC3, 0x5BC7, 0x5BC9, 0x5BD4, 0x5BD0, 0x5BE4, 0x5BE6, 0x5BE2, 0x5BDE, 0x5BE5, 0x5BEB, 0x5BF0, 0x5BF6, 0x5BF3, 0x5C05, 0x5C07, 0x5C08, 0x5C0D, 0x5C13, 0x5C20, 0x5C22, 0x5C28, 0x5C38, 0x5C39, 0x5C41, 0x5C46, 0x5C4E, 0x5C53}, { /* category 54 */ 0x5C50, 0x5C4F, 0x5B71, 0x5C6C, 0x5C6E, 0x4E62, 0x5C76, 0x5C79, 0x5C8C, 0x5C91, 0x5C94, 0x599B, 0x5CAB, 0x5CBB, 0x5CB6, 0x5CBC, 0x5CB7, 0x5CC5, 0x5CBE, 0x5CC7, 0x5CD9, 0x5CE9, 0x5CFD, 0x5CFA, 0x5CED, 0x5D8C, 0x5CEA, 0x5D0B, 0x5D15, 0x5D17, 0x5D5C, 0x5D1F, 0x5D1B, 0x5D11, 0x5D14, 0x5D22, 0x5D1A, 0x5D19, 0x5D18, 0x5D4C, 0x5D52, 0x5D4E, 0x5D4B, 0x5D6C, 0x5D73, 0x5D76, 0x5D87, 0x5D84, 0x5D82, 0x5DA2, 0x5D9D, 0x5DAC, 0x5DAE, 0x5DBD, 0x5D90, 0x5DB7, 0x5DBC, 0x5DC9, 0x5DCD, 0x5DD3, 0x5DD2, 0x5DD6, 0x5DDB, 0x5DEB, 0x5DF2, 0x5DF5, 0x5E0B, 0x5E1A, 0x5E19, 0x5E11, 0x5E1B, 0x5E36, 0x5E37, 0x5E44, 0x5E43, 0x5E40, 0x5E4E, 0x5E57, 0x5E54, 0x5E5F, 0x5E62, 0x5E64, 0x5E47, 0x5E75, 0x5E76, 0x5E7A, 0x9EBC, 0x5E7F, 0x5EA0, 0x5EC1, 0x5EC2, 0x5EC8, 0x5ED0, 0x5ECF}, { /* category 55 */ 0x5ED6, 0x5EE3, 0x5EDD, 0x5EDA, 0x5EDB, 0x5EE2, 0x5EE1, 0x5EE8, 0x5EE9, 0x5EEC, 0x5EF1, 0x5EF3, 0x5EF0, 0x5EF4, 0x5EF8, 0x5EFE, 0x5F03, 0x5F09, 0x5F5D, 0x5F5C, 0x5F0B, 0x5F11, 0x5F16, 0x5F29, 0x5F2D, 0x5F38, 0x5F41, 0x5F48, 0x5F4C, 0x5F4E, 0x5F2F, 0x5F51, 0x5F56, 0x5F57, 0x5F59, 0x5F61, 0x5F6D, 0x5F73, 0x5F77, 0x5F83, 0x5F82, 0x5F7F, 0x5F8A, 0x5F88, 0x5F91, 0x5F87, 0x5F9E, 0x5F99, 0x5F98, 0x5FA0, 0x5FA8, 0x5FAD, 0x5FBC, 0x5FD6, 0x5FFB, 0x5FE4, 0x5FF8, 0x5FF1, 0x5FDD, 0x60B3, 0x5FFF, 0x6021, 0x6060, 0x6019, 0x6010, 0x6029, 0x600E, 0x6031, 0x601B, 0x6015, 0x602B, 0x6026, 0x600F, 0x603A, 0x605A, 0x6041, 0x606A, 0x6077, 0x605F, 0x604A, 0x6046, 0x604D, 0x6063, 0x6043, 0x6064, 0x6042, 0x606C, 0x606B, 0x6059, 0x6081, 0x608D, 0x60E7, 0x6083, 0x609A}, { /* category 56 */ 0x6084, 0x609B, 0x6096, 0x6097, 0x6092, 0x60A7, 0x608B, 0x60E1, 0x60B8, 0x60E0, 0x60D3, 0x60B4, 0x5FF0, 0x60BD, 0x60C6, 0x60B5, 0x60D8, 0x614D, 0x6115, 0x6106, 0x60F6, 0x60F7, 0x6100, 0x60F4, 0x60FA, 0x6103, 0x6121, 0x60FB, 0x60F1, 0x610D, 0x610E, 0x6147, 0x613E, 0x6128, 0x6127, 0x614A, 0x613F, 0x613C, 0x612C, 0x6134, 0x613D, 0x6142, 0x6144, 0x6173, 0x6177, 0x6158, 0x6159, 0x615A, 0x616B, 0x6174, 0x616F, 0x6165, 0x6171, 0x615F, 0x615D, 0x6153, 0x6175, 0x6199, 0x6196, 0x6187, 0x61AC, 0x6194, 0x619A, 0x618A, 0x6191, 0x61AB, 0x61AE, 0x61CC, 0x61CA, 0x61C9, 0x61F7, 0x61C8, 0x61C3, 0x61C6, 0x61BA, 0x61CB, 0x7F79, 0x61CD, 0x61E6, 0x61E3, 0x61F6, 0x61FA, 0x61F4, 0x61FF, 0x61FD, 0x61FC, 0x61FE, 0x6200, 0x6208, 0x6209, 0x620D, 0x620C, 0x6214, 0x621B}, { /* category 57 */ 0x621E, 0x6221, 0x622A, 0x622E, 0x6230, 0x6232, 0x6233, 0x6241, 0x624E, 0x625E, 0x6263, 0x625B, 0x6260, 0x6268, 0x627C, 0x6282, 0x6289, 0x627E, 0x6292, 0x6293, 0x6296, 0x62D4, 0x6283, 0x6294, 0x62D7, 0x62D1, 0x62BB, 0x62CF, 0x62FF, 0x62C6, 0x64D4, 0x62C8, 0x62DC, 0x62CC, 0x62CA, 0x62C2, 0x62C7, 0x629B, 0x62C9, 0x630C, 0x62EE, 0x62F1, 0x6327, 0x6302, 0x6308, 0x62EF, 0x62F5, 0x6350, 0x633E, 0x634D, 0x641C, 0x634F, 0x6396, 0x638E, 0x6380, 0x63AB, 0x6376, 0x63A3, 0x638F, 0x6389, 0x639F, 0x63B5, 0x636B, 0x6369, 0x63BE, 0x63E9, 0x63C0, 0x63C6, 0x63E3, 0x63C9, 0x63D2, 0x63F6, 0x63C4, 0x6416, 0x6434, 0x6406, 0x6413, 0x6426, 0x6436, 0x651D, 0x6417, 0x6428, 0x640F, 0x6467, 0x646F, 0x6476, 0x644E, 0x652A, 0x6495, 0x6493, 0x64A5, 0x64A9, 0x6488, 0x64BC}, { /* category 58 */ 0x64DA, 0x64D2, 0x64C5, 0x64C7, 0x64BB, 0x64D8, 0x64C2, 0x64F1, 0x64E7, 0x8209, 0x64E0, 0x64E1, 0x62AC, 0x64E3, 0x64EF, 0x652C, 0x64F6, 0x64F4, 0x64F2, 0x64FA, 0x6500, 0x64FD, 0x6518, 0x651C, 0x6505, 0x6524, 0x6523, 0x652B, 0x6534, 0x6535, 0x6537, 0x6536, 0x6538, 0x754B, 0x6548, 0x6556, 0x6555, 0x654D, 0x6558, 0x655E, 0x655D, 0x6572, 0x6578, 0x6582, 0x6583, 0x8B8A, 0x659B, 0x659F, 0x65AB, 0x65B7, 0x65C3, 0x65C6, 0x65C1, 0x65C4, 0x65CC, 0x65D2, 0x65DB, 0x65D9, 0x65E0, 0x65E1, 0x65F1, 0x6772, 0x660A, 0x6603, 0x65FB, 0x6773, 0x6635, 0x6636, 0x6634, 0x661C, 0x664F, 0x6644, 0x6649, 0x6641, 0x665E, 0x665D, 0x6664, 0x6667, 0x6668, 0x665F, 0x6662, 0x6670, 0x6683, 0x6688, 0x668E, 0x6689, 0x6684, 0x6698, 0x669D, 0x66C1, 0x66B9, 0x66C9, 0x66BE, 0x66BC}, { /* category 59 */ 0x66C4, 0x66B8, 0x66D6, 0x66DA, 0x66E0, 0x663F, 0x66E6, 0x66E9, 0x66F0, 0x66F5, 0x66F7, 0x670F, 0x6716, 0x671E, 0x6726, 0x6727, 0x9738, 0x672E, 0x673F, 0x6736, 0x6741, 0x6738, 0x6737, 0x6746, 0x675E, 0x6760, 0x6759, 0x6763, 0x6764, 0x6789, 0x6770, 0x67A9, 0x677C, 0x676A, 0x678C, 0x678B, 0x67A6, 0x67A1, 0x6785, 0x67B7, 0x67EF, 0x67B4, 0x67EC, 0x67B3, 0x67E9, 0x67B8, 0x67E4, 0x67DE, 0x67DD, 0x67E2, 0x67EE, 0x67B9, 0x67CE, 0x67C6, 0x67E7, 0x6A9C, 0x681E, 0x6846, 0x6829, 0x6840, 0x684D, 0x6832, 0x684E, 0x68B3, 0x682B, 0x6859, 0x6863, 0x6877, 0x687F, 0x689F, 0x688F, 0x68AD, 0x6894, 0x689D, 0x689B, 0x6883, 0x6AAE, 0x68B9, 0x6874, 0x68B5, 0x68A0, 0x68BA, 0x690F, 0x688D, 0x687E, 0x6901, 0x68CA, 0x6908, 0x68D8, 0x6922, 0x6926, 0x68E1, 0x690C, 0x68CD}, { /* category 60 */ 0x68D4, 0x68E7, 0x68D5, 0x6936, 0x6912, 0x6904, 0x68D7, 0x68E3, 0x6925, 0x68F9, 0x68E0, 0x68EF, 0x6928, 0x692A, 0x691A, 0x6923, 0x6921, 0x68C6, 0x6979, 0x6977, 0x695C, 0x6978, 0x696B, 0x6954, 0x697E, 0x696E, 0x6939, 0x6974, 0x693D, 0x6959, 0x6930, 0x6961, 0x695E, 0x695D, 0x6981, 0x696A, 0x69B2, 0x69AE, 0x69D0, 0x69BF, 0x69C1, 0x69D3, 0x69BE, 0x69CE, 0x5BE8, 0x69CA, 0x69DD, 0x69BB, 0x69C3, 0x69A7, 0x6A2E, 0x6991, 0x69A0, 0x699C, 0x6995, 0x69B4, 0x69DE, 0x69E8, 0x6A02, 0x6A1B, 0x69FF, 0x6B0A, 0x69F9, 0x69F2, 0x69E7, 0x6A05, 0x69B1, 0x6A1E, 0x69ED, 0x6A14, 0x69EB, 0x6A0A, 0x6A12, 0x6AC1, 0x6A23, 0x6A13, 0x6A44, 0x6A0C, 0x6A72, 0x6A36, 0x6A78, 0x6A47, 0x6A62, 0x6A59, 0x6A66, 0x6A48, 0x6A38, 0x6A22, 0x6A90, 0x6A8D, 0x6AA0, 0x6A84, 0x6AA2, 0x6AA3}, { /* category 61 */ 0x6A97, 0x8617, 0x6ABB, 0x6AC3, 0x6AC2, 0x6AB8, 0x6AB3, 0x6AAC, 0x6ADE, 0x6AD1, 0x6ADF, 0x6AAA, 0x6ADA, 0x6AEA, 0x6AFB, 0x6B05, 0x8616, 0x6AFA, 0x6B12, 0x6B16, 0x9B31, 0x6B1F, 0x6B38, 0x6B37, 0x76DC, 0x6B39, 0x98EE, 0x6B47, 0x6B43, 0x6B49, 0x6B50, 0x6B59, 0x6B54, 0x6B5B, 0x6B5F, 0x6B61, 0x6B78, 0x6B79, 0x6B7F, 0x6B80, 0x6B84, 0x6B83, 0x6B8D, 0x6B98, 0x6B95, 0x6B9E, 0x6BA4, 0x6BAA, 0x6BAB, 0x6BAF, 0x6BB2, 0x6BB1, 0x6BB3, 0x6BB7, 0x6BBC, 0x6BC6, 0x6BCB, 0x6BD3, 0x6BDF, 0x6BEC, 0x6BEB, 0x6BF3, 0x6BEF, 0x9EBE, 0x6C08, 0x6C13, 0x6C14, 0x6C1B, 0x6C24, 0x6C23, 0x6C5E, 0x6C55, 0x6C62, 0x6C6A, 0x6C82, 0x6C8D, 0x6C9A, 0x6C81, 0x6C9B, 0x6C7E, 0x6C68, 0x6C73, 0x6C92, 0x6C90, 0x6CC4, 0x6CF1, 0x6CD3, 0x6CBD, 0x6CD7, 0x6CC5, 0x6CDD, 0x6CAE, 0x6CB1, 0x6CBE}, { /* category 62 */ 0x6CBA, 0x6CDB, 0x6CEF, 0x6CD9, 0x6CEA, 0x6D1F, 0x884D, 0x6D36, 0x6D2B, 0x6D3D, 0x6D38, 0x6D19, 0x6D35, 0x6D33, 0x6D12, 0x6D0C, 0x6D63, 0x6D93, 0x6D64, 0x6D5A, 0x6D79, 0x6D59, 0x6D8E, 0x6D95, 0x6FE4, 0x6D85, 0x6DF9, 0x6E15, 0x6E0A, 0x6DB5, 0x6DC7, 0x6DE6, 0x6DB8, 0x6DC6, 0x6DEC, 0x6DDE, 0x6DCC, 0x6DE8, 0x6DD2, 0x6DC5, 0x6DFA, 0x6DD9, 0x6DE4, 0x6DD5, 0x6DEA, 0x6DEE, 0x6E2D, 0x6E6E, 0x6E2E, 0x6E19, 0x6E72, 0x6E5F, 0x6E3E, 0x6E23, 0x6E6B, 0x6E2B, 0x6E76, 0x6E4D, 0x6E1F, 0x6E43, 0x6E3A, 0x6E4E, 0x6E24, 0x6EFF, 0x6E1D, 0x6E38, 0x6E82, 0x6EAA, 0x6E98, 0x6EC9, 0x6EB7, 0x6ED3, 0x6EBD, 0x6EAF, 0x6EC4, 0x6EB2, 0x6ED4, 0x6ED5, 0x6E8F, 0x6EA5, 0x6EC2, 0x6E9F, 0x6F41, 0x6F11, 0x704C, 0x6EEC, 0x6EF8, 0x6EFE, 0x6F3F, 0x6EF2, 0x6F31, 0x6EEF, 0x6F32, 0x6ECC}, { /* category 63 */ 0x6F3E, 0x6F13, 0x6EF7, 0x6F86, 0x6F7A, 0x6F78, 0x6F81, 0x6F80, 0x6F6F, 0x6F5B, 0x6FF3, 0x6F6D, 0x6F82, 0x6F7C, 0x6F58, 0x6F8E, 0x6F91, 0x6FC2, 0x6F66, 0x6FB3, 0x6FA3, 0x6FA1, 0x6FA4, 0x6FB9, 0x6FC6, 0x6FAA, 0x6FDF, 0x6FD5, 0x6FEC, 0x6FD4, 0x6FD8, 0x6FF1, 0x6FEE, 0x6FDB, 0x7009, 0x700B, 0x6FFA, 0x7011, 0x7001, 0x700F, 0x6FFE, 0x701B, 0x701A, 0x6F74, 0x701D, 0x7018, 0x701F, 0x7030, 0x703E, 0x7032, 0x7051, 0x7063, 0x7099, 0x7092, 0x70AF, 0x70F1, 0x70AC, 0x70B8, 0x70B3, 0x70AE, 0x70DF, 0x70CB, 0x70DD, 0x70D9, 0x7109, 0x70FD, 0x711C, 0x7119, 0x7165, 0x7155, 0x7188, 0x7166, 0x7162, 0x714C, 0x7156, 0x716C, 0x718F, 0x71FB, 0x7184, 0x7195, 0x71A8, 0x71AC, 0x71D7, 0x71B9, 0x71BE, 0x71D2, 0x71C9, 0x71D4, 0x71CE, 0x71E0, 0x71EC, 0x71E7, 0x71F5, 0x71FC}, { /* category 64 */ 0x71F9, 0x71FF, 0x720D, 0x7210, 0x721B, 0x7228, 0x722D, 0x722C, 0x7230, 0x7232, 0x723B, 0x723C, 0x723F, 0x7240, 0x7246, 0x724B, 0x7258, 0x7274, 0x727E, 0x7282, 0x7281, 0x7287, 0x7292, 0x7296, 0x72A2, 0x72A7, 0x72B9, 0x72B2, 0x72C3, 0x72C6, 0x72C4, 0x72CE, 0x72D2, 0x72E2, 0x72E0, 0x72E1, 0x72F9, 0x72F7, 0x500F, 0x7317, 0x730A, 0x731C, 0x7316, 0x731D, 0x7334, 0x732F, 0x7329, 0x7325, 0x733E, 0x734E, 0x734F, 0x9ED8, 0x7357, 0x736A, 0x7368, 0x7370, 0x7378, 0x7375, 0x737B, 0x737A, 0x73C8, 0x73B3, 0x73CE, 0x73BB, 0x73C0, 0x73E5, 0x73EE, 0x73DE, 0x74A2, 0x7405, 0x746F, 0x7425, 0x73F8, 0x7432, 0x743A, 0x7455, 0x743F, 0x745F, 0x7459, 0x7441, 0x745C, 0x7469, 0x7470, 0x7463, 0x746A, 0x7476, 0x747E, 0x748B, 0x749E, 0x74A7, 0x74CA, 0x74CF, 0x74D4, 0x73F1}, { /* category 65 */ 0x74E0, 0x74E3, 0x74E7, 0x74E9, 0x74EE, 0x74F2, 0x74F0, 0x74F1, 0x74F8, 0x74F7, 0x7504, 0x7503, 0x7505, 0x750C, 0x750E, 0x750D, 0x7515, 0x7513, 0x751E, 0x7526, 0x752C, 0x753C, 0x7544, 0x754D, 0x754A, 0x7549, 0x755B, 0x7546, 0x755A, 0x7569, 0x7564, 0x7567, 0x756B, 0x756D, 0x7578, 0x7576, 0x7586, 0x7587, 0x7574, 0x758A, 0x7589, 0x7582, 0x7594, 0x759A, 0x759D, 0x75A5, 0x75A3, 0x75C2, 0x75B3, 0x75C3, 0x75B5, 0x75BD, 0x75B8, 0x75BC, 0x75B1, 0x75CD, 0x75CA, 0x75D2, 0x75D9, 0x75E3, 0x75DE, 0x75FE, 0x75FF, 0x75FC, 0x7601, 0x75F0, 0x75FA, 0x75F2, 0x75F3, 0x760B, 0x760D, 0x7609, 0x761F, 0x7627, 0x7620, 0x7621, 0x7622, 0x7624, 0x7634, 0x7630, 0x763B, 0x7647, 0x7648, 0x7646, 0x765C, 0x7658, 0x7661, 0x7662, 0x7668, 0x7669, 0x766A, 0x7667, 0x766C, 0x7670}, { /* category 66 */ 0x7672, 0x7676, 0x7678, 0x767C, 0x7680, 0x7683, 0x7688, 0x768B, 0x768E, 0x7696, 0x7693, 0x7699, 0x769A, 0x76B0, 0x76B4, 0x76B8, 0x76B9, 0x76BA, 0x76C2, 0x76CD, 0x76D6, 0x76D2, 0x76DE, 0x76E1, 0x76E5, 0x76E7, 0x76EA, 0x862F, 0x76FB, 0x7708, 0x7707, 0x7704, 0x7729, 0x7724, 0x771E, 0x7725, 0x7726, 0x771B, 0x7737, 0x7738, 0x7747, 0x775A, 0x7768, 0x776B, 0x775B, 0x7765, 0x777F, 0x777E, 0x7779, 0x778E, 0x778B, 0x7791, 0x77A0, 0x779E, 0x77B0, 0x77B6, 0x77B9, 0x77BF, 0x77BC, 0x77BD, 0x77BB, 0x77C7, 0x77CD, 0x77D7, 0x77DA, 0x77DC, 0x77E3, 0x77EE, 0x77FC, 0x780C, 0x7812, 0x7926, 0x7820, 0x792A, 0x7845, 0x788E, 0x7874, 0x7886, 0x787C, 0x789A, 0x788C, 0x78A3, 0x78B5, 0x78AA, 0x78AF, 0x78D1, 0x78C6, 0x78CB, 0x78D4, 0x78BE, 0x78BC, 0x78C5, 0x78CA, 0x78EC}, { /* category 67 */ 0x78E7, 0x78DA, 0x78FD, 0x78F4, 0x7907, 0x7912, 0x7911, 0x7919, 0x792C, 0x792B, 0x7940, 0x7960, 0x7957, 0x795F, 0x795A, 0x7955, 0x7953, 0x797A, 0x797F, 0x798A, 0x799D, 0x79A7, 0x9F4B, 0x79AA, 0x79AE, 0x79B3, 0x79B9, 0x79BA, 0x79C9, 0x79D5, 0x79E7, 0x79EC, 0x79E1, 0x79E3, 0x7A08, 0x7A0D, 0x7A18, 0x7A19, 0x7A20, 0x7A1F, 0x7980, 0x7A31, 0x7A3B, 0x7A3E, 0x7A37, 0x7A43, 0x7A57, 0x7A49, 0x7A61, 0x7A62, 0x7A69, 0x9F9D, 0x7A70, 0x7A79, 0x7A7D, 0x7A88, 0x7A97, 0x7A95, 0x7A98, 0x7A96, 0x7AA9, 0x7AC8, 0x7AB0, 0x7AB6, 0x7AC5, 0x7AC4, 0x7ABF, 0x9083, 0x7AC7, 0x7ACA, 0x7ACD, 0x7ACF, 0x7AD5, 0x7AD3, 0x7AD9, 0x7ADA, 0x7ADD, 0x7AE1, 0x7AE2, 0x7AE6, 0x7AED, 0x7AF0, 0x7B02, 0x7B0F, 0x7B0A, 0x7B06, 0x7B33, 0x7B18, 0x7B19, 0x7B1E, 0x7B35, 0x7B28, 0x7B36, 0x7B50}, { /* category 68 */ 0x7B7A, 0x7B04, 0x7B4D, 0x7B0B, 0x7B4C, 0x7B45, 0x7B75, 0x7B65, 0x7B74, 0x7B67, 0x7B70, 0x7B71, 0x7B6C, 0x7B6E, 0x7B9D, 0x7B98, 0x7B9F, 0x7B8D, 0x7B9C, 0x7B9A, 0x7B8B, 0x7B92, 0x7B8F, 0x7B5D, 0x7B99, 0x7BCB, 0x7BC1, 0x7BCC, 0x7BCF, 0x7BB4, 0x7BC6, 0x7BDD, 0x7BE9, 0x7C11, 0x7C14, 0x7BE6, 0x7BE5, 0x7C60, 0x7C00, 0x7C07, 0x7C13, 0x7BF3, 0x7BF7, 0x7C17, 0x7C0D, 0x7BF6, 0x7C23, 0x7C27, 0x7C2A, 0x7C1F, 0x7C37, 0x7C2B, 0x7C3D, 0x7C4C, 0x7C43, 0x7C54, 0x7C4F, 0x7C40, 0x7C50, 0x7C58, 0x7C5F, 0x7C64, 0x7C56, 0x7C65, 0x7C6C, 0x7C75, 0x7C83, 0x7C90, 0x7CA4, 0x7CAD, 0x7CA2, 0x7CAB, 0x7CA1, 0x7CA8, 0x7CB3, 0x7CB2, 0x7CB1, 0x7CAE, 0x7CB9, 0x7CBD, 0x7CC0, 0x7CC5, 0x7CC2, 0x7CD8, 0x7CD2, 0x7CDC, 0x7CE2, 0x9B3B, 0x7CEF, 0x7CF2, 0x7CF4, 0x7CF6, 0x7CFA, 0x7D06}, { /* category 69 */ 0x7D02, 0x7D1C, 0x7D15, 0x7D0A, 0x7D45, 0x7D4B, 0x7D2E, 0x7D32, 0x7D3F, 0x7D35, 0x7D46, 0x7D73, 0x7D56, 0x7D4E, 0x7D72, 0x7D68, 0x7D6E, 0x7D4F, 0x7D63, 0x7D93, 0x7D89, 0x7D5B, 0x7D8F, 0x7D7D, 0x7D9B, 0x7DBA, 0x7DAE, 0x7DA3, 0x7DB5, 0x7DC7, 0x7DBD, 0x7DAB, 0x7E3D, 0x7DA2, 0x7DAF, 0x7DDC, 0x7DB8, 0x7D9F, 0x7DB0, 0x7DD8, 0x7DDD, 0x7DE4, 0x7DDE, 0x7DFB, 0x7DF2, 0x7DE1, 0x7E05, 0x7E0A, 0x7E23, 0x7E21, 0x7E12, 0x7E31, 0x7E1F, 0x7E09, 0x7E0B, 0x7E22, 0x7E46, 0x7E66, 0x7E3B, 0x7E35, 0x7E39, 0x7E43, 0x7E37, 0x7E32, 0x7E3A, 0x7E67, 0x7E5D, 0x7E56, 0x7E5E, 0x7E59, 0x7E5A, 0x7E79, 0x7E6A, 0x7E69, 0x7E7C, 0x7E7B, 0x7E83, 0x7DD5, 0x7E7D, 0x8FAE, 0x7E7F, 0x7E88, 0x7E89, 0x7E8C, 0x7E92, 0x7E90, 0x7E93, 0x7E94, 0x7E96, 0x7E8E, 0x7E9B, 0x7E9C, 0x7F38, 0x7F3A}, { /* category 70 */ 0x7F45, 0x7F4C, 0x7F4D, 0x7F4E, 0x7F50, 0x7F51, 0x7F55, 0x7F54, 0x7F58, 0x7F5F, 0x7F60, 0x7F68, 0x7F69, 0x7F67, 0x7F78, 0x7F82, 0x7F86, 0x7F83, 0x7F88, 0x7F87, 0x7F8C, 0x7F94, 0x7F9E, 0x7F9D, 0x7F9A, 0x7FA3, 0x7FAF, 0x7FB2, 0x7FB9, 0x7FAE, 0x7FB6, 0x7FB8, 0x8B71, 0x7FC5, 0x7FC6, 0x7FCA, 0x7FD5, 0x7FD4, 0x7FE1, 0x7FE6, 0x7FE9, 0x7FF3, 0x7FF9, 0x98DC, 0x8006, 0x8004, 0x800B, 0x8012, 0x8018, 0x8019, 0x801C, 0x8021, 0x8028, 0x803F, 0x803B, 0x804A, 0x8046, 0x8052, 0x8058, 0x805A, 0x805F, 0x8062, 0x8068, 0x8073, 0x8072, 0x8070, 0x8076, 0x8079, 0x807D, 0x807F, 0x8084, 0x8086, 0x8085, 0x809B, 0x8093, 0x809A, 0x80AD, 0x5190, 0x80AC, 0x80DB, 0x80E5, 0x80D9, 0x80DD, 0x80C4, 0x80DA, 0x80D6, 0x8109, 0x80EF, 0x80F1, 0x811B, 0x8129, 0x8123, 0x812F, 0x814B}, { /* category 71 */ 0x968B, 0x8146, 0x813E, 0x8153, 0x8151, 0x80FC, 0x8171, 0x816E, 0x8165, 0x8166, 0x8174, 0x8183, 0x8188, 0x818A, 0x8180, 0x8182, 0x81A0, 0x8195, 0x81A4, 0x81A3, 0x815F, 0x8193, 0x81A9, 0x81B0, 0x81B5, 0x81BE, 0x81B8, 0x81BD, 0x81C0, 0x81C2, 0x81BA, 0x81C9, 0x81CD, 0x81D1, 0x81D9, 0x81D8, 0x81C8, 0x81DA, 0x81DF, 0x81E0, 0x81E7, 0x81FA, 0x81FB, 0x81FE, 0x8201, 0x8202, 0x8205, 0x8207, 0x820A, 0x820D, 0x8210, 0x8216, 0x8229, 0x822B, 0x8238, 0x8233, 0x8240, 0x8259, 0x8258, 0x825D, 0x825A, 0x825F, 0x8264, 0x8262, 0x8268, 0x826A, 0x826B, 0x822E, 0x8271, 0x8277, 0x8278, 0x827E, 0x828D, 0x8292, 0x82AB, 0x829F, 0x82BB, 0x82AC, 0x82E1, 0x82E3, 0x82DF, 0x82D2, 0x82F4, 0x82F3, 0x82FA, 0x8393, 0x8303, 0x82FB, 0x82F9, 0x82DE, 0x8306, 0x82DC, 0x8309, 0x82D9}, { /* category 72 */ 0x8335, 0x8334, 0x8316, 0x8332, 0x8331, 0x8340, 0x8339, 0x8350, 0x8345, 0x832F, 0x832B, 0x8317, 0x8318, 0x8385, 0x839A, 0x83AA, 0x839F, 0x83A2, 0x8396, 0x8323, 0x838E, 0x8387, 0x838A, 0x837C, 0x83B5, 0x8373, 0x8375, 0x83A0, 0x8389, 0x83A8, 0x83F4, 0x8413, 0x83EB, 0x83CE, 0x83FD, 0x8403, 0x83D8, 0x840B, 0x83C1, 0x83F7, 0x8407, 0x83E0, 0x83F2, 0x840D, 0x8422, 0x8420, 0x83BD, 0x8438, 0x8506, 0x83FB, 0x846D, 0x842A, 0x843C, 0x855A, 0x8484, 0x8477, 0x846B, 0x84AD, 0x846E, 0x8482, 0x8469, 0x8446, 0x842C, 0x846F, 0x8479, 0x8435, 0x84CA, 0x8462, 0x84B9, 0x84BF, 0x849F, 0x84D9, 0x84CD, 0x84BB, 0x84DA, 0x84D0, 0x84C1, 0x84C6, 0x84D6, 0x84A1, 0x8521, 0x84FF, 0x84F4, 0x8517, 0x8518, 0x852C, 0x851F, 0x8515, 0x8514, 0x84FC, 0x8540, 0x8563, 0x8558, 0x8548}, { /* category 73 */ 0x8541, 0x8602, 0x854B, 0x8555, 0x8580, 0x85A4, 0x8588, 0x8591, 0x858A, 0x85A8, 0x856D, 0x8594, 0x859B, 0x85EA, 0x8587, 0x859C, 0x8577, 0x857E, 0x8590, 0x85C9, 0x85BA, 0x85CF, 0x85B9, 0x85D0, 0x85D5, 0x85DD, 0x85E5, 0x85DC, 0x85F9, 0x860A, 0x8613, 0x860B, 0x85FE, 0x85FA, 0x8606, 0x8622, 0x861A, 0x8630, 0x863F, 0x864D, 0x4E55, 0x8654, 0x865F, 0x8667, 0x8671, 0x8693, 0x86A3, 0x86A9, 0x86AA, 0x868B, 0x868C, 0x86B6, 0x86AF, 0x86C4, 0x86C6, 0x86B0, 0x86C9, 0x8823, 0x86AB, 0x86D4, 0x86DE, 0x86E9, 0x86EC, 0x86DF, 0x86DB, 0x86EF, 0x8712, 0x8706, 0x8708, 0x8700, 0x8703, 0x86FB, 0x8711, 0x8709, 0x870D, 0x86F9, 0x870A, 0x8734, 0x873F, 0x8737, 0x873B, 0x8725, 0x8729, 0x871A, 0x8760, 0x875F, 0x8778, 0x874C, 0x874E, 0x8774, 0x8757, 0x8768, 0x876E, 0x8759}, { /* category 74 */ 0x8753, 0x8763, 0x876A, 0x8805, 0x87A2, 0x879F, 0x8782, 0x87AF, 0x87CB, 0x87BD, 0x87C0, 0x87D0, 0x96D6, 0x87AB, 0x87C4, 0x87B3, 0x87C7, 0x87C6, 0x87BB, 0x87EF, 0x87F2, 0x87E0, 0x880F, 0x880D, 0x87FE, 0x87F6, 0x87F7, 0x880E, 0x87D2, 0x8811, 0x8816, 0x8815, 0x8822, 0x8821, 0x8831, 0x8836, 0x8839, 0x8827, 0x883B, 0x8844, 0x8842, 0x8852, 0x8859, 0x885E, 0x8862, 0x886B, 0x8881, 0x887E, 0x889E, 0x8875, 0x887D, 0x88B5, 0x8872, 0x8882, 0x8897, 0x8892, 0x88AE, 0x8899, 0x88A2, 0x888D, 0x88A4, 0x88B0, 0x88BF, 0x88B1, 0x88C3, 0x88C4, 0x88D4, 0x88D8, 0x88D9, 0x88DD, 0x88F9, 0x8902, 0x88FC, 0x88F4, 0x88E8, 0x88F2, 0x8904, 0x890C, 0x890A, 0x8913, 0x8943, 0x891E, 0x8925, 0x892A, 0x892B, 0x8941, 0x8944, 0x893B, 0x8936, 0x8938, 0x894C, 0x891D, 0x8960, 0x895E}, { /* category 75 */ 0x8966, 0x8964, 0x896D, 0x896A, 0x896F, 0x8974, 0x8977, 0x897E, 0x8983, 0x8988, 0x898A, 0x8993, 0x8998, 0x89A1, 0x89A9, 0x89A6, 0x89AC, 0x89AF, 0x89B2, 0x89BA, 0x89BD, 0x89BF, 0x89C0, 0x89DA, 0x89DC, 0x89DD, 0x89E7, 0x89F4, 0x89F8, 0x8A03, 0x8A16, 0x8A10, 0x8A0C, 0x8A1B, 0x8A1D, 0x8A25, 0x8A36, 0x8A41, 0x8A5B, 0x8A52, 0x8A46, 0x8A48, 0x8A7C, 0x8A6D, 0x8A6C, 0x8A62, 0x8A85, 0x8A82, 0x8A84, 0x8AA8, 0x8AA1, 0x8A91, 0x8AA5, 0x8AA6, 0x8A9A, 0x8AA3, 0x8AC4, 0x8ACD, 0x8AC2, 0x8ADA, 0x8AEB, 0x8AF3, 0x8AE7, 0x8AE4, 0x8AF1, 0x8B14, 0x8AE0, 0x8AE2, 0x8AF7, 0x8ADE, 0x8ADB, 0x8B0C, 0x8B07, 0x8B1A, 0x8AE1, 0x8B16, 0x8B10, 0x8B17, 0x8B20, 0x8B33, 0x97AB, 0x8B26, 0x8B2B, 0x8B3E, 0x8B28, 0x8B41, 0x8B4C, 0x8B4F, 0x8B4E, 0x8B49, 0x8B56, 0x8B5B, 0x8B5A, 0x8B6B}, { /* category 76 */ 0x8B5F, 0x8B6C, 0x8B6F, 0x8B74, 0x8B7D, 0x8B80, 0x8B8C, 0x8B8E, 0x8B92, 0x8B93, 0x8B96, 0x8B99, 0x8B9A, 0x8C3A, 0x8C41, 0x8C3F, 0x8C48, 0x8C4C, 0x8C4E, 0x8C50, 0x8C55, 0x8C62, 0x8C6C, 0x8C78, 0x8C7A, 0x8C82, 0x8C89, 0x8C85, 0x8C8A, 0x8C8D, 0x8C8E, 0x8C94, 0x8C7C, 0x8C98, 0x621D, 0x8CAD, 0x8CAA, 0x8CBD, 0x8CB2, 0x8CB3, 0x8CAE, 0x8CB6, 0x8CC8, 0x8CC1, 0x8CE4, 0x8CE3, 0x8CDA, 0x8CFD, 0x8CFA, 0x8CFB, 0x8D04, 0x8D05, 0x8D0A, 0x8D07, 0x8D0F, 0x8D0D, 0x8D10, 0x9F4E, 0x8D13, 0x8CCD, 0x8D14, 0x8D16, 0x8D67, 0x8D6D, 0x8D71, 0x8D73, 0x8D81, 0x8D99, 0x8DC2, 0x8DBE, 0x8DBA, 0x8DCF, 0x8DDA, 0x8DD6, 0x8DCC, 0x8DDB, 0x8DCB, 0x8DEA, 0x8DEB, 0x8DDF, 0x8DE3, 0x8DFC, 0x8E08, 0x8E09, 0x8DFF, 0x8E1D, 0x8E1E, 0x8E10, 0x8E1F, 0x8E42, 0x8E35, 0x8E30, 0x8E34, 0x8E4A}, { /* category 77 */ 0x8E47, 0x8E49, 0x8E4C, 0x8E50, 0x8E48, 0x8E59, 0x8E64, 0x8E60, 0x8E2A, 0x8E63, 0x8E55, 0x8E76, 0x8E72, 0x8E7C, 0x8E81, 0x8E87, 0x8E85, 0x8E84, 0x8E8B, 0x8E8A, 0x8E93, 0x8E91, 0x8E94, 0x8E99, 0x8EAA, 0x8EA1, 0x8EAC, 0x8EB0, 0x8EC6, 0x8EB1, 0x8EBE, 0x8EC5, 0x8EC8, 0x8ECB, 0x8EDB, 0x8EE3, 0x8EFC, 0x8EFB, 0x8EEB, 0x8EFE, 0x8F0A, 0x8F05, 0x8F15, 0x8F12, 0x8F19, 0x8F13, 0x8F1C, 0x8F1F, 0x8F1B, 0x8F0C, 0x8F26, 0x8F33, 0x8F3B, 0x8F39, 0x8F45, 0x8F42, 0x8F3E, 0x8F4C, 0x8F49, 0x8F46, 0x8F4E, 0x8F57, 0x8F5C, 0x8F62, 0x8F63, 0x8F64, 0x8F9C, 0x8F9F, 0x8FA3, 0x8FAD, 0x8FAF, 0x8FB7, 0x8FDA, 0x8FE5, 0x8FE2, 0x8FEA, 0x8FEF, 0x9087, 0x8FF4, 0x9005, 0x8FF9, 0x8FFA, 0x9011, 0x9015, 0x9021, 0x900D, 0x901E, 0x9016, 0x900B, 0x9027, 0x9036, 0x9035, 0x9039, 0x8FF8}, { /* category 78 */ 0x904F, 0x9050, 0x9051, 0x9052, 0x900E, 0x9049, 0x903E, 0x9056, 0x9058, 0x905E, 0x9068, 0x906F, 0x9076, 0x96A8, 0x9072, 0x9082, 0x907D, 0x9081, 0x9080, 0x908A, 0x9089, 0x908F, 0x90A8, 0x90AF, 0x90B1, 0x90B5, 0x90E2, 0x90E4, 0x6248, 0x90DB, 0x9102, 0x9112, 0x9119, 0x9132, 0x9130, 0x914A, 0x9156, 0x9158, 0x9163, 0x9165, 0x9169, 0x9173, 0x9172, 0x918B, 0x9189, 0x9182, 0x91A2, 0x91AB, 0x91AF, 0x91AA, 0x91B5, 0x91B4, 0x91BA, 0x91C0, 0x91C1, 0x91C9, 0x91CB, 0x91D0, 0x91D6, 0x91DF, 0x91E1, 0x91DB, 0x91FC, 0x91F5, 0x91F6, 0x921E, 0x91FF, 0x9214, 0x922C, 0x9215, 0x9211, 0x925E, 0x9257, 0x9245, 0x9249, 0x9264, 0x9248, 0x9295, 0x923F, 0x924B, 0x9250, 0x929C, 0x9296, 0x9293, 0x929B, 0x925A, 0x92CF, 0x92B9, 0x92B7, 0x92E9, 0x930F, 0x92FA, 0x9344, 0x932E}, { /* category 79 */ 0x9319, 0x9322, 0x931A, 0x9323, 0x933A, 0x9335, 0x933B, 0x935C, 0x9360, 0x937C, 0x936E, 0x9356, 0x93B0, 0x93AC, 0x93AD, 0x9394, 0x93B9, 0x93D6, 0x93D7, 0x93E8, 0x93E5, 0x93D8, 0x93C3, 0x93DD, 0x93D0, 0x93C8, 0x93E4, 0x941A, 0x9414, 0x9413, 0x9403, 0x9407, 0x9410, 0x9436, 0x942B, 0x9435, 0x9421, 0x943A, 0x9441, 0x9452, 0x9444, 0x945B, 0x9460, 0x9462, 0x945E, 0x946A, 0x9229, 0x9470, 0x9475, 0x9477, 0x947D, 0x945A, 0x947C, 0x947E, 0x9481, 0x947F, 0x9582, 0x9587, 0x958A, 0x9594, 0x9596, 0x9598, 0x9599, 0x95A0, 0x95A8, 0x95A7, 0x95AD, 0x95BC, 0x95BB, 0x95B9, 0x95BE, 0x95CA, 0x6FF6, 0x95C3, 0x95CD, 0x95CC, 0x95D5, 0x95D4, 0x95D6, 0x95DC, 0x95E1, 0x95E5, 0x95E2, 0x9621, 0x9628, 0x962E, 0x962F, 0x9642, 0x964C, 0x964F, 0x964B, 0x9677, 0x965C, 0x965E}, { /* category 80 */ 0x965D, 0x965F, 0x9666, 0x9672, 0x966C, 0x968D, 0x9698, 0x9695, 0x9697, 0x96AA, 0x96A7, 0x96B1, 0x96B2, 0x96B0, 0x96B4, 0x96B6, 0x96B8, 0x96B9, 0x96CE, 0x96CB, 0x96C9, 0x96CD, 0x894D, 0x96DC, 0x970D, 0x96D5, 0x96F9, 0x9704, 0x9706, 0x9708, 0x9713, 0x970E, 0x9711, 0x970F, 0x9716, 0x9719, 0x9724, 0x972A, 0x9730, 0x9739, 0x973D, 0x973E, 0x9744, 0x9746, 0x9748, 0x9742, 0x9749, 0x975C, 0x9760, 0x9764, 0x9766, 0x9768, 0x52D2, 0x976B, 0x9771, 0x9779, 0x9785, 0x977C, 0x9781, 0x977A, 0x9786, 0x978B, 0x978F, 0x9790, 0x979C, 0x97A8, 0x97A6, 0x97A3, 0x97B3, 0x97B4, 0x97C3, 0x97C6, 0x97C8, 0x97CB, 0x97DC, 0x97ED, 0x9F4F, 0x97F2, 0x7ADF, 0x97F6, 0x97F5, 0x980F, 0x980C, 0x9838, 0x9824, 0x9821, 0x9837, 0x983D, 0x9846, 0x984F, 0x984B, 0x986B, 0x986F, 0x9870}, { /* category 81 */ 0x9871, 0x9874, 0x9873, 0x98AA, 0x98AF, 0x98B1, 0x98B6, 0x98C4, 0x98C3, 0x98C6, 0x98E9, 0x98EB, 0x9903, 0x9909, 0x9912, 0x9914, 0x9918, 0x9921, 0x991D, 0x991E, 0x9924, 0x9920, 0x992C, 0x992E, 0x993D, 0x993E, 0x9942, 0x9949, 0x9945, 0x9950, 0x994B, 0x9951, 0x9952, 0x994C, 0x9955, 0x9997, 0x9998, 0x99A5, 0x99AD, 0x99AE, 0x99BC, 0x99DF, 0x99DB, 0x99DD, 0x99D8, 0x99D1, 0x99ED, 0x99EE, 0x99F1, 0x99F2, 0x99FB, 0x99F8, 0x9A01, 0x9A0F, 0x9A05, 0x99E2, 0x9A19, 0x9A2B, 0x9A37, 0x9A45, 0x9A42, 0x9A40, 0x9A43, 0x9A3E, 0x9A55, 0x9A4D, 0x9A5B, 0x9A57, 0x9A5F, 0x9A62, 0x9A65, 0x9A64, 0x9A69, 0x9A6B, 0x9A6A, 0x9AAD, 0x9AB0, 0x9ABC, 0x9AC0, 0x9ACF, 0x9AD1, 0x9AD3, 0x9AD4, 0x9ADE, 0x9ADF, 0x9AE2, 0x9AE3, 0x9AE6, 0x9AEF, 0x9AEB, 0x9AEE, 0x9AF4, 0x9AF1, 0x9AF7}, { /* category 82 */ 0x9AFB, 0x9B06, 0x9B18, 0x9B1A, 0x9B1F, 0x9B22, 0x9B23, 0x9B25, 0x9B27, 0x9B28, 0x9B29, 0x9B2A, 0x9B2E, 0x9B2F, 0x9B32, 0x9B44, 0x9B43, 0x9B4F, 0x9B4D, 0x9B4E, 0x9B51, 0x9B58, 0x9B74, 0x9B93, 0x9B83, 0x9B91, 0x9B96, 0x9B97, 0x9B9F, 0x9BA0, 0x9BA8, 0x9BB4, 0x9BC0, 0x9BCA, 0x9BB9, 0x9BC6, 0x9BCF, 0x9BD1, 0x9BD2, 0x9BE3, 0x9BE2, 0x9BE4, 0x9BD4, 0x9BE1, 0x9C3A, 0x9BF2, 0x9BF1, 0x9BF0, 0x9C15, 0x9C14, 0x9C09, 0x9C13, 0x9C0C, 0x9C06, 0x9C08, 0x9C12, 0x9C0A, 0x9C04, 0x9C2E, 0x9C1B, 0x9C25, 0x9C24, 0x9C21, 0x9C30, 0x9C47, 0x9C32, 0x9C46, 0x9C3E, 0x9C5A, 0x9C60, 0x9C67, 0x9C76, 0x9C78, 0x9CE7, 0x9CEC, 0x9CF0, 0x9D09, 0x9D08, 0x9CEB, 0x9D03, 0x9D06, 0x9D2A, 0x9D26, 0x9DAF, 0x9D23, 0x9D1F, 0x9D44, 0x9D15, 0x9D12, 0x9D41, 0x9D3F, 0x9D3E, 0x9D46, 0x9D48}, { /* category 83 */ 0x9D5D, 0x9D5E, 0x9D64, 0x9D51, 0x9D50, 0x9D59, 0x9D72, 0x9D89, 0x9D87, 0x9DAB, 0x9D6F, 0x9D7A, 0x9D9A, 0x9DA4, 0x9DA9, 0x9DB2, 0x9DC4, 0x9DC1, 0x9DBB, 0x9DB8, 0x9DBA, 0x9DC6, 0x9DCF, 0x9DC2, 0x9DD9, 0x9DD3, 0x9DF8, 0x9DE6, 0x9DED, 0x9DEF, 0x9DFD, 0x9E1A, 0x9E1B, 0x9E1E, 0x9E75, 0x9E79, 0x9E7D, 0x9E81, 0x9E88, 0x9E8B, 0x9E8C, 0x9E92, 0x9E95, 0x9E91, 0x9E9D, 0x9EA5, 0x9EA9, 0x9EB8, 0x9EAA, 0x9EAD, 0x9761, 0x9ECC, 0x9ECE, 0x9ECF, 0x9ED0, 0x9ED4, 0x9EDC, 0x9EDE, 0x9EDD, 0x9EE0, 0x9EE5, 0x9EE8, 0x9EEF, 0x9EF4, 0x9EF6, 0x9EF7, 0x9EF9, 0x9EFB, 0x9EFC, 0x9EFD, 0x9F07, 0x9F08, 0x76B7, 0x9F15, 0x9F21, 0x9F2C, 0x9F3E, 0x9F4A, 0x9F52, 0x9F54, 0x9F63, 0x9F5F, 0x9F60, 0x9F61, 0x9F66, 0x9F67, 0x9F6C, 0x9F6A, 0x9F77, 0x9F72, 0x9F76, 0x9F95, 0x9F9C, 0x9FA0}, { /* category 84 */ 0x582F, 0x69C7, 0x9059, 0x7464, 0x51DC, 0x7199, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 85 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 86 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 87 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 88 */ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000}, { /* category 89 */ 0x7E8A, 0x891C, 0x9348, 0x9288, 0x84DC, 0x4FC9, 0x70BB, 0x6631, 0x68C8, 0x92F9, 0x66FB, 0x5F45, 0x4E28, 0x4EE1, 0x4EFC, 0x4F00, 0x4F03, 0x4F39, 0x4F56, 0x4F92, 0x4F8A, 0x4F9A, 0x4F94, 0x4FCD, 0x5040, 0x5022, 0x4FFF, 0x501E, 0x5046, 0x5070, 0x5042, 0x5094, 0x50F4, 0x50D8, 0x514A, 0x5164, 0x519D, 0x51BE, 0x51EC, 0x5215, 0x529C, 0x52A6, 0x52C0, 0x52DB, 0x5300, 0x5307, 0x5324, 0x5372, 0x5393, 0x53B2, 0x53DD, 0xFA0E, 0x549C, 0x548A, 0x54A9, 0x54FF, 0x5586, 0x5759, 0x5765, 0x57AC, 0x57C8, 0x57C7, 0xFA0F, 0xFA10, 0x589E, 0x58B2, 0x590B, 0x5953, 0x595B, 0x595D, 0x5963, 0x59A4, 0x59BA, 0x5B56, 0x5BC0, 0x752F, 0x5BD8, 0x5BEC, 0x5C1E, 0x5CA6, 0x5CBA, 0x5CF5, 0x5D27, 0x5D53, 0xFA11, 0x5D42, 0x5D6D, 0x5DB8, 0x5DB9, 0x5DD0, 0x5F21, 0x5F34, 0x5F67, 0x5FB7}, { /* category 90 */ 0x5FDE, 0x605D, 0x6085, 0x608A, 0x60DE, 0x60D5, 0x6120, 0x60F2, 0x6111, 0x6137, 0x6130, 0x6198, 0x6213, 0x62A6, 0x63F5, 0x6460, 0x649D, 0x64CE, 0x654E, 0x6600, 0x6615, 0x663B, 0x6609, 0x662E, 0x661E, 0x6624, 0x6665, 0x6657, 0x6659, 0xFA12, 0x6673, 0x6699, 0x66A0, 0x66B2, 0x66BF, 0x66FA, 0x670E, 0xF929, 0x6766, 0x67BB, 0x6852, 0x67C0, 0x6801, 0x6844, 0x68CF, 0xFA13, 0x6968, 0xFA14, 0x6998, 0x69E2, 0x6A30, 0x6A6B, 0x6A46, 0x6A73, 0x6A7E, 0x6AE2, 0x6AE4, 0x6BD6, 0x6C3F, 0x6C5C, 0x6C86, 0x6C6F, 0x6CDA, 0x6D04, 0x6D87, 0x6D6F, 0x6D96, 0x6DAC, 0x6DCF, 0x6DF8, 0x6DF2, 0x6DFC, 0x6E39, 0x6E5C, 0x6E27, 0x6E3C, 0x6EBF, 0x6F88, 0x6FB5, 0x6FF5, 0x7005, 0x7007, 0x7028, 0x7085, 0x70AB, 0x710F, 0x7104, 0x715C, 0x7146, 0x7147, 0xFA15, 0x71C1, 0x71FE, 0x72B1}, { /* category 91 */ 0x72BE, 0x7324, 0xFA16, 0x7377, 0x73BD, 0x73C9, 0x73D6, 0x73E3, 0x73D2, 0x7407, 0x73F5, 0x7426, 0x742A, 0x7429, 0x742E, 0x7462, 0x7489, 0x749F, 0x7501, 0x756F, 0x7682, 0x769C, 0x769E, 0x769B, 0x76A6, 0xFA17, 0x7746, 0x52AF, 0x7821, 0x784E, 0x7864, 0x787A, 0x7930, 0xFA18, 0xFA19, 0xFA1A, 0x7994, 0xFA1B, 0x799B, 0x7AD1, 0x7AE7, 0xFA1C, 0x7AEB, 0x7B9E, 0xFA1D, 0x7D48, 0x7D5C, 0x7DB7, 0x7DA0, 0x7DD6, 0x7E52, 0x7F47, 0x7FA1, 0xFA1E, 0x8301, 0x8362, 0x837F, 0x83C7, 0x83F6, 0x8448, 0x84B4, 0x8553, 0x8559, 0x856B, 0xFA1F, 0x85B0, 0xFA20, 0xFA21, 0x8807, 0x88F5, 0x8A12, 0x8A37, 0x8A79, 0x8AA7, 0x8ABE, 0x8ADF, 0xFA22, 0x8AF6, 0x8B53, 0x8B7F, 0x8CF0, 0x8CF4, 0x8D12, 0x8D76, 0xFA23, 0x8ECF, 0xFA24, 0xFA25, 0x9067, 0x90DE, 0xFA26, 0x9115, 0x9127, 0x91DA}, { /* category 92 */ 0x91D7, 0x91DE, 0x91ED, 0x91EE, 0x91E4, 0x91E5, 0x9206, 0x9210, 0x920A, 0x923A, 0x9240, 0x923C, 0x924E, 0x9259, 0x9251, 0x9239, 0x9267, 0x92A7, 0x9277, 0x9278, 0x92E7, 0x92D7, 0x92D9, 0x92D0, 0xFA27, 0x92D5, 0x92E0, 0x92D3, 0x9325, 0x9321, 0x92FB, 0xFA28, 0x931E, 0x92FF, 0x931D, 0x9302, 0x9370, 0x9357, 0x93A4, 0x93C6, 0x93DE, 0x93F8, 0x9431, 0x9445, 0x9448, 0x9592, 0xF9DC, 0xFA29, 0x969D, 0x96AF, 0x9733, 0x973B, 0x9743, 0x974D, 0x974F, 0x9751, 0x9755, 0x9857, 0x9865, 0xFA2A, 0xFA2B, 0x9927, 0xFA2C, 0x999E, 0x9A4E, 0x9AD9, 0x9ADC, 0x9B75, 0x9B72, 0x9B8F, 0x9BB1, 0x9BBB, 0x9C00, 0x9D70, 0x9D6B, 0xFA2D, 0x9E19, 0x9ED1, 0x0000, 0x0000, 0x2170, 0x2171, 0x2172, 0x2173, 0x2174, 0x2175, 0x2176, 0x2177, 0x2178, 0x2179, 0xFFE2, 0xFFE4, 0xFF07, 0xFF02}}; #endif /* JISX0208_H */ PK!@rext/gd/libgd/gdfontg.hnu[ #ifndef _GDFONTG_H_ #define _GDFONTG_H_ 1 #ifdef __cplusplus extern "C" { #endif /* This is a header file for gd font, generated using bdftogd version 0.51 by Jan Pazdziora, adelton@fi.muni.cz from bdf font -Misc-Fixed-Bold-R-Normal-Sans-15-140-75-75-C-90-ISO8859-2 at Mon Jan 26 14:45:58 1998. The original bdf was holding following copyright: "Libor Skarvada, libor@informatics.muni.cz" */ #include "gd.h" extern gdFontPtr gdFontGiant; extern gdFontPtr gdFontGetGiant(void); #ifdef __cplusplus } #endif #endif PK!+Text/gd/libgd/gd_errors.hnu[#ifndef GD_ERRORS_H #define GD_ERRORS_H #ifndef _WIN32 # include #else # include "win32/syslog.h" #endif /* LOG_EMERG system is unusable LOG_ALERT action must be taken immediately LOG_CRIT critical conditions LOG_ERR error conditions LOG_WARNING warning conditions LOG_NOTICE normal, but significant, condition LOG_INFO informational message LOG_DEBUG debug-level message */ #define GD_ERROR LOG_ERR #define GD_WARNING LOG_WARNING #define GD_NOTICE LOG_NOTICE #define GD_INFO LOG_INFO #define GD_DEBUG LOG_DEBUG void gd_error(const char *format, ...); void gd_error_ex(int priority, const char *format, ...); #endif PK! ext/gd/libgd/gd.hnu[#ifndef GD_H #define GD_H 1 #ifdef __cplusplus extern "C" { #endif #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php_compat.h" #define GD_MAJOR_VERSION 2 #define GD_MINOR_VERSION 0 #define GD_RELEASE_VERSION 35 #define GD_EXTRA_VERSION "" #define GD_VERSION_STRING "2.0.35" #ifdef NETWARE /* default fontpath for netware systems */ #define DEFAULT_FONTPATH "sys:/java/nwgfx/lib/x11/fonts/ttf;." #define PATHSEPARATOR ";" #elif defined(WIN32) /* default fontpath for windows systems */ #define DEFAULT_FONTPATH "c:\\winnt\\fonts;c:\\windows\\fonts;." #define PATHSEPARATOR ";" #else /* default fontpath for unix systems */ #define DEFAULT_FONTPATH "/usr/X11R6/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/truetype:/usr/X11R6/lib/X11/fonts/TTF:/usr/share/fonts/TrueType:/usr/share/fonts/truetype:/usr/openwin/lib/X11/fonts/TrueType:/usr/X11R6/lib/X11/fonts/Type1:." #define PATHSEPARATOR ":" #endif /* gd.h: declarations file for the graphic-draw module. * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose and without fee is hereby granted, provided * that the above copyright notice appear in all copies and that both that * copyright notice and this permission notice appear in supporting * documentation. This software is provided "AS IS." Thomas Boutell and * Boutell.Com, Inc. disclaim all warranties, either express or implied, * including but not limited to implied warranties of merchantability and * fitness for a particular purpose, with respect to this code and accompanying * documentation. */ /* stdio is needed for file I/O. */ #include #include "gd_io.h" /* va_list needed in gdErrorMethod */ #ifdef PHP_WIN32 # include #else # if HAVE_STDARG_H # include # else # if HAVE_SYS_VARARGS_H # include # endif # endif #endif /* The maximum number of palette entries in palette-based images. In the wonderful new world of gd 2.0, you can of course have many more colors when using truecolor mode. */ #define gdMaxColors 256 /* Image type. See functions below; you will not need to change the elements directly. Use the provided macros to access sx, sy, the color table, and colorsTotal for read-only purposes. */ /* If 'truecolor' is set true, the image is truecolor; pixels are represented by integers, which must be 32 bits wide or more. True colors are repsented as follows: ARGB Where 'A' (alpha channel) occupies only the LOWER 7 BITS of the MSB. This very small loss of alpha channel resolution allows gd 2.x to keep backwards compatibility by allowing signed integers to be used to represent colors, and negative numbers to represent special cases, just as in gd 1.x. */ #define gdAlphaMax 127 #define gdAlphaOpaque 0 #define gdAlphaTransparent 127 #define gdRedMax 255 #define gdGreenMax 255 #define gdBlueMax 255 #define gdTrueColorGetAlpha(c) (((c) & 0x7F000000) >> 24) #define gdTrueColorGetRed(c) (((c) & 0xFF0000) >> 16) #define gdTrueColorGetGreen(c) (((c) & 0x00FF00) >> 8) #define gdTrueColorGetBlue(c) ((c) & 0x0000FF) #define gdEffectReplace 0 #define gdEffectAlphaBlend 1 #define gdEffectNormal 2 #define gdEffectOverlay 3 #define gdEffectMultiply 4 #define GD_TRUE 1 #define GD_FALSE 0 #define GD_EPSILON 1e-6 /* This function accepts truecolor pixel values only. The source color is composited with the destination color based on the alpha channel value of the source color. The resulting color is opaque. */ int gdAlphaBlend(int dest, int src); int gdLayerOverlay(int dst, int src); int gdLayerMultiply(int dest, int src); /** * Group: Transform * * Constants: gdInterpolationMethod * GD_BELL - Bell * GD_BESSEL - Bessel * GD_BILINEAR_FIXED - fixed point bilinear * GD_BICUBIC - Bicubic * GD_BICUBIC_FIXED - fixed point bicubic integer * GD_BLACKMAN - Blackman * GD_BOX - Box * GD_BSPLINE - BSpline * GD_CATMULLROM - Catmullrom * GD_GAUSSIAN - Gaussian * GD_GENERALIZED_CUBIC - Generalized cubic * GD_HERMITE - Hermite * GD_HAMMING - Hamming * GD_HANNING - Hannig * GD_MITCHELL - Mitchell * GD_NEAREST_NEIGHBOUR - Nearest neighbour interpolation * GD_POWER - Power * GD_QUADRATIC - Quadratic * GD_SINC - Sinc * GD_TRIANGLE - Triangle * GD_WEIGHTED4 - 4 pixels weighted bilinear interpolation * * See also: * **/ typedef enum { GD_DEFAULT = 0, GD_BELL, GD_BESSEL, GD_BILINEAR_FIXED, GD_BICUBIC, GD_BICUBIC_FIXED, GD_BLACKMAN, GD_BOX, GD_BSPLINE, GD_CATMULLROM, GD_GAUSSIAN, GD_GENERALIZED_CUBIC, GD_HERMITE, GD_HAMMING, GD_HANNING, GD_MITCHELL, GD_NEAREST_NEIGHBOUR, GD_POWER, GD_QUADRATIC, GD_SINC, GD_TRIANGLE, GD_WEIGHTED4, GD_METHOD_COUNT = 21 } gdInterpolationMethod; /* define struct with name and func ptr and add it to gdImageStruct gdInterpolationMethod interpolation; */ /* Interpolation function ptr */ typedef double (* interpolation_method )(double); typedef struct gdImageStruct { /* Palette-based image pixels */ unsigned char ** pixels; int sx; int sy; /* These are valid in palette images only. See also 'alpha', which appears later in the structure to preserve binary backwards compatibility */ int colorsTotal; int red[gdMaxColors]; int green[gdMaxColors]; int blue[gdMaxColors]; int open[gdMaxColors]; /* For backwards compatibility, this is set to the first palette entry with 100% transparency, and is also set and reset by the gdImageColorTransparent function. Newer applications can allocate palette entries with any desired level of transparency; however, bear in mind that many viewers, notably many web browsers, fail to implement full alpha channel for PNG and provide support for full opacity or transparency only. */ int transparent; int *polyInts; int polyAllocated; struct gdImageStruct *brush; struct gdImageStruct *tile; int brushColorMap[gdMaxColors]; int tileColorMap[gdMaxColors]; int styleLength; int stylePos; int *style; int interlace; /* New in 2.0: thickness of line. Initialized to 1. */ int thick; /* New in 2.0: alpha channel for palettes. Note that only Macintosh Internet Explorer and (possibly) Netscape 6 really support multiple levels of transparency in palettes, to my knowledge, as of 2/15/01. Most common browsers will display 100% opaque and 100% transparent correctly, and do something unpredictable and/or undesirable for levels in between. TBB */ int alpha[gdMaxColors]; /* Truecolor flag and pixels. New 2.0 fields appear here at the end to minimize breakage of existing object code. */ int trueColor; int ** tpixels; /* Should alpha channel be copied, or applied, each time a pixel is drawn? This applies to truecolor images only. No attempt is made to alpha-blend in palette images, even if semitransparent palette entries exist. To do that, build your image as a truecolor image, then quantize down to 8 bits. */ int alphaBlendingFlag; /* Should the alpha channel of the image be saved? This affects PNG at the moment; other future formats may also have that capability. JPEG doesn't. */ int saveAlphaFlag; /* 2.0.12: anti-aliased globals. 2.0.26: just a few vestiges after switching to the fast, memory-cheap implementation from PHP-gd. */ int AA; int AA_color; int AA_dont_blend; /* 2.0.12: simple clipping rectangle. These values must be checked for safety when set; please use gdImageSetClip */ int cx1; int cy1; int cx2; int cy2; unsigned int res_x; unsigned int res_y; gdInterpolationMethod interpolation_id; interpolation_method interpolation; } gdImage; typedef gdImage * gdImagePtr; /* Point type for use in polygon drawing. */ /** * Group: Types * * typedef: gdPointF * Defines a point in a 2D coordinate system using floating point * values. * x - Floating point position (increase from left to right) * y - Floating point Row position (increase from top to bottom) * * typedef: gdPointFPtr * Pointer to a * * See also: * , , **/ typedef struct { double x, y; } gdPointF, *gdPointFPtr; typedef struct { /* # of characters in font */ int nchars; /* First character is numbered... (usually 32 = space) */ int offset; /* Character width and height */ int w; int h; /* Font data; array of characters, one row after another. Easily included in code, also easily loaded from data files. */ char *data; } gdFont; /* Text functions take these. */ typedef gdFont *gdFontPtr; typedef void(*gdErrorMethod)(int, const char *, va_list); void gdSetErrorMethod(gdErrorMethod); void gdClearErrorMethod(void); /** * Group: Types * * typedef: gdRect * Defines a rectilinear region. * * x - left position * y - right position * width - Rectangle width * height - Rectangle height * * typedef: gdRectPtr * Pointer to a * * See also: * **/ typedef struct { int x, y; int width, height; } gdRect, *gdRectPtr; /* For backwards compatibility only. Use gdImageSetStyle() for MUCH more flexible line drawing. Also see gdImageSetBrush(). */ #define gdDashSize 4 /* Special colors. */ #define gdStyled (-2) #define gdBrushed (-3) #define gdStyledBrushed (-4) #define gdTiled (-5) /* NOT the same as the transparent color index. This is used in line styles only. */ #define gdTransparent (-6) #define gdAntiAliased (-7) /* Functions to manipulate images. */ /* Creates a palette-based image (up to 256 colors). */ gdImagePtr gdImageCreate(int sx, int sy); /* An alternate name for the above (2.0). */ #define gdImageCreatePalette gdImageCreate /* Creates a truecolor image (millions of colors). */ gdImagePtr gdImageCreateTrueColor(int sx, int sy); /* Creates an image from various file types. These functions return a palette or truecolor image based on the nature of the file being loaded. Truecolor PNG stays truecolor; palette PNG stays palette-based; JPEG is always truecolor. */ gdImagePtr gdImageCreateFromPng(FILE *fd); gdImagePtr gdImageCreateFromPngCtx(gdIOCtxPtr in); gdImagePtr gdImageCreateFromWBMP(FILE *inFile); gdImagePtr gdImageCreateFromWBMPCtx(gdIOCtx *infile); gdImagePtr gdImageCreateFromJpeg(FILE *infile); gdImagePtr gdImageCreateFromJpegEx(FILE *infile, int ignore_warning); gdImagePtr gdImageCreateFromJpegCtx(gdIOCtx *infile); gdImagePtr gdImageCreateFromJpegCtxEx(gdIOCtx *infile, int ignore_warning); gdImagePtr gdImageCreateFromJpegPtr (int size, void *data); gdImagePtr gdImageCreateFromJpegPtrEx (int size, void *data, int ignore_warning); gdImagePtr gdImageCreateFromWebp(FILE *fd); gdImagePtr gdImageCreateFromWebpCtx(gdIOCtxPtr in); gdImagePtr gdImageCreateFromWebpPtr (int size, void *data); gdImagePtr gdImageCreateFromBmp (FILE * inFile); gdImagePtr gdImageCreateFromBmpPtr (int size, void *data); gdImagePtr gdImageCreateFromBmpCtx (gdIOCtxPtr infile); const char * gdPngGetVersionString(); const char * gdJpegGetVersionString(); /* A custom data source. */ /* The source function must return -1 on error, otherwise the number of bytes fetched. 0 is EOF, not an error! */ /* context will be passed to your source function. */ typedef struct { int (*source) (void *context, char *buffer, int len); void *context; } gdSource, *gdSourcePtr; gdImagePtr gdImageCreateFromPngSource(gdSourcePtr in); gdImagePtr gdImageCreateFromGd(FILE *in); gdImagePtr gdImageCreateFromGdCtx(gdIOCtxPtr in); gdImagePtr gdImageCreateFromGd2(FILE *in); gdImagePtr gdImageCreateFromGd2Ctx(gdIOCtxPtr in); gdImagePtr gdImageCreateFromGd2Part(FILE *in, int srcx, int srcy, int w, int h); gdImagePtr gdImageCreateFromGd2PartCtx(gdIOCtxPtr in, int srcx, int srcy, int w, int h); gdImagePtr gdImageCreateFromXbm(FILE *fd); void gdImageXbmCtx(gdImagePtr image, char* file_name, int fg, gdIOCtx * out); gdImagePtr gdImageCreateFromXpm (char *filename); void gdImageDestroy(gdImagePtr im); /* Replaces or blends with the background depending on the most recent call to gdImageAlphaBlending and the alpha channel value of 'color'; default is to overwrite. Tiling and line styling are also implemented here. All other gd drawing functions pass through this call, allowing for many useful effects. */ void gdImageSetPixel(gdImagePtr im, int x, int y, int color); int gdImageGetTrueColorPixel (gdImagePtr im, int x, int y); int gdImageGetPixel(gdImagePtr im, int x, int y); void gdImageAABlend(gdImagePtr im); void gdImageLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color); void gdImageAALine(gdImagePtr im, int x1, int y1, int x2, int y2, int color); /* For backwards compatibility only. Use gdImageSetStyle() for much more flexible line drawing. */ void gdImageDashedLine(gdImagePtr im, int x1, int y1, int x2, int y2, int color); /* Corners specified (not width and height). Upper left first, lower right second. */ void gdImageRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color); /* Solid bar. Upper left corner first, lower right corner second. */ void gdImageFilledRectangle(gdImagePtr im, int x1, int y1, int x2, int y2, int color); void gdImageSetClip(gdImagePtr im, int x1, int y1, int x2, int y2); void gdImageGetClip(gdImagePtr im, int *x1P, int *y1P, int *x2P, int *y2P); void gdImageSetResolution(gdImagePtr im, const unsigned int res_x, const unsigned int res_y); void gdImageChar(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color); void gdImageCharUp(gdImagePtr im, gdFontPtr f, int x, int y, int c, int color); void gdImageString(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color); void gdImageStringUp(gdImagePtr im, gdFontPtr f, int x, int y, unsigned char *s, int color); void gdImageString16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color); void gdImageStringUp16(gdImagePtr im, gdFontPtr f, int x, int y, unsigned short *s, int color); /* * The following functions are required to be called prior to the * use of any sort of threads in a module load / shutdown function * respectively. */ void gdFontCacheMutexSetup(); void gdFontCacheMutexShutdown(); /* 2.0.16: for thread-safe use of gdImageStringFT and friends, * call this before allowing any thread to call gdImageStringFT. * Otherwise it is invoked by the first thread to invoke * gdImageStringFT, with a very small but real risk of a race condition. * Return 0 on success, nonzero on failure to initialize freetype. */ int gdFontCacheSetup(void); /* Optional: clean up after application is done using fonts in gdImageStringFT(). */ void gdFontCacheShutdown(void); /* Calls gdImageStringFT. Provided for backwards compatibility only. */ char *gdImageStringTTF(gdImage *im, int *brect, int fg, char *fontlist, double ptsize, double angle, int x, int y, char *string); /* FreeType 2 text output */ char *gdImageStringFT(gdImage *im, int *brect, int fg, char *fontlist, double ptsize, double angle, int x, int y, char *string); typedef struct { double linespacing; /* fine tune line spacing for '\n' */ int flags; /* Logical OR of gdFTEX_ values */ int charmap; /* TBB: 2.0.12: may be gdFTEX_Unicode, gdFTEX_Shift_JIS, gdFTEX_Big5 or gdFTEX_MacRoman; when not specified, maps are searched for in the above order. */ int hdpi; int vdpi; } gdFTStringExtra, *gdFTStringExtraPtr; #define gdFTEX_LINESPACE 1 #define gdFTEX_CHARMAP 2 #define gdFTEX_RESOLUTION 4 /* These are NOT flags; set one in 'charmap' if you set the gdFTEX_CHARMAP bit in 'flags'. */ #define gdFTEX_Unicode 0 #define gdFTEX_Shift_JIS 1 #define gdFTEX_Big5 2 #define gdFTEX_MacRoman 3 /* FreeType 2 text output with fine tuning */ char * gdImageStringFTEx(gdImage * im, int *brect, int fg, char * fontlist, double ptsize, double angle, int x, int y, char * string, gdFTStringExtraPtr strex); /* Point type for use in polygon drawing. */ typedef struct { int x, y; } gdPoint, *gdPointPtr; void gdImagePolygon(gdImagePtr im, gdPointPtr p, int n, int c); void gdImageOpenPolygon(gdImagePtr im, gdPointPtr p, int n, int c); void gdImageFilledPolygon(gdImagePtr im, gdPointPtr p, int n, int c); /* These functions still work with truecolor images, for which they never return error. */ int gdImageColorAllocate(gdImagePtr im, int r, int g, int b); /* gd 2.0: palette entries with non-opaque transparency are permitted. */ int gdImageColorAllocateAlpha(gdImagePtr im, int r, int g, int b, int a); /* Assumes opaque is the preferred alpha channel value */ int gdImageColorClosest(gdImagePtr im, int r, int g, int b); /* Closest match taking all four parameters into account. A slightly different color with the same transparency beats the exact same color with radically different transparency */ int gdImageColorClosestAlpha(gdImagePtr im, int r, int g, int b, int a); /* An alternate method */ int gdImageColorClosestHWB(gdImagePtr im, int r, int g, int b); /* Returns exact, 100% opaque matches only */ int gdImageColorExact(gdImagePtr im, int r, int g, int b); /* Returns an exact match only, including alpha */ int gdImageColorExactAlpha(gdImagePtr im, int r, int g, int b, int a); /* Opaque only */ int gdImageColorResolve(gdImagePtr im, int r, int g, int b); /* Based on gdImageColorExactAlpha and gdImageColorClosestAlpha */ int gdImageColorResolveAlpha(gdImagePtr im, int r, int g, int b, int a); /* A simpler way to obtain an opaque truecolor value for drawing on a truecolor image. Not for use with palette images! */ #define gdTrueColor(r, g, b) (((r) << 16) + \ ((g) << 8) + \ (b)) /* Returns a truecolor value with an alpha channel component. gdAlphaMax (127, **NOT 255**) is transparent, 0 is completely opaque. */ #define gdTrueColorAlpha(r, g, b, a) (((a) << 24) + \ ((r) << 16) + \ ((g) << 8) + \ (b)) void gdImageColorDeallocate(gdImagePtr im, int color); /* Converts a truecolor image to a palette-based image, using a high-quality two-pass quantization routine which attempts to preserve alpha channel information as well as R/G/B color information when creating a palette. If ditherFlag is set, the image will be dithered to approximate colors better, at the expense of some obvious "speckling." colorsWanted can be anything up to 256. If the original source image includes photographic information or anything that came out of a JPEG, 256 is strongly recommended. Better yet, don't use this function -- write real truecolor PNGs and JPEGs. The disk space gain of conversion to palette is not great (for small images it can be negative) and the quality loss is ugly. */ gdImagePtr gdImageCreatePaletteFromTrueColor (gdImagePtr im, int ditherFlag, int colorsWanted); int gdImageTrueColorToPalette(gdImagePtr im, int ditherFlag, int colorsWanted); int gdImagePaletteToTrueColor(gdImagePtr src); /* An attempt at getting the results of gdImageTrueColorToPalette to look a bit more like the original (im1 is the original and im2 is the palette version */ int gdImageColorMatch(gdImagePtr im1, gdImagePtr im2); /* Specifies a color index (if a palette image) or an RGB color (if a truecolor image) which should be considered 100% transparent. FOR TRUECOLOR IMAGES, THIS IS IGNORED IF AN ALPHA CHANNEL IS BEING SAVED. Use gdImageSaveAlpha(im, 0); to turn off the saving of a full alpha channel in a truecolor image. Note that gdImageColorTransparent is usually compatible with older browsers that do not understand full alpha channels well. TBB */ void gdImageColorTransparent(gdImagePtr im, int color); void gdImagePaletteCopy(gdImagePtr dst, gdImagePtr src); void gdImagePng(gdImagePtr im, FILE *out); void gdImagePngCtx(gdImagePtr im, gdIOCtx *out); void gdImageGif(gdImagePtr im, FILE *out); void gdImageGifCtx(gdImagePtr im, gdIOCtx *out); void * gdImageBmpPtr(gdImagePtr im, int *size, int compression); void gdImageBmp(gdImagePtr im, FILE *outFile, int compression); void gdImageBmpCtx(gdImagePtr im, gdIOCtxPtr out, int compression); /* 2.0.12: Compression level: 0-9 or -1, where 0 is NO COMPRESSION at all, * 1 is FASTEST but produces larger files, 9 provides the best * compression (smallest files) but takes a long time to compress, and * -1 selects the default compiled into the zlib library. */ void gdImagePngEx(gdImagePtr im, FILE * out, int level, int basefilter); void gdImagePngCtxEx(gdImagePtr im, gdIOCtx * out, int level, int basefilter); void gdImageWBMP(gdImagePtr image, int fg, FILE *out); void gdImageWBMPCtx(gdImagePtr image, int fg, gdIOCtx *out); /* Guaranteed to correctly free memory returned by the gdImage*Ptr functions */ void gdFree(void *m); /* Best to free this memory with gdFree(), not free() */ void *gdImageWBMPPtr(gdImagePtr im, int *size, int fg); /* 100 is highest quality (there is always a little loss with JPEG). 0 is lowest. 10 is about the lowest useful setting. */ void gdImageJpeg(gdImagePtr im, FILE *out, int quality); void gdImageJpegCtx(gdImagePtr im, gdIOCtx *out, int quality); void gdImageWebpCtx (gdImagePtr im, gdIOCtx * outfile, int quantization); /* Best to free this memory with gdFree(), not free() */ void *gdImageJpegPtr(gdImagePtr im, int *size, int quality); gdImagePtr gdImageCreateFromGif(FILE *fd); gdImagePtr gdImageCreateFromGifCtx(gdIOCtxPtr in); gdImagePtr gdImageCreateFromGifSource(gdSourcePtr in); /* A custom data sink. For backwards compatibility. Use gdIOCtx instead. */ /* The sink function must return -1 on error, otherwise the number of bytes written, which must be equal to len. */ /* context will be passed to your sink function. */ typedef struct { int (*sink) (void *context, const char *buffer, int len); void *context; } gdSink, *gdSinkPtr; void gdImagePngToSink(gdImagePtr im, gdSinkPtr out); void gdImageGd(gdImagePtr im, FILE *out); void gdImageGd2(gdImagePtr im, FILE *out, int cs, int fmt); /* Best to free this memory with gdFree(), not free() */ void* gdImagePngPtr(gdImagePtr im, int *size); /* Best to free this memory with gdFree(), not free() */ void* gdImageGdPtr(gdImagePtr im, int *size); void *gdImagePngPtrEx(gdImagePtr im, int *size, int level, int basefilter); /* Best to free this memory with gdFree(), not free() */ void* gdImageGd2Ptr(gdImagePtr im, int cs, int fmt, int *size); void gdImageEllipse(gdImagePtr im, int cx, int cy, int w, int h, int c); /* Style is a bitwise OR ( | operator ) of these. gdArc and gdChord are mutually exclusive; gdChord just connects the starting and ending angles with a straight line, while gdArc produces a rounded edge. gdPie is a synonym for gdArc. gdNoFill indicates that the arc or chord should be outlined, not filled. gdEdged, used together with gdNoFill, indicates that the beginning and ending angles should be connected to the center; this is a good way to outline (rather than fill) a 'pie slice'. */ #define gdArc 0 #define gdPie gdArc #define gdChord 1 #define gdNoFill 2 #define gdEdged 4 void gdImageFilledArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color, int style); void gdImageArc(gdImagePtr im, int cx, int cy, int w, int h, int s, int e, int color); void gdImageFilledEllipse(gdImagePtr im, int cx, int cy, int w, int h, int color); void gdImageFillToBorder(gdImagePtr im, int x, int y, int border, int color); void gdImageFill(gdImagePtr im, int x, int y, int color); void gdImageCopy(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h); void gdImageCopyMerge(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct); void gdImageCopyMergeGray(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int w, int h, int pct); /* Stretches or shrinks to fit, as needed. Does NOT attempt to average the entire set of source pixels that scale down onto the destination pixel. */ void gdImageCopyResized(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH); /* gd 2.0: stretches or shrinks to fit, as needed. When called with a truecolor destination image, this function averages the entire set of source pixels that scale down onto the destination pixel, taking into account what portion of the destination pixel each source pixel represents. This is a floating point operation, but this is not a performance issue on modern hardware, except for some embedded devices. If the destination is a palette image, gdImageCopyResized is substituted automatically. */ void gdImageCopyResampled(gdImagePtr dst, gdImagePtr src, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH); gdImagePtr gdImageRotate90(gdImagePtr src, int ignoretransparent); gdImagePtr gdImageRotate180(gdImagePtr src, int ignoretransparent); gdImagePtr gdImageRotate270(gdImagePtr src, int ignoretransparent); gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor); void gdImageSetBrush(gdImagePtr im, gdImagePtr brush); void gdImageSetTile(gdImagePtr im, gdImagePtr tile); void gdImageSetAntiAliased(gdImagePtr im, int c); void gdImageSetAntiAliasedDontBlend(gdImagePtr im, int c, int dont_blend); void gdImageSetStyle(gdImagePtr im, int *style, int noOfPixels); /* Line thickness (defaults to 1). Affects lines, ellipses, rectangles, polygons and so forth. */ void gdImageSetThickness(gdImagePtr im, int thickness); /* On or off (1 or 0) for all three of these. */ void gdImageInterlace(gdImagePtr im, int interlaceArg); void gdImageAlphaBlending(gdImagePtr im, int alphaBlendingArg); void gdImageAntialias(gdImagePtr im, int antialias); void gdImageSaveAlpha(gdImagePtr im, int saveAlphaArg); enum gdPixelateMode { GD_PIXELATE_UPPERLEFT, GD_PIXELATE_AVERAGE }; int gdImagePixelate(gdImagePtr im, int block_size, const unsigned int mode); /* Macros to access information about images. */ /* Returns nonzero if the image is a truecolor image, zero for a palette image. */ #define gdImageTrueColor(im) ((im)->trueColor) #define gdImageSX(im) ((im)->sx) #define gdImageSY(im) ((im)->sy) #define gdImageColorsTotal(im) ((im)->colorsTotal) #define gdImageRed(im, c) ((im)->trueColor ? gdTrueColorGetRed(c) : \ (im)->red[(c)]) #define gdImageGreen(im, c) ((im)->trueColor ? gdTrueColorGetGreen(c) : \ (im)->green[(c)]) #define gdImageBlue(im, c) ((im)->trueColor ? gdTrueColorGetBlue(c) : \ (im)->blue[(c)]) #define gdImageAlpha(im, c) ((im)->trueColor ? gdTrueColorGetAlpha(c) : \ (im)->alpha[(c)]) #define gdImageGetTransparent(im) ((im)->transparent) #define gdImageGetInterlaced(im) ((im)->interlace) /* These macros provide direct access to pixels in palette-based and truecolor images, respectively. If you use these macros, you must perform your own bounds checking. Use of the macro for the correct type of image is also your responsibility. */ #define gdImagePalettePixel(im, x, y) (im)->pixels[(y)][(x)] #define gdImageTrueColorPixel(im, x, y) (im)->tpixels[(y)][(x)] #define gdImageResolutionX(im) (im)->res_x #define gdImageResolutionY(im) (im)->res_y /* I/O Support routines. */ gdIOCtx* gdNewFileCtx(FILE*); gdIOCtx* gdNewDynamicCtx(int, void*); gdIOCtx *gdNewDynamicCtxEx(int size, void *data, int freeFlag); gdIOCtx* gdNewSSCtx(gdSourcePtr in, gdSinkPtr out); void* gdDPExtractData(struct gdIOCtx* ctx, int *size); #define GD2_CHUNKSIZE 128 #define GD2_CHUNKSIZE_MIN 64 #define GD2_CHUNKSIZE_MAX 4096 #define GD2_VERS 2 #define GD2_ID "gd2" #define GD2_FMT_RAW 1 #define GD2_FMT_COMPRESSED 2 /* filters section * * Negate the imag src, white becomes black, * The red, green, and blue intensities of an image are negated. * White becomes black, yellow becomes blue, etc. */ int gdImageNegate(gdImagePtr src); /* Convert the image src to a grayscale image */ int gdImageGrayScale(gdImagePtr src); /* Set the brightness level for the image src */ int gdImageBrightness(gdImagePtr src, int brightness); /* Set the contrast level for the image */ int gdImageContrast(gdImagePtr src, double contrast); /* Simply adds or subtracts respectively red, green or blue to a pixel */ int gdImageColor(gdImagePtr src, const int red, const int green, const int blue, const int alpha); /* Image convolution by a 3x3 custom matrix */ int gdImageConvolution(gdImagePtr src, float ft[3][3], float filter_div, float offset); int gdImageEdgeDetectQuick(gdImagePtr src); int gdImageGaussianBlur(gdImagePtr im); int gdImageSelectiveBlur( gdImagePtr src); int gdImageEmboss(gdImagePtr im); int gdImageMeanRemoval(gdImagePtr im); int gdImageSmooth(gdImagePtr im, float weight); /* Image comparison definitions */ int gdImageCompare(gdImagePtr im1, gdImagePtr im2); void gdImageFlipHorizontal(gdImagePtr im); void gdImageFlipVertical(gdImagePtr im); void gdImageFlipBoth(gdImagePtr im); #define GD_FLIP_HORINZONTAL 1 #define GD_FLIP_VERTICAL 2 #define GD_FLIP_BOTH 3 /** * Group: Crop * * Constants: gdCropMode * GD_CROP_DEFAULT - Default crop mode (4 corners or background) * GD_CROP_TRANSPARENT - Crop using the transparent color * GD_CROP_BLACK - Crop black borders * GD_CROP_WHITE - Crop white borders * GD_CROP_SIDES - Crop using colors of the 4 corners * * See also: * **/ enum gdCropMode { GD_CROP_DEFAULT = 0, GD_CROP_TRANSPARENT, GD_CROP_BLACK, GD_CROP_WHITE, GD_CROP_SIDES, GD_CROP_THRESHOLD }; gdImagePtr gdImageCrop(gdImagePtr src, const gdRectPtr crop); gdImagePtr gdImageCropAuto(gdImagePtr im, const unsigned int mode); gdImagePtr gdImageCropThreshold(gdImagePtr im, const unsigned int color, const float threshold); int gdImageSetInterpolationMethod(gdImagePtr im, gdInterpolationMethod id); gdImagePtr gdImageScaleBilinear(gdImagePtr im, const unsigned int new_width, const unsigned int new_height); gdImagePtr gdImageScaleBicubic(gdImagePtr src_img, const unsigned int new_width, const unsigned int new_height); gdImagePtr gdImageScaleBicubicFixed(gdImagePtr src, const unsigned int width, const unsigned int height); gdImagePtr gdImageScaleNearestNeighbour(gdImagePtr im, const unsigned int width, const unsigned int height); gdImagePtr gdImageScaleTwoPass(const gdImagePtr pOrigImage, const unsigned int uOrigWidth, const unsigned int uOrigHeight, const unsigned int uNewWidth, const unsigned int uNewHeight); gdImagePtr gdImageScale(const gdImagePtr src, const unsigned int new_width, const unsigned int new_height); gdImagePtr gdImageRotateNearestNeighbour(gdImagePtr src, const float degrees, const int bgColor); gdImagePtr gdImageRotateBilinear(gdImagePtr src, const float degrees, const int bgColor); gdImagePtr gdImageRotateBicubicFixed(gdImagePtr src, const float degrees, const int bgColor); gdImagePtr gdImageRotateGeneric(gdImagePtr src, const float degrees, const int bgColor); gdImagePtr gdImageRotateInterpolated(const gdImagePtr src, const float angle, int bgcolor); typedef enum { GD_AFFINE_TRANSLATE = 0, GD_AFFINE_SCALE, GD_AFFINE_ROTATE, GD_AFFINE_SHEAR_HORIZONTAL, GD_AFFINE_SHEAR_VERTICAL, } gdAffineStandardMatrix; int gdAffineApplyToPointF (gdPointFPtr dst, const gdPointFPtr src, const double affine[6]); int gdAffineInvert (double dst[6], const double src[6]); int gdAffineFlip (double dst_affine[6], const double src_affine[6], const int flip_h, const int flip_v); int gdAffineConcat (double dst[6], const double m1[6], const double m2[6]); int gdAffineIdentity (double dst[6]); int gdAffineScale (double dst[6], const double scale_x, const double scale_y); int gdAffineRotate (double dst[6], const double angle); int gdAffineShearHorizontal (double dst[6], const double angle); int gdAffineShearVertical(double dst[6], const double angle); int gdAffineTranslate (double dst[6], const double offset_x, const double offset_y); double gdAffineExpansion (const double src[6]); int gdAffineRectilinear (const double src[6]); int gdAffineEqual (const double matrix1[6], const double matrix2[6]); int gdTransformAffineGetImage(gdImagePtr *dst, const gdImagePtr src, gdRectPtr src_area, const double affine[6]); int gdTransformAffineCopy(gdImagePtr dst, int dst_x, int dst_y, const gdImagePtr src, gdRectPtr src_region, const double affine[6]); /* gdTransformAffineCopy(gdImagePtr dst, int x0, int y0, int x1, int y1, const gdImagePtr src, int src_width, int src_height, const double affine[6]); */ int gdTransformAffineBoundingBox(gdRectPtr src, const double affine[6], gdRectPtr bbox); #define GD_CMP_IMAGE 1 /* Actual image IS different */ #define GD_CMP_NUM_COLORS 2 /* Number of Colours in pallette differ */ #define GD_CMP_COLOR 4 /* Image colours differ */ #define GD_CMP_SIZE_X 8 /* Image width differs */ #define GD_CMP_SIZE_Y 16 /* Image heights differ */ #define GD_CMP_TRANSPARENT 32 /* Transparent colour */ #define GD_CMP_BACKGROUND 64 /* Background colour */ #define GD_CMP_INTERLACE 128 /* Interlaced setting */ #define GD_CMP_TRUECOLOR 256 /* Truecolor vs palette differs */ /* resolution affects ttf font rendering, particularly hinting */ #define GD_RESOLUTION 96 /* pixels per inch */ #ifdef __cplusplus } #endif /* 2.0.12: this now checks the clipping rectangle */ #define gdImageBoundsSafe(im, x, y) (!((((y) < (im)->cy1) || ((y) > (im)->cy2)) || (((x) < (im)->cx1) || ((x) > (im)->cx2)))) #endif /* GD_H */ PK!]\ext/session/mod_user.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef MOD_USER_H #define MOD_USER_H extern const ps_module ps_mod_user; #define ps_user_ptr &ps_mod_user PS_FUNCS_UPDATE_TIMESTAMP(user); #endif PK!ļext/session/mod_files.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef MOD_FILES_H #define MOD_FILES_H extern const ps_module ps_mod_files; #define ps_files_ptr &ps_mod_files PS_FUNCS_UPDATE_TIMESTAMP(files); #endif PK!,,ext/session/php_session.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef PHP_SESSION_H #define PHP_SESSION_H #include "ext/standard/php_var.h" #if defined(HAVE_HASH_EXT) && !defined(COMPILE_DL_HASH) # include "ext/hash/php_hash.h" #endif #define PHP_SESSION_API 20161017 #include "php_version.h" #define PHP_SESSION_VERSION PHP_VERSION /* save handler macros */ #define PS_NUM_APIS 9 #define PS_OPEN_ARGS void **mod_data, const char *save_path, const char *session_name #define PS_CLOSE_ARGS void **mod_data #define PS_READ_ARGS void **mod_data, zend_string *key, zend_string **val, zend_long maxlifetime #define PS_WRITE_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime #define PS_DESTROY_ARGS void **mod_data, zend_string *key #define PS_GC_ARGS void **mod_data, zend_long maxlifetime, zend_long *nrdels #define PS_CREATE_SID_ARGS void **mod_data #define PS_VALIDATE_SID_ARGS void **mod_data, zend_string *key #define PS_UPDATE_TIMESTAMP_ARGS void **mod_data, zend_string *key, zend_string *val, zend_long maxlifetime typedef struct ps_module_struct { const char *s_name; int (*s_open)(PS_OPEN_ARGS); int (*s_close)(PS_CLOSE_ARGS); int (*s_read)(PS_READ_ARGS); int (*s_write)(PS_WRITE_ARGS); int (*s_destroy)(PS_DESTROY_ARGS); zend_long (*s_gc)(PS_GC_ARGS); zend_string *(*s_create_sid)(PS_CREATE_SID_ARGS); int (*s_validate_sid)(PS_VALIDATE_SID_ARGS); int (*s_update_timestamp)(PS_UPDATE_TIMESTAMP_ARGS); } ps_module; #define PS_GET_MOD_DATA() *mod_data #define PS_SET_MOD_DATA(a) *mod_data = (a) #define PS_OPEN_FUNC(x) int ps_open_##x(PS_OPEN_ARGS) #define PS_CLOSE_FUNC(x) int ps_close_##x(PS_CLOSE_ARGS) #define PS_READ_FUNC(x) int ps_read_##x(PS_READ_ARGS) #define PS_WRITE_FUNC(x) int ps_write_##x(PS_WRITE_ARGS) #define PS_DESTROY_FUNC(x) int ps_delete_##x(PS_DESTROY_ARGS) #define PS_GC_FUNC(x) zend_long ps_gc_##x(PS_GC_ARGS) #define PS_CREATE_SID_FUNC(x) zend_string *ps_create_sid_##x(PS_CREATE_SID_ARGS) #define PS_VALIDATE_SID_FUNC(x) int ps_validate_sid_##x(PS_VALIDATE_SID_ARGS) #define PS_UPDATE_TIMESTAMP_FUNC(x) int ps_update_timestamp_##x(PS_UPDATE_TIMESTAMP_ARGS) /* Legacy save handler module definitions */ #define PS_FUNCS(x) \ PS_OPEN_FUNC(x); \ PS_CLOSE_FUNC(x); \ PS_READ_FUNC(x); \ PS_WRITE_FUNC(x); \ PS_DESTROY_FUNC(x); \ PS_GC_FUNC(x); \ PS_CREATE_SID_FUNC(x) #define PS_MOD(x) \ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ ps_delete_##x, ps_gc_##x, php_session_create_id, \ php_session_validate_sid, php_session_update_timestamp /* Legacy SID creation enabled save handler module definitions */ #define PS_FUNCS_SID(x) \ PS_OPEN_FUNC(x); \ PS_CLOSE_FUNC(x); \ PS_READ_FUNC(x); \ PS_WRITE_FUNC(x); \ PS_DESTROY_FUNC(x); \ PS_GC_FUNC(x); \ PS_CREATE_SID_FUNC(x); \ PS_VALIDATE_SID_FUNC(x); \ PS_UPDATE_TIMESTAMP_FUNC(x); #define PS_MOD_SID(x) \ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \ php_session_validate_sid, php_session_update_timestamp /* Update timestamp enabled save handler module definitions New save handlers should use this API */ #define PS_FUNCS_UPDATE_TIMESTAMP(x) \ PS_OPEN_FUNC(x); \ PS_CLOSE_FUNC(x); \ PS_READ_FUNC(x); \ PS_WRITE_FUNC(x); \ PS_DESTROY_FUNC(x); \ PS_GC_FUNC(x); \ PS_CREATE_SID_FUNC(x); \ PS_VALIDATE_SID_FUNC(x); \ PS_UPDATE_TIMESTAMP_FUNC(x); #define PS_MOD_UPDATE_TIMESTAMP(x) \ #x, ps_open_##x, ps_close_##x, ps_read_##x, ps_write_##x, \ ps_delete_##x, ps_gc_##x, ps_create_sid_##x, \ ps_validate_sid_##x, ps_update_timestamp_##x typedef enum { php_session_disabled, php_session_none, php_session_active } php_session_status; typedef struct _php_session_rfc1867_progress { size_t sname_len; zval sid; smart_str key; zend_long update_step; zend_long next_update; double next_update_time; zend_bool cancel_upload; zend_bool apply_trans_sid; size_t content_length; zval data; /* the array exported to session data */ zval *post_bytes_processed; /* data["bytes_processed"] */ zval files; /* data["files"] array */ zval current_file; /* array of currently uploading file */ zval *current_file_bytes_processed; } php_session_rfc1867_progress; typedef struct _php_ps_globals { char *save_path; char *session_name; zend_string *id; char *extern_referer_chk; char *cache_limiter; zend_long cookie_lifetime; char *cookie_path; char *cookie_domain; zend_bool cookie_secure; zend_bool cookie_httponly; char *cookie_samesite; const ps_module *mod; const ps_module *default_mod; void *mod_data; php_session_status session_status; zend_long gc_probability; zend_long gc_divisor; zend_long gc_maxlifetime; int module_number; zend_long cache_expire; union { zval names[PS_NUM_APIS]; struct { zval ps_open; zval ps_close; zval ps_read; zval ps_write; zval ps_destroy; zval ps_gc; zval ps_create_sid; zval ps_validate_sid; zval ps_update_timestamp; } name; } mod_user_names; int mod_user_implemented; int mod_user_is_open; const struct ps_serializer_struct *serializer; zval http_session_vars; zend_bool auto_start; zend_bool use_cookies; zend_bool use_only_cookies; zend_bool use_trans_sid; /* contains the INI value of whether to use trans-sid */ zend_long sid_length; zend_long sid_bits_per_character; int send_cookie; int define_sid; php_session_rfc1867_progress *rfc1867_progress; zend_bool rfc1867_enabled; /* session.upload_progress.enabled */ zend_bool rfc1867_cleanup; /* session.upload_progress.cleanup */ char *rfc1867_prefix; /* session.upload_progress.prefix */ char *rfc1867_name; /* session.upload_progress.name */ zend_long rfc1867_freq; /* session.upload_progress.freq */ double rfc1867_min_freq; /* session.upload_progress.min_freq */ zend_bool use_strict_mode; /* whether or not PHP accepts unknown session ids */ zend_bool lazy_write; /* omit session write when it is possible */ zend_bool in_save_handler; /* state if session is in save handler or not */ zend_bool set_handler; /* state if session module i setting handler or not */ zend_string *session_vars; /* serialized original session data */ } php_ps_globals; typedef php_ps_globals zend_ps_globals; extern zend_module_entry session_module_entry; #define phpext_session_ptr &session_module_entry #ifdef ZTS #define PS(v) ZEND_TSRMG(ps_globals_id, php_ps_globals *, v) #ifdef COMPILE_DL_SESSION ZEND_TSRMLS_CACHE_EXTERN() #endif #else #define PS(v) (ps_globals.v) #endif #define PS_SERIALIZER_ENCODE_ARGS void #define PS_SERIALIZER_DECODE_ARGS const char *val, size_t vallen typedef struct ps_serializer_struct { const char *name; zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS); int (*decode)(PS_SERIALIZER_DECODE_ARGS); } ps_serializer; #define PS_SERIALIZER_ENCODE_NAME(x) ps_srlzr_encode_##x #define PS_SERIALIZER_DECODE_NAME(x) ps_srlzr_decode_##x #define PS_SERIALIZER_ENCODE_FUNC(x) \ zend_string *PS_SERIALIZER_ENCODE_NAME(x)(PS_SERIALIZER_ENCODE_ARGS) #define PS_SERIALIZER_DECODE_FUNC(x) \ int PS_SERIALIZER_DECODE_NAME(x)(PS_SERIALIZER_DECODE_ARGS) #define PS_SERIALIZER_FUNCS(x) \ PS_SERIALIZER_ENCODE_FUNC(x); \ PS_SERIALIZER_DECODE_FUNC(x) #define PS_SERIALIZER_ENTRY(x) \ { #x, PS_SERIALIZER_ENCODE_NAME(x), PS_SERIALIZER_DECODE_NAME(x) } /* default create id function */ PHPAPI zend_string *php_session_create_id(PS_CREATE_SID_ARGS); /* Dummy PS module functions */ PHPAPI int php_session_validate_sid(PS_VALIDATE_SID_ARGS); PHPAPI int php_session_update_timestamp(PS_UPDATE_TIMESTAMP_ARGS); PHPAPI void session_adapt_url(const char *, size_t, char **, size_t *); PHPAPI int php_session_destroy(void); PHPAPI void php_add_session_var(zend_string *name); PHPAPI zval *php_set_session_var(zend_string *name, zval *state_val, php_unserialize_data_t *var_hash); PHPAPI zval *php_get_session_var(zend_string *name); PHPAPI int php_session_register_module(const ps_module *); PHPAPI int php_session_register_serializer(const char *name, zend_string *(*encode)(PS_SERIALIZER_ENCODE_ARGS), int (*decode)(PS_SERIALIZER_DECODE_ARGS)); PHPAPI void php_session_set_id(char *id); PHPAPI int php_session_start(void); PHPAPI int php_session_flush(int write); PHPAPI const ps_module *_php_find_ps_module(char *name); PHPAPI const ps_serializer *_php_find_ps_serializer(char *name); PHPAPI int php_session_valid_key(const char *key); PHPAPI int php_session_reset_id(void); #define PS_ADD_VARL(name) do { \ php_add_session_var(name); \ } while (0) #define PS_ADD_VAR(name) PS_ADD_VARL(name) #define PS_DEL_VARL(name) do { \ if (!Z_ISNULL(PS(http_session_vars))) { \ zend_hash_del(Z_ARRVAL(PS(http_session_vars)), name); \ } \ } while (0) #define PS_ENCODE_VARS \ zend_string *key; \ zend_ulong num_key; \ zval *struc; #define PS_ENCODE_LOOP(code) do { \ HashTable *_ht = Z_ARRVAL_P(Z_REFVAL(PS(http_session_vars))); \ ZEND_HASH_FOREACH_KEY(_ht, num_key, key) { \ if (key == NULL) { \ php_error_docref(NULL, E_NOTICE, \ "Skipping numeric key " ZEND_LONG_FMT, num_key);\ continue; \ } \ if ((struc = php_get_session_var(key))) { \ code; \ } \ } ZEND_HASH_FOREACH_END(); \ } while(0) PHPAPI ZEND_EXTERN_MODULE_GLOBALS(ps) void php_session_auto_start(void *data); #define PS_CLASS_NAME "SessionHandler" extern PHPAPI zend_class_entry *php_session_class_entry; #define PS_IFACE_NAME "SessionHandlerInterface" extern PHPAPI zend_class_entry *php_session_iface_entry; #define PS_SID_IFACE_NAME "SessionIdInterface" extern PHPAPI zend_class_entry *php_session_id_iface_entry; #define PS_UPDATE_TIMESTAMP_IFACE_NAME "SessionUpdateTimestampHandlerInterface" extern PHPAPI zend_class_entry *php_session_update_timestamp_iface_entry; extern PHP_METHOD(SessionHandler, open); extern PHP_METHOD(SessionHandler, close); extern PHP_METHOD(SessionHandler, read); extern PHP_METHOD(SessionHandler, write); extern PHP_METHOD(SessionHandler, destroy); extern PHP_METHOD(SessionHandler, gc); extern PHP_METHOD(SessionHandler, create_sid); extern PHP_METHOD(SessionHandler, validateId); extern PHP_METHOD(SessionHandler, updateTimestamp); #endif PK!qźbbext/xml/expat_compat.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sterling Hughes | +----------------------------------------------------------------------+ */ #ifndef PHP_EXPAT_COMPAT_H #define PHP_EXPAT_COMPAT_H #ifdef PHP_WIN32 #include "config.w32.h" #else #include #endif #ifdef PHP_WIN32 # define PHP_XML_API __declspec(dllexport) #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_XML_API __attribute__ ((visibility("default"))) #else # define PHP_XML_API #endif #if !defined(HAVE_LIBEXPAT) && defined(HAVE_LIBXML) #define LIBXML_EXPAT_COMPAT 1 #include "php.h" #include "php_compat.h" #include #include #include #include /* For compatibility with the misspelled version. */ #define _ns_seperator _ns_separator typedef xmlChar XML_Char; typedef void (*XML_StartElementHandler)(void *, const XML_Char *, const XML_Char **); typedef void (*XML_EndElementHandler)(void *, const XML_Char *); typedef void (*XML_CharacterDataHandler)(void *, const XML_Char *, int); typedef void (*XML_ProcessingInstructionHandler)(void *, const XML_Char *, const XML_Char *); typedef void (*XML_CommentHandler)(void *, const XML_Char *); typedef void (*XML_DefaultHandler)(void *, const XML_Char *, int); typedef void (*XML_UnparsedEntityDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); typedef void (*XML_NotationDeclHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); typedef int (*XML_ExternalEntityRefHandler)(void *, const XML_Char *, const XML_Char *, const XML_Char *, const XML_Char *); typedef void (*XML_StartNamespaceDeclHandler)(void *, const XML_Char *, const XML_Char *); typedef void (*XML_EndNamespaceDeclHandler)(void *, const XML_Char *); typedef struct _XML_Memory_Handling_Suite { void *(*malloc_fcn)(size_t size); void *(*realloc_fcn)(void *ptr, size_t size); void (*free_fcn)(void *ptr); } XML_Memory_Handling_Suite; typedef struct _XML_Parser { int use_namespace; xmlChar *_ns_separator; void *user; xmlParserCtxtPtr parser; XML_StartElementHandler h_start_element; XML_EndElementHandler h_end_element; XML_CharacterDataHandler h_cdata; XML_ProcessingInstructionHandler h_pi; XML_CommentHandler h_comment; XML_DefaultHandler h_default; XML_UnparsedEntityDeclHandler h_unparsed_entity_decl; XML_NotationDeclHandler h_notation_decl; XML_ExternalEntityRefHandler h_external_entity_ref; XML_StartNamespaceDeclHandler h_start_ns; XML_EndNamespaceDeclHandler h_end_ns; } *XML_Parser; enum XML_Error { XML_ERROR_NONE, XML_ERROR_NO_MEMORY, XML_ERROR_SYNTAX, XML_ERROR_NO_ELEMENTS, XML_ERROR_INVALID_TOKEN, XML_ERROR_UNCLOSED_TOKEN, XML_ERROR_PARTIAL_CHAR, XML_ERROR_TAG_MISMATCH, XML_ERROR_DUPLICATE_ATTRIBUTE, XML_ERROR_JUNK_AFTER_DOC_ELEMENT, XML_ERROR_PARAM_ENTITY_REF, XML_ERROR_UNDEFINED_ENTITY, XML_ERROR_RECURSIVE_ENTITY_REF, XML_ERROR_ASYNC_ENTITY, XML_ERROR_BAD_CHAR_REF, XML_ERROR_BINARY_ENTITY_REF, XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF, XML_ERROR_MISPLACED_XML_PI, XML_ERROR_UNKNOWN_ENCODING, XML_ERROR_INCORRECT_ENCODING, XML_ERROR_UNCLOSED_CDATA_SECTION, XML_ERROR_EXTERNAL_ENTITY_HANDLING, XML_ERROR_NOT_STANDALONE, XML_ERROR_UNEXPECTED_STATE, XML_ERROR_ENTITY_DECLARED_IN_PE, XML_ERROR_FEATURE_REQUIRES_XML_DTD, XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING }; enum XML_Content_Type { XML_CTYPE_EMPTY = 1, XML_CTYPE_ANY, XML_CTYPE_MIXED, XML_CTYPE_NAME, XML_CTYPE_CHOICE, XML_CTYPE_SEQ }; PHP_XML_API XML_Parser XML_ParserCreate(const XML_Char *); PHP_XML_API XML_Parser XML_ParserCreateNS(const XML_Char *, const XML_Char); PHP_XML_API XML_Parser XML_ParserCreate_MM(const XML_Char *, const XML_Memory_Handling_Suite *, const XML_Char *); PHP_XML_API void XML_SetUserData(XML_Parser, void *); PHP_XML_API void *XML_GetUserData(XML_Parser); PHP_XML_API void XML_SetElementHandler(XML_Parser, XML_StartElementHandler, XML_EndElementHandler); PHP_XML_API void XML_SetCharacterDataHandler(XML_Parser, XML_CharacterDataHandler); PHP_XML_API void XML_SetProcessingInstructionHandler(XML_Parser, XML_ProcessingInstructionHandler); PHP_XML_API void XML_SetDefaultHandler(XML_Parser, XML_DefaultHandler); PHP_XML_API void XML_SetUnparsedEntityDeclHandler(XML_Parser, XML_UnparsedEntityDeclHandler); PHP_XML_API void XML_SetNotationDeclHandler(XML_Parser, XML_NotationDeclHandler); PHP_XML_API void XML_SetExternalEntityRefHandler(XML_Parser, XML_ExternalEntityRefHandler); PHP_XML_API void XML_SetStartNamespaceDeclHandler(XML_Parser, XML_StartNamespaceDeclHandler); PHP_XML_API void XML_SetEndNamespaceDeclHandler(XML_Parser, XML_EndNamespaceDeclHandler); PHP_XML_API int XML_Parse(XML_Parser, const XML_Char *, int data_len, int is_final); PHP_XML_API int XML_GetErrorCode(XML_Parser); PHP_XML_API const XML_Char *XML_ErrorString(int); PHP_XML_API int XML_GetCurrentLineNumber(XML_Parser); PHP_XML_API int XML_GetCurrentColumnNumber(XML_Parser); PHP_XML_API int XML_GetCurrentByteIndex(XML_Parser); PHP_XML_API int XML_GetCurrentByteCount(XML_Parser); PHP_XML_API const XML_Char *XML_ExpatVersion(void); PHP_XML_API void XML_ParserFree(XML_Parser); #elif defined(HAVE_LIBEXPAT) #include "php.h" #include #endif /* HAVE_LIBEXPAT */ #endif /* PHP_EXPAT_COMPAT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!5ext/xml/php_xml.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stig Sæther Bakken | | Thies C. Arntzen | | Sterling Hughes | +----------------------------------------------------------------------+ */ #ifndef PHP_XML_H #define PHP_XML_H #ifdef HAVE_XML extern zend_module_entry xml_module_entry; #define xml_module_ptr &xml_module_entry #include "php_version.h" #define PHP_XML_VERSION PHP_VERSION #else #define xml_module_ptr NULL #endif #ifdef HAVE_XML #include "expat_compat.h" #ifdef XML_UNICODE #error "UTF-16 Unicode support not implemented!" #endif ZEND_BEGIN_MODULE_GLOBALS(xml) XML_Char *default_encoding; ZEND_END_MODULE_GLOBALS(xml) typedef struct { int case_folding; XML_Parser parser; XML_Char *target_encoding; zval index; zval startElementHandler; zval endElementHandler; zval characterDataHandler; zval processingInstructionHandler; zval defaultHandler; zval unparsedEntityDeclHandler; zval notationDeclHandler; zval externalEntityRefHandler; zval unknownEncodingHandler; zval startNamespaceDeclHandler; zval endNamespaceDeclHandler; zend_function *startElementPtr; zend_function *endElementPtr; zend_function *characterDataPtr; zend_function *processingInstructionPtr; zend_function *defaultPtr; zend_function *unparsedEntityDeclPtr; zend_function *notationDeclPtr; zend_function *externalEntityRefPtr; zend_function *unknownEncodingPtr; zend_function *startNamespaceDeclPtr; zend_function *endNamespaceDeclPtr; zval object; zval data; zval info; int level; int toffset; int curtag; zval *ctag; char **ltags; int lastwasopen; int skipwhite; int isparsing; XML_Char *baseURI; } xml_parser; typedef struct { XML_Char *name; char (*decoding_function)(unsigned short); unsigned short (*encoding_function)(unsigned char); } xml_encoding; enum php_xml_option { PHP_XML_OPTION_CASE_FOLDING = 1, PHP_XML_OPTION_TARGET_ENCODING, PHP_XML_OPTION_SKIP_TAGSTART, PHP_XML_OPTION_SKIP_WHITE }; /* for xml_parse_into_struct */ #define XML_MAXLEVEL 255 /* XXX this should be dynamic */ PHP_FUNCTION(xml_parser_create); PHP_FUNCTION(xml_parser_create_ns); PHP_FUNCTION(xml_set_object); PHP_FUNCTION(xml_set_element_handler); PHP_FUNCTION(xml_set_character_data_handler); PHP_FUNCTION(xml_set_processing_instruction_handler); PHP_FUNCTION(xml_set_default_handler); PHP_FUNCTION(xml_set_unparsed_entity_decl_handler); PHP_FUNCTION(xml_set_notation_decl_handler); PHP_FUNCTION(xml_set_external_entity_ref_handler); PHP_FUNCTION(xml_set_start_namespace_decl_handler); PHP_FUNCTION(xml_set_end_namespace_decl_handler); PHP_FUNCTION(xml_parse); PHP_FUNCTION(xml_get_error_code); PHP_FUNCTION(xml_error_string); PHP_FUNCTION(xml_get_current_line_number); PHP_FUNCTION(xml_get_current_column_number); PHP_FUNCTION(xml_get_current_byte_index); PHP_FUNCTION(xml_parser_free); PHP_FUNCTION(xml_parser_set_option); PHP_FUNCTION(xml_parser_get_option); PHP_FUNCTION(utf8_encode); PHP_FUNCTION(utf8_decode); PHP_FUNCTION(xml_parse_into_struct); PHP_XML_API char *_xml_zval_strdup(zval *); PHP_XML_API zend_string *xml_utf8_decode(const XML_Char *, size_t, const XML_Char *); PHP_XML_API zend_string *xml_utf8_encode(const char *, size_t, const XML_Char *); #endif /* HAVE_LIBEXPAT */ #define phpext_xml_ptr xml_module_ptr #define XML(v) ZEND_MODULE_GLOBALS_ACCESSOR(xml, v) #if defined(ZTS) && defined(COMPILE_DL_XML) ZEND_TSRMLS_CACHE_EXTERN() #endif #endif /* PHP_XML_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!ext/hash/php_hash_gost.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_GOST_H #define PHP_HASH_GOST_H #include "ext/standard/basic_functions.h" /* GOST context */ typedef struct { uint32_t state[16]; uint32_t count[2]; unsigned char length; unsigned char buffer[32]; const uint32_t (*tables)[4][256]; } PHP_GOST_CTX; PHP_HASH_API void PHP_GOSTInit(PHP_GOST_CTX *); PHP_HASH_API void PHP_GOSTUpdate(PHP_GOST_CTX *, const unsigned char *, size_t); PHP_HASH_API void PHP_GOSTFinal(unsigned char[64], PHP_GOST_CTX *); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!ʹext/hash/php_hash_haval.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_HAVAL_H #define PHP_HASH_HAVAL_H #include "ext/standard/basic_functions.h" /* HAVAL context. */ typedef struct { uint32_t state[8]; uint32_t count[2]; unsigned char buffer[128]; char passes; short output; void (*Transform)(uint32_t state[8], const unsigned char block[128]); } PHP_HAVAL_CTX; #define PHP_HASH_HAVAL_INIT_DECL(p,b) PHP_HASH_API void PHP_##p##HAVAL##b##Init(PHP_HAVAL_CTX *); \ PHP_HASH_API void PHP_HAVAL##b##Final(unsigned char*, PHP_HAVAL_CTX *); PHP_HASH_API void PHP_HAVALUpdate(PHP_HAVAL_CTX *, const unsigned char *, unsigned int); PHP_HASH_HAVAL_INIT_DECL(3,128) PHP_HASH_HAVAL_INIT_DECL(3,160) PHP_HASH_HAVAL_INIT_DECL(3,192) PHP_HASH_HAVAL_INIT_DECL(3,224) PHP_HASH_HAVAL_INIT_DECL(3,256) PHP_HASH_HAVAL_INIT_DECL(4,128) PHP_HASH_HAVAL_INIT_DECL(4,160) PHP_HASH_HAVAL_INIT_DECL(4,192) PHP_HASH_HAVAL_INIT_DECL(4,224) PHP_HASH_HAVAL_INIT_DECL(4,256) PHP_HASH_HAVAL_INIT_DECL(5,128) PHP_HASH_HAVAL_INIT_DECL(5,160) PHP_HASH_HAVAL_INIT_DECL(5,192) PHP_HASH_HAVAL_INIT_DECL(5,224) PHP_HASH_HAVAL_INIT_DECL(5,256) #endif PK!#E ext/hash/php_hash_fnv.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Maclean | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_FNV_H #define PHP_HASH_FNV_H #define PHP_FNV1_32_INIT ((uint32_t)0x811c9dc5) #define PHP_FNV1_32A_INIT PHP_FNV1_32_INIT #define PHP_FNV_32_PRIME ((uint32_t)0x01000193) #define PHP_FNV1_64_INIT ((uint64_t)0xcbf29ce484222325ULL) #define PHP_FNV1A_64_INIT FNV1_64_INIT #define PHP_FNV_64_PRIME ((uint64_t)0x100000001b3ULL) /* * hash types */ enum php_fnv_type { PHP_FNV_NONE = 0, /* invalid FNV hash type */ PHP_FNV0_32 = 1, /* FNV-0 32 bit hash */ PHP_FNV1_32 = 2, /* FNV-1 32 bit hash */ PHP_FNV1a_32 = 3, /* FNV-1a 32 bit hash */ PHP_FNV0_64 = 4, /* FNV-0 64 bit hash */ PHP_FNV1_64 = 5, /* FNV-1 64 bit hash */ PHP_FNV1a_64 = 6, /* FNV-1a 64 bit hash */ }; typedef struct { uint32_t state; } PHP_FNV132_CTX; typedef struct { uint64_t state; } PHP_FNV164_CTX; PHP_HASH_API void PHP_FNV132Init(PHP_FNV132_CTX *context); PHP_HASH_API void PHP_FNV132Update(PHP_FNV132_CTX *context, const unsigned char *input, unsigned int inputLen); PHP_HASH_API void PHP_FNV1a32Update(PHP_FNV132_CTX *context, const unsigned char *input, unsigned int inputLen); PHP_HASH_API void PHP_FNV132Final(unsigned char digest[16], PHP_FNV132_CTX * context); PHP_HASH_API void PHP_FNV164Init(PHP_FNV164_CTX *context); PHP_HASH_API void PHP_FNV164Update(PHP_FNV164_CTX *context, const unsigned char *input, unsigned int inputLen); PHP_HASH_API void PHP_FNV1a64Update(PHP_FNV164_CTX *context, const unsigned char *input, unsigned int inputLen); PHP_HASH_API void PHP_FNV164Final(unsigned char digest[16], PHP_FNV164_CTX * context); static uint32_t fnv_32_buf(void *buf, size_t len, uint32_t hval, int alternate); static uint64_t fnv_64_buf(void *buf, size_t len, uint64_t hval, int alternate); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!68jext/hash/php_hash_joaat.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Martin Jansen | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_JOAAT_H #define PHP_HASH_JOAAT_H typedef struct { uint32_t state; } PHP_JOAAT_CTX; PHP_HASH_API void PHP_JOAATInit(PHP_JOAAT_CTX *context); PHP_HASH_API void PHP_JOAATUpdate(PHP_JOAAT_CTX *context, const unsigned char *input, unsigned int inputLen); PHP_HASH_API void PHP_JOAATFinal(unsigned char digest[16], PHP_JOAAT_CTX * context); static uint32_t joaat_buf(void *buf, size_t len, uint32_t hval); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!o<"ext/hash/php_hash_whirlpool.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_WHIRLPOOL_H #define PHP_HASH_WHIRLPOOL_H /* WHIRLPOOL context */ typedef struct { uint64_t state[8]; unsigned char bitlength[32]; struct { int pos; int bits; unsigned char data[64]; } buffer; } PHP_WHIRLPOOL_CTX; PHP_HASH_API void PHP_WHIRLPOOLInit(PHP_WHIRLPOOL_CTX *); PHP_HASH_API void PHP_WHIRLPOOLUpdate(PHP_WHIRLPOOL_CTX *, const unsigned char *, size_t); PHP_HASH_API void PHP_WHIRLPOOLFinal(unsigned char[64], PHP_WHIRLPOOL_CTX *); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!* ext/hash/php_hash_ripemd.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_RIPEMD_H #define PHP_HASH_RIPEMD_H #include "ext/standard/basic_functions.h" /* RIPEMD context. */ typedef struct { uint32_t state[4]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } PHP_RIPEMD128_CTX; typedef struct { uint32_t state[5]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } PHP_RIPEMD160_CTX; typedef struct { uint32_t state[8]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } PHP_RIPEMD256_CTX; typedef struct { uint32_t state[10]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } PHP_RIPEMD320_CTX; PHP_HASH_API void PHP_RIPEMD128Init(PHP_RIPEMD128_CTX *); PHP_HASH_API void PHP_RIPEMD128Update(PHP_RIPEMD128_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_RIPEMD128Final(unsigned char[16], PHP_RIPEMD128_CTX *); PHP_HASH_API void PHP_RIPEMD160Init(PHP_RIPEMD160_CTX *); PHP_HASH_API void PHP_RIPEMD160Update(PHP_RIPEMD160_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_RIPEMD160Final(unsigned char[20], PHP_RIPEMD160_CTX *); PHP_HASH_API void PHP_RIPEMD256Init(PHP_RIPEMD256_CTX *); PHP_HASH_API void PHP_RIPEMD256Update(PHP_RIPEMD256_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_RIPEMD256Final(unsigned char[32], PHP_RIPEMD256_CTX *); PHP_HASH_API void PHP_RIPEMD320Init(PHP_RIPEMD320_CTX *); PHP_HASH_API void PHP_RIPEMD320Update(PHP_RIPEMD320_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_RIPEMD320Final(unsigned char[40], PHP_RIPEMD320_CTX *); #endif /* PHP_HASH_RIPEMD_H */ PK!9%%ext/hash/php_hash_snefru.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_SNEFRU_H #define PHP_HASH_SNEFRU_H /* SNEFRU-2.5a with 8 passes and 256 bit hash output * AKA "Xerox Secure Hash Function" */ #include "ext/standard/basic_functions.h" /* SNEFRU context */ typedef struct { uint32_t state[16]; uint32_t count[2]; unsigned char length; unsigned char buffer[32]; } PHP_SNEFRU_CTX; PHP_HASH_API void PHP_SNEFRUInit(PHP_SNEFRU_CTX *); PHP_HASH_API void PHP_SNEFRUUpdate(PHP_SNEFRU_CTX *, const unsigned char *, size_t); PHP_HASH_API void PHP_SNEFRUFinal(unsigned char[32], PHP_SNEFRU_CTX *); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!l8ext/hash/php_hash_tiger.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_TIGER_H #define PHP_HASH_TIGER_H /* TIGER context */ typedef struct { uint64_t state[3]; uint64_t passed; unsigned char buffer[64]; unsigned int passes:1; unsigned int length:7; } PHP_TIGER_CTX; PHP_HASH_API void PHP_3TIGERInit(PHP_TIGER_CTX *context); PHP_HASH_API void PHP_4TIGERInit(PHP_TIGER_CTX *context); PHP_HASH_API void PHP_TIGERUpdate(PHP_TIGER_CTX *context, const unsigned char *input, size_t len); PHP_HASH_API void PHP_TIGER128Final(unsigned char digest[16], PHP_TIGER_CTX *context); PHP_HASH_API void PHP_TIGER160Final(unsigned char digest[20], PHP_TIGER_CTX *context); PHP_HASH_API void PHP_TIGER192Final(unsigned char digest[24], PHP_TIGER_CTX *context); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!0 ext/hash/php_hash_sha3.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_SHA3_H #define PHP_HASH_SHA3_H #include "php.h" typedef struct { #ifdef HAVE_SLOW_HASH3 unsigned char state[200]; // 5 * 5 * sizeof(uint64) uint32_t pos; #else void *hashinstance; #endif } PHP_SHA3_CTX; typedef PHP_SHA3_CTX PHP_SHA3_224_CTX; typedef PHP_SHA3_CTX PHP_SHA3_256_CTX; typedef PHP_SHA3_CTX PHP_SHA3_384_CTX; typedef PHP_SHA3_CTX PHP_SHA3_512_CTX; PHP_HASH_API void PHP_SHA3224Init(PHP_SHA3_224_CTX*); PHP_HASH_API void PHP_SHA3224Update(PHP_SHA3_224_CTX*, const unsigned char*, unsigned int); PHP_HASH_API void PHP_SAH3224Final(unsigned char[32], PHP_SHA3_224_CTX*); PHP_HASH_API void PHP_SHA3256Init(PHP_SHA3_256_CTX*); PHP_HASH_API void PHP_SHA3256Update(PHP_SHA3_256_CTX*, const unsigned char*, unsigned int); PHP_HASH_API void PHP_SAH3256Final(unsigned char[32], PHP_SHA3_256_CTX*); PHP_HASH_API void PHP_SHA3384Init(PHP_SHA3_384_CTX*); PHP_HASH_API void PHP_SHA3384Update(PHP_SHA3_384_CTX*, const unsigned char*, unsigned int); PHP_HASH_API void PHP_SAH3384Final(unsigned char[32], PHP_SHA3_384_CTX*); PHP_HASH_API void PHP_SHA3512Init(PHP_SHA3_512_CTX*); PHP_HASH_API void PHP_SHA3512Update(PHP_SHA3_512_CTX*, const unsigned char*, unsigned int); PHP_HASH_API void PHP_SAH3512Final(unsigned char[32], PHP_SHA3_512_CTX*); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!:ext/hash/php_hash.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_H #define PHP_HASH_H #include "php.h" #define PHP_HASH_EXTNAME "hash" #define PHP_HASH_VERSION PHP_VERSION #define PHP_MHASH_VERSION PHP_VERSION #define PHP_HASH_HMAC 0x0001 #define L64 INT64_C typedef void (*php_hash_init_func_t)(void *context); typedef void (*php_hash_update_func_t)(void *context, const unsigned char *buf, unsigned int count); typedef void (*php_hash_final_func_t)(unsigned char *digest, void *context); typedef int (*php_hash_copy_func_t)(const void *ops, void *orig_context, void *dest_context); typedef struct _php_hash_ops { php_hash_init_func_t hash_init; php_hash_update_func_t hash_update; php_hash_final_func_t hash_final; php_hash_copy_func_t hash_copy; int digest_size; int block_size; int context_size; unsigned is_crypto: 1; } php_hash_ops; typedef struct _php_hashcontext_object { const php_hash_ops *ops; void *context; zend_long options; unsigned char *key; zend_object std; } php_hashcontext_object; static inline php_hashcontext_object *php_hashcontext_from_object(zend_object *obj) { return ((php_hashcontext_object*)(obj + 1)) - 1; } extern const php_hash_ops php_hash_md2_ops; extern const php_hash_ops php_hash_md4_ops; extern const php_hash_ops php_hash_md5_ops; extern const php_hash_ops php_hash_sha1_ops; extern const php_hash_ops php_hash_sha224_ops; extern const php_hash_ops php_hash_sha256_ops; extern const php_hash_ops php_hash_sha384_ops; extern const php_hash_ops php_hash_sha512_ops; extern const php_hash_ops php_hash_sha512_256_ops; extern const php_hash_ops php_hash_sha512_224_ops; extern const php_hash_ops php_hash_sha3_224_ops; extern const php_hash_ops php_hash_sha3_256_ops; extern const php_hash_ops php_hash_sha3_384_ops; extern const php_hash_ops php_hash_sha3_512_ops; extern const php_hash_ops php_hash_ripemd128_ops; extern const php_hash_ops php_hash_ripemd160_ops; extern const php_hash_ops php_hash_ripemd256_ops; extern const php_hash_ops php_hash_ripemd320_ops; extern const php_hash_ops php_hash_whirlpool_ops; extern const php_hash_ops php_hash_3tiger128_ops; extern const php_hash_ops php_hash_3tiger160_ops; extern const php_hash_ops php_hash_3tiger192_ops; extern const php_hash_ops php_hash_4tiger128_ops; extern const php_hash_ops php_hash_4tiger160_ops; extern const php_hash_ops php_hash_4tiger192_ops; extern const php_hash_ops php_hash_snefru_ops; extern const php_hash_ops php_hash_gost_ops; extern const php_hash_ops php_hash_gost_crypto_ops; extern const php_hash_ops php_hash_adler32_ops; extern const php_hash_ops php_hash_crc32_ops; extern const php_hash_ops php_hash_crc32b_ops; extern const php_hash_ops php_hash_fnv132_ops; extern const php_hash_ops php_hash_fnv1a32_ops; extern const php_hash_ops php_hash_fnv164_ops; extern const php_hash_ops php_hash_fnv1a64_ops; extern const php_hash_ops php_hash_joaat_ops; #define PHP_HASH_HAVAL_OPS(p,b) extern const php_hash_ops php_hash_##p##haval##b##_ops; PHP_HASH_HAVAL_OPS(3,128) PHP_HASH_HAVAL_OPS(3,160) PHP_HASH_HAVAL_OPS(3,192) PHP_HASH_HAVAL_OPS(3,224) PHP_HASH_HAVAL_OPS(3,256) PHP_HASH_HAVAL_OPS(4,128) PHP_HASH_HAVAL_OPS(4,160) PHP_HASH_HAVAL_OPS(4,192) PHP_HASH_HAVAL_OPS(4,224) PHP_HASH_HAVAL_OPS(4,256) PHP_HASH_HAVAL_OPS(5,128) PHP_HASH_HAVAL_OPS(5,160) PHP_HASH_HAVAL_OPS(5,192) PHP_HASH_HAVAL_OPS(5,224) PHP_HASH_HAVAL_OPS(5,256) extern zend_module_entry hash_module_entry; #define phpext_hash_ptr &hash_module_entry #ifdef PHP_WIN32 # define PHP_HASH_API __declspec(dllexport) #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_HASH_API __attribute__ ((visibility("default"))) #else # define PHP_HASH_API #endif #ifdef ZTS #include "TSRM.h" #endif PHP_FUNCTION(hash); PHP_FUNCTION(hash_file); PHP_FUNCTION(hash_hkdf); PHP_FUNCTION(hash_hmac); PHP_FUNCTION(hash_hmac_file); PHP_FUNCTION(hash_init); PHP_FUNCTION(hash_update); PHP_FUNCTION(hash_update_stream); PHP_FUNCTION(hash_update_file); PHP_FUNCTION(hash_final); PHP_FUNCTION(hash_algos); PHP_FUNCTION(hash_pbkdf2); PHP_FUNCTION(hash_equals); extern PHP_HASH_API zend_class_entry *php_hashcontext_ce; PHP_HASH_API const php_hash_ops *php_hash_fetch_ops(const char *algo, size_t algo_len); PHP_HASH_API void php_hash_register_algo(const char *algo, const php_hash_ops *ops); PHP_HASH_API int php_hash_copy(const void *ops, void *orig_context, void *dest_context); static inline void php_hash_bin2hex(char *out, const unsigned char *in, int in_len) { static const char hexits[17] = "0123456789abcdef"; int i; for(i = 0; i < in_len; i++) { out[i * 2] = hexits[in[i] >> 4]; out[(i * 2) + 1] = hexits[in[i] & 0x0F]; } } #endif /* PHP_HASH_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!&lOZZext/hash/php_hash_crc32.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_CRC32_H #define PHP_HASH_CRC32_H #include "ext/standard/basic_functions.h" typedef struct { uint32_t state; } PHP_CRC32_CTX; PHP_HASH_API void PHP_CRC32Init(PHP_CRC32_CTX *context); PHP_HASH_API void PHP_CRC32Update(PHP_CRC32_CTX *context, const unsigned char *input, size_t len); PHP_HASH_API void PHP_CRC32BUpdate(PHP_CRC32_CTX *context, const unsigned char *input, size_t len); PHP_HASH_API void PHP_CRC32Final(unsigned char digest[4], PHP_CRC32_CTX *context); PHP_HASH_API int PHP_CRC32Copy(const php_hash_ops *ops, PHP_CRC32_CTX *orig_context, PHP_CRC32_CTX *copy_context); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!k>>ext/hash/php_hash_sha.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | SHA1 Author: Stefan Esser | | SHA256 Author: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_SHA_H #define PHP_HASH_SHA_H /* When SHA is removed from Core, the ext/standard/sha1.c file can be removed and the ext/standard/sha1.h file can be reduced to: #define PHP_HASH_SHA1_NOT_IN_CORE #include "ext/hash/php_hash_sha.h" Don't forget to remove sha1() and sha1_file() from basic_functions.c */ #include "ext/standard/sha1.h" #include "ext/standard/basic_functions.h" #ifdef PHP_HASH_SHA1_NOT_IN_CORE /* SHA1 context. */ typedef struct { uint32_t state[5]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 */ unsigned char buffer[64]; /* input buffer */ } PHP_SHA1_CTX; PHP_HASH_API void PHP_SHA1Init(PHP_SHA1_CTX *); PHP_HASH_API void PHP_SHA1Update(PHP_SHA1_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_SHA1Final(unsigned char[20], PHP_SHA1_CTX *); PHP_FUNCTION(sha1); PHP_FUNCTION(sha1_file); #endif /* PHP_HASH_SHA1_NOT_IN_CORE */ /* SHA224 context. */ typedef struct { uint32_t state[8]; /* state */ uint32_t count[2]; /* number of bits, modulo 2^64 */ unsigned char buffer[64]; /* input buffer */ } PHP_SHA224_CTX; PHP_HASH_API void PHP_SHA224Init(PHP_SHA224_CTX *); PHP_HASH_API void PHP_SHA224Update(PHP_SHA224_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_SHA224Final(unsigned char[28], PHP_SHA224_CTX *); /* SHA256 context. */ typedef struct { uint32_t state[8]; /* state */ uint32_t count[2]; /* number of bits, modulo 2^64 */ unsigned char buffer[64]; /* input buffer */ } PHP_SHA256_CTX; PHP_HASH_API void PHP_SHA256Init(PHP_SHA256_CTX *); PHP_HASH_API void PHP_SHA256Update(PHP_SHA256_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_SHA256Final(unsigned char[32], PHP_SHA256_CTX *); /* SHA384 context */ typedef struct { uint64_t state[8]; /* state */ uint64_t count[2]; /* number of bits, modulo 2^128 */ unsigned char buffer[128]; /* input buffer */ } PHP_SHA384_CTX; PHP_HASH_API void PHP_SHA384Init(PHP_SHA384_CTX *); PHP_HASH_API void PHP_SHA384Update(PHP_SHA384_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_SHA384Final(unsigned char[48], PHP_SHA384_CTX *); /* SHA512 context */ typedef struct { uint64_t state[8]; /* state */ uint64_t count[2]; /* number of bits, modulo 2^128 */ unsigned char buffer[128]; /* input buffer */ } PHP_SHA512_CTX; PHP_HASH_API void PHP_SHA512Init(PHP_SHA512_CTX *); PHP_HASH_API void PHP_SHA512Update(PHP_SHA512_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_SHA512Final(unsigned char[64], PHP_SHA512_CTX *); PHP_HASH_API void PHP_SHA512_256Init(PHP_SHA512_CTX *); #define PHP_SHA512_256Update PHP_SHA512Update PHP_HASH_API void PHP_SHA512_256Final(unsigned char[32], PHP_SHA512_CTX *); PHP_HASH_API void PHP_SHA512_224Init(PHP_SHA512_CTX *); #define PHP_SHA512_224Update PHP_SHA512Update PHP_HASH_API void PHP_SHA512_224Final(unsigned char[28], PHP_SHA512_CTX *); #endif /* PHP_HASH_SHA_H */ PK!-lext/hash/php_hash_md.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Original Author: Rasmus Lerdorf | | Modified for pHASH by: Sara Golemon +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_MD_H #define PHP_HASH_MD_H /* When SHA is removed from Core, the ext/standard/sha1.c file can be removed and the ext/standard/sha1.h file can be reduced to: #define PHP_HASH_SHA1_NOT_IN_CORE #include "ext/hash/php_hash_sha.h" Don't forget to remove md5() and md5_file() entries from basic_functions.c */ #include "ext/standard/md5.h" #ifdef PHP_HASH_MD5_NOT_IN_CORE /* MD5.H - header file for MD5C.C */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ /* MD5 context. */ typedef struct { uint32_t state[4]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } PHP_MD5_CTX; PHP_HASH_API void make_digest(char *md5str, unsigned char *digest); PHP_HASH_API void PHP_MD5Init(PHP_MD5_CTX *); PHP_HASH_API void PHP_MD5Update(PHP_MD5_CTX *, const unsigned char *, unsigned int); PHP_HASH_API void PHP_MD5Final(unsigned char[16], PHP_MD5_CTX *); PHP_NAMED_FUNCTION(php_if_md5); PHP_NAMED_FUNCTION(php_if_md5_file); #endif /* PHP_HASH_MD5_NOT_IN_CORE */ /* MD4 context */ typedef struct { uint32_t state[4]; uint32_t count[2]; unsigned char buffer[64]; } PHP_MD4_CTX; PHP_HASH_API void PHP_MD4Init(PHP_MD4_CTX *); PHP_HASH_API void PHP_MD4Update(PHP_MD4_CTX *context, const unsigned char *, unsigned int); PHP_HASH_API void PHP_MD4Final(unsigned char[16], PHP_MD4_CTX *); /* MD2 context */ typedef struct { unsigned char state[48]; unsigned char checksum[16]; unsigned char buffer[16]; char in_buffer; } PHP_MD2_CTX; PHP_HASH_API void PHP_MD2Init(PHP_MD2_CTX *context); PHP_HASH_API void PHP_MD2Update(PHP_MD2_CTX *context, const unsigned char *, unsigned int); PHP_HASH_API void PHP_MD2Final(unsigned char[16], PHP_MD2_CTX *); #endif PK!ext/hash/php_hash_adler32.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_HASH_ADLER32_H #define PHP_HASH_ADLER32_H #include "ext/standard/basic_functions.h" typedef struct { uint32_t state; } PHP_ADLER32_CTX; PHP_HASH_API void PHP_ADLER32Init(PHP_ADLER32_CTX *context); PHP_HASH_API void PHP_ADLER32Update(PHP_ADLER32_CTX *context, const unsigned char *input, size_t len); PHP_HASH_API void PHP_ADLER32Final(unsigned char digest[4], PHP_ADLER32_CTX *context); PHP_HASH_API int PHP_ADLER32Copy(const php_hash_ops *ops, PHP_ADLER32_CTX *orig_context, PHP_ADLER32_CTX *copy_context); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!$UUext/dom/xml_common.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Christian Stocker | | Rob Richards | +----------------------------------------------------------------------+ */ #ifndef PHP_XML_COMMON_H #define PHP_XML_COMMON_H #include "ext/libxml/php_libxml.h" typedef libxml_doc_props *dom_doc_propsptr; typedef struct _dom_object { void *ptr; php_libxml_ref_obj *document; HashTable *prop_handler; zend_object std; } dom_object; static inline dom_object *php_dom_obj_from_obj(zend_object *obj) { return (dom_object*)((char*)(obj) - XtOffsetOf(dom_object, std)); } #define Z_DOMOBJ_P(zv) php_dom_obj_from_obj(Z_OBJ_P((zv))) #ifdef PHP_WIN32 # ifdef DOM_EXPORTS # define PHP_DOM_EXPORT __declspec(dllexport) # elif !defined(DOM_LOCAL_DEFINES) /* Allow to counteract LNK4049 warning. */ # define PHP_DOM_EXPORT __declspec(dllimport) # else # define PHP_DOM_EXPORT # endif /* DOM_EXPORTS */ #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_DOM_EXPORT __attribute__ ((visibility("default"))) #elif defined(PHPAPI) # define PHP_DOM_EXPORT PHPAPI #else # define PHP_DOM_EXPORT #endif PHP_DOM_EXPORT extern zend_class_entry *dom_node_class_entry; PHP_DOM_EXPORT dom_object *php_dom_object_get_data(xmlNodePtr obj); PHP_DOM_EXPORT zend_bool php_dom_create_object(xmlNodePtr obj, zval* return_value, dom_object *domobj); PHP_DOM_EXPORT xmlNodePtr dom_object_get_node(dom_object *obj); #define DOM_XMLNS_NAMESPACE \ (const xmlChar *) "http://www.w3.org/2000/xmlns/" #define NODE_GET_OBJ(__ptr, __id, __prtype, __intern) { \ __intern = Z_LIBXML_NODE_P(__id); \ if (__intern->node == NULL || !(__ptr = (__prtype)__intern->node->node)) { \ php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", \ ZSTR_VAL(__intern->std.ce->name));\ RETURN_NULL();\ } \ } #define DOC_GET_OBJ(__ptr, __id, __prtype, __intern) { \ __intern = Z_LIBXML_NODE_P(__id); \ if (__intern->document != NULL) { \ if (!(__ptr = (__prtype)__intern->document->ptr)) { \ php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\ RETURN_NULL();\ } \ } \ } #define DOM_RET_OBJ(obj, ret, domobject) \ *ret = php_dom_create_object(obj, return_value, domobject) #define DOM_GET_THIS(zval) \ if (NULL == (zval = getThis())) { \ php_error_docref(NULL, E_WARNING, "Underlying object missing"); \ RETURN_FALSE; \ } #define DOM_GET_THIS_OBJ(__ptr, __id, __prtype, __intern) \ DOM_GET_THIS(__id); \ DOM_GET_OBJ(__ptr, __id, __prtype, __intern); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!  ext/standard/crypt_blowfish.hnu[/* * Written by Solar Designer in 2000-2011. * No copyright is claimed, and the software is hereby placed in the public * domain. In case this attempt to disclaim copyright and place the software * in the public domain is deemed null and void, then the software is * Copyright (c) 2000-2011 Solar Designer and it is hereby released to the * general public under the following terms: * * Redistribution and use in source and binary forms, with or without * modification, are permitted. * * There's ABSOLUTELY NO WARRANTY, express or implied. * * See crypt_blowfish.c for more information. */ #ifndef _CRYPT_BLOWFISH_H #define _CRYPT_BLOWFISH_H #if 0 extern int _crypt_output_magic(const char *setting, char *output, int size); #endif extern char *php_crypt_blowfish_rn(const char *key, const char *setting, char *output, int size); #if 0 extern char *_crypt_gensalt_blowfish_rn(const char *prefix, unsigned long count, const char *input, int size, char *output, int output_size); #endif #endif PK!asyyext/standard/php_type.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef PHP_TYPE_H #define PHP_TYPE_H PHP_FUNCTION(intval); PHP_FUNCTION(floatval); PHP_FUNCTION(strval); PHP_FUNCTION(boolval); PHP_FUNCTION(gettype); PHP_FUNCTION(settype); PHP_FUNCTION(is_null); PHP_FUNCTION(is_resource); PHP_FUNCTION(is_bool); PHP_FUNCTION(is_int); PHP_FUNCTION(is_float); PHP_FUNCTION(is_numeric); PHP_FUNCTION(is_string); PHP_FUNCTION(is_array); PHP_FUNCTION(is_object); PHP_FUNCTION(is_scalar); PHP_FUNCTION(is_callable); PHP_FUNCTION(is_iterable); PHP_FUNCTION(is_countable); #endif PK!D} } ext/standard/php_mail.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef PHP_MAIL_H #define PHP_MAIL_H PHP_FUNCTION(mail); PHP_FUNCTION(ezmlm_hash); PHP_MINFO_FUNCTION(mail); PHPAPI zend_string *php_mail_build_headers(zval *headers); PHPAPI extern int php_mail(char *to, char *subject, char *message, char *headers, char *extra_cmd); #define PHP_MAIL_BUILD_HEADER_CHECK(target, s, key, val) \ do { \ if (Z_TYPE_P(val) == IS_STRING) { \ php_mail_build_headers_elem(&s, key, val); \ } else if (Z_TYPE_P(val) == IS_ARRAY) { \ if (!strncasecmp(target, ZSTR_VAL(key), ZSTR_LEN(key))) { \ php_error_docref(NULL, E_WARNING, "'%s' header must be at most one header. Array is passed for '%s'", target, target); \ continue; \ } \ php_mail_build_headers_elems(&s, key, val); \ } else { \ php_error_docref(NULL, E_WARNING, "Extra header element '%s' cannot be other than string or array.", ZSTR_VAL(key)); \ } \ } while(0) #define PHP_MAIL_BUILD_HEADER_DEFAULT(s, key, val) \ do { \ if (Z_TYPE_P(val) == IS_STRING) { \ php_mail_build_headers_elem(&s, key, val); \ } else if (Z_TYPE_P(val) == IS_ARRAY) { \ php_mail_build_headers_elems(&s, key, val); \ } else { \ php_error_docref(NULL, E_WARNING, "Extra header element '%s' cannot be other than string or array.", ZSTR_VAL(key)); \ } \ } while(0) #endif /* PHP_MAIL_H */ PK!aext/standard/php_uuencode.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Ilia Alshanetsky | +----------------------------------------------------------------------+ */ #ifndef PHP_UUENCODE_H #define PHP_UUENCODE_H PHP_FUNCTION(convert_uudecode); PHP_FUNCTION(convert_uuencode); PHPAPI zend_string *php_uudecode(char *src, size_t src_len); PHPAPI zend_string *php_uuencode(char *src, size_t src_len); #endif /* PHP_UUENCODE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!-ext/standard/php_mt_rand.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Zeev Suraski | | Pedro Melo | | Sterling Hughes | | | | Based on code from: Shawn Cokus | +----------------------------------------------------------------------+ */ #ifndef PHP_MT_RAND_H #define PHP_MT_RAND_H #include "php_lcg.h" #include "php_rand.h" #define PHP_MT_RAND_MAX ((zend_long) (0x7FFFFFFF)) /* (1<<31) - 1 */ #define MT_RAND_MT19937 0 #define MT_RAND_PHP 1 PHPAPI void php_mt_srand(uint32_t seed); PHPAPI uint32_t php_mt_rand(void); PHPAPI zend_long php_mt_rand_range(zend_long min, zend_long max); PHPAPI zend_long php_mt_rand_common(zend_long min, zend_long max); PHP_MINIT_FUNCTION(mt_rand); #endif /* PHP_MT_RAND_H */ PK!pext/standard/scanf.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Clayton Collie | +----------------------------------------------------------------------+ */ #ifndef SCANF_H #define SCANF_H #define SCAN_MAX_ARGS 0xFF /* Maximum number of variable which can be */ /* passed to (f|s)scanf. This is an artificial */ /* upper limit to keep resources in check and */ /* minimize the possibility of exploits */ #define SCAN_SUCCESS SUCCESS #define SCAN_ERROR_EOF -1 /* indicates premature termination of scan */ /* can be caused by bad parameters or format*/ /* string. */ #define SCAN_ERROR_INVALID_FORMAT (SCAN_ERROR_EOF - 1) #define SCAN_ERROR_VAR_PASSED_BYVAL (SCAN_ERROR_INVALID_FORMAT - 1) #define SCAN_ERROR_WRONG_PARAM_COUNT (SCAN_ERROR_VAR_PASSED_BYVAL - 1) #define SCAN_ERROR_INTERNAL (SCAN_ERROR_WRONG_PARAM_COUNT - 1) /* * The following are here solely for the benefit of the scanf type functions * e.g. fscanf */ PHPAPI int ValidateFormat(char *format, int numVars, int *totalVars); PHPAPI int php_sscanf_internal(char *string,char *format,int argCount,zval *args, int varStart, zval *return_value); #endif /* SCANF_H */ PK!ext/standard/php_crypt_r.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Pierre Alain Joye | +----------------------------------------------------------------------+ */ #ifndef CYR_CONVERT_H #define CYR_CONVERT_H PHP_FUNCTION(convert_cyr_string); #endif /* CYR_CONVERT_H */ PK!c?ext/standard/php_ftok.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andrew Sitnikov | +----------------------------------------------------------------------+ */ #ifndef PHP_FTOK_H #define PHP_FTOK_H #if HAVE_FTOK PHP_FUNCTION(ftok); #endif #endif /* PHP_FTOK_H */ PK!r#ext/standard/php_incomplete_class.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef PHP_INCOMPLETE_CLASS_H #define PHP_INCOMPLETE_CLASS_H #include "ext/standard/basic_functions.h" #define PHP_IC_ENTRY \ BG(incomplete_class) #define PHP_SET_CLASS_ATTRIBUTES(struc) \ /* OBJECTS_FIXME: Fix for new object model */ \ if (Z_OBJCE_P(struc) == BG(incomplete_class)) { \ class_name = php_lookup_class_name(struc); \ if (!class_name) { \ class_name = zend_string_init(INCOMPLETE_CLASS, sizeof(INCOMPLETE_CLASS) - 1, 0); \ } \ incomplete_class = 1; \ } else { \ class_name = zend_string_copy(Z_OBJCE_P(struc)->name); \ } #define PHP_CLEANUP_CLASS_ATTRIBUTES() \ zend_string_release_ex(class_name, 0) #define PHP_CLASS_ATTRIBUTES \ zend_string *class_name; \ zend_bool incomplete_class ZEND_ATTRIBUTE_UNUSED = 0 #define INCOMPLETE_CLASS "__PHP_Incomplete_Class" #define MAGIC_MEMBER "__PHP_Incomplete_Class_Name" #ifdef __cplusplus extern "C" { #endif PHPAPI zend_class_entry *php_create_incomplete_class(void); PHPAPI zend_string *php_lookup_class_name(zval *object); PHPAPI void php_store_class_name(zval *object, const char *name, size_t len); #ifdef __cplusplus }; #endif #endif PK!Z[ext/standard/exec.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef EXEC_H #define EXEC_H PHP_FUNCTION(system); PHP_FUNCTION(exec); PHP_FUNCTION(escapeshellcmd); PHP_FUNCTION(escapeshellarg); PHP_FUNCTION(passthru); PHP_FUNCTION(shell_exec); PHP_FUNCTION(proc_open); PHP_FUNCTION(proc_get_status); PHP_FUNCTION(proc_close); PHP_FUNCTION(proc_terminate); PHP_FUNCTION(proc_nice); PHP_MINIT_FUNCTION(proc_open); PHP_MINIT_FUNCTION(exec); PHPAPI zend_string *php_escape_shell_cmd(char *); PHPAPI zend_string *php_escape_shell_arg(char *); PHPAPI int php_exec(int type, char *cmd, zval *array, zval *return_value); #endif /* EXEC_H */ PK!b^&ext/standard/php_lcg.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef PHP_LCG_H #define PHP_LCG_H #include "ext/standard/basic_functions.h" typedef struct { int32_t s1; int32_t s2; int seeded; } php_lcg_globals; PHPAPI double php_combined_lcg(void); PHP_FUNCTION(lcg_value); PHP_MINIT_FUNCTION(lcg); #ifdef ZTS #define LCG(v) ZEND_TSRMG(lcg_globals_id, php_lcg_globals *, v) #else #define LCG(v) (lcg_globals.v) #endif #endif PK!&ext/standard/proc_open.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ #ifdef PHP_WIN32 typedef HANDLE php_file_descriptor_t; typedef DWORD php_process_id_t; #else typedef int php_file_descriptor_t; typedef pid_t php_process_id_t; #endif /* Environment block under win32 is a NUL terminated sequence of NUL terminated * name=value strings. * Under unix, it is an argv style array. * */ typedef struct _php_process_env { char *envp; #ifndef PHP_WIN32 char **envarray; #endif } php_process_env_t; struct php_process_handle { php_process_id_t child; #ifdef PHP_WIN32 HANDLE childHandle; #endif int npipes; zend_resource **pipes; char *command; int is_persistent; php_process_env_t env; }; PK!3_?<<ext/standard/flock_compat.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef FLOCK_COMPAT_H #define FLOCK_COMPAT_H /* php_flock internally uses fcntl whether or not flock is available * This way our php_flock even works on NFS files. * More info: /usr/src/linux/Documentation */ PHPAPI int php_flock(int fd, int operation); #ifndef HAVE_FLOCK # define LOCK_SH 1 # define LOCK_EX 2 # define LOCK_NB 4 # define LOCK_UN 8 PHPAPI int flock(int fd, int operation); #endif /* Userland LOCK_* constants */ #define PHP_LOCK_SH 1 #define PHP_LOCK_EX 2 #define PHP_LOCK_UN 3 #define PHP_LOCK_NB 4 #ifdef PHP_WIN32 # ifdef EWOULDBLOCK # undef EWOULDBLOCK # endif # define EWOULDBLOCK WSAEWOULDBLOCK # define fsync _commit # define ftruncate(a, b) chsize(a, b) #endif /* defined(PHP_WIN32) */ #if !HAVE_INET_ATON #if HAVE_NETINET_IN_H #include #endif #if HAVE_ARPA_INET_H #include #endif #ifndef PHP_WIN32 extern int inet_aton(const char *, struct in_addr *); #endif #endif #endif /* FLOCK_COMPAT_H */ PK!ext/standard/php_math.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Jim Winstead | | Stig Sæther Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_MATH_H #define PHP_MATH_H PHPAPI double _php_math_round(double, int, int); PHPAPI zend_string *_php_math_number_format(double, int, char, char); PHPAPI zend_string *_php_math_number_format_ex(double, int, char *, size_t, char *, size_t); PHPAPI zend_string * _php_math_longtobase(zval *arg, int base); PHPAPI zend_long _php_math_basetolong(zval *arg, int base); PHPAPI int _php_math_basetozval(zval *arg, int base, zval *ret); PHPAPI zend_string * _php_math_zvaltobase(zval *arg, int base); PHP_FUNCTION(sin); PHP_FUNCTION(cos); PHP_FUNCTION(tan); PHP_FUNCTION(asin); PHP_FUNCTION(acos); PHP_FUNCTION(atan); PHP_FUNCTION(atan2); PHP_FUNCTION(pi); PHP_FUNCTION(exp); PHP_FUNCTION(log); PHP_FUNCTION(log10); PHP_FUNCTION(is_finite); PHP_FUNCTION(is_infinite); PHP_FUNCTION(is_nan); PHP_FUNCTION(pow); PHP_FUNCTION(sqrt); PHP_FUNCTION(rand); PHP_FUNCTION(mt_srand); PHP_FUNCTION(mt_rand); PHP_FUNCTION(mt_getrandmax); PHP_FUNCTION(abs); PHP_FUNCTION(ceil); PHP_FUNCTION(floor); PHP_FUNCTION(round); PHP_FUNCTION(decbin); PHP_FUNCTION(dechex); PHP_FUNCTION(decoct); PHP_FUNCTION(bindec); PHP_FUNCTION(hexdec); PHP_FUNCTION(octdec); PHP_FUNCTION(base_convert); PHP_FUNCTION(number_format); PHP_FUNCTION(fmod); PHP_FUNCTION(deg2rad); PHP_FUNCTION(rad2deg); PHP_FUNCTION(intdiv); /* WARNING: these functions are expermental: they could change their names or disappear in the next version of PHP! */ PHP_FUNCTION(hypot); PHP_FUNCTION(expm1); PHP_FUNCTION(log1p); PHP_FUNCTION(sinh); PHP_FUNCTION(cosh); PHP_FUNCTION(tanh); PHP_FUNCTION(asinh); PHP_FUNCTION(acosh); PHP_FUNCTION(atanh); #include #ifndef M_E #define M_E 2.7182818284590452354 /* e */ #endif #ifndef M_LOG2E #define M_LOG2E 1.4426950408889634074 /* log_2 e */ #endif #ifndef M_LOG10E #define M_LOG10E 0.43429448190325182765 /* log_10 e */ #endif #ifndef M_LN2 #define M_LN2 0.69314718055994530942 /* log_e 2 */ #endif #ifndef M_LN10 #define M_LN10 2.30258509299404568402 /* log_e 10 */ #endif #ifndef M_PI #define M_PI 3.14159265358979323846 /* pi */ #endif #ifndef M_PI_2 #define M_PI_2 1.57079632679489661923 /* pi/2 */ #endif #ifndef M_PI_4 #define M_PI_4 0.78539816339744830962 /* pi/4 */ #endif #ifndef M_1_PI #define M_1_PI 0.31830988618379067154 /* 1/pi */ #endif #ifndef M_2_PI #define M_2_PI 0.63661977236758134308 /* 2/pi */ #endif #ifndef M_SQRTPI #define M_SQRTPI 1.77245385090551602729 /* sqrt(pi) */ #endif #ifndef M_2_SQRTPI #define M_2_SQRTPI 1.12837916709551257390 /* 2/sqrt(pi) */ #endif #ifndef M_LNPI #define M_LNPI 1.14472988584940017414 /* ln(pi) */ #endif #ifndef M_EULER #define M_EULER 0.57721566490153286061 /* Euler constant */ #endif #ifndef M_SQRT2 #define M_SQRT2 1.41421356237309504880 /* sqrt(2) */ #endif #ifndef M_SQRT1_2 #define M_SQRT1_2 0.70710678118654752440 /* 1/sqrt(2) */ #endif #ifndef M_SQRT3 #define M_SQRT3 1.73205080756887729352 /* sqrt(3) */ #endif /* Define rounding modes (all are round-to-nearest) */ #ifndef PHP_ROUND_HALF_UP #define PHP_ROUND_HALF_UP 0x01 /* Arithmetic rounding, up == away from zero */ #endif #ifndef PHP_ROUND_HALF_DOWN #define PHP_ROUND_HALF_DOWN 0x02 /* Down == towards zero */ #endif #ifndef PHP_ROUND_HALF_EVEN #define PHP_ROUND_HALF_EVEN 0x03 /* Banker's rounding */ #endif #ifndef PHP_ROUND_HALF_ODD #define PHP_ROUND_HALF_ODD 0x04 #endif #endif /* PHP_MATH_H */ PK!+v@^^ext/standard/datetime.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef DATETIME_H #define DATETIME_H #if HAVE_STRPTIME PHP_FUNCTION(strptime); #endif PHPAPI char *php_std_date(time_t t); #endif /* DATETIME_H */ PK!$M%%ext/standard/php_string.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Stig Sæther Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_STRING_H #define PHP_STRING_H PHP_FUNCTION(strspn); PHP_FUNCTION(strcspn); PHP_FUNCTION(str_replace); PHP_FUNCTION(str_ireplace); PHP_FUNCTION(rtrim); PHP_FUNCTION(trim); PHP_FUNCTION(ltrim); PHP_FUNCTION(soundex); PHP_FUNCTION(levenshtein); PHP_FUNCTION(count_chars); PHP_FUNCTION(wordwrap); PHP_FUNCTION(explode); PHP_FUNCTION(implode); PHP_FUNCTION(strtok); PHP_FUNCTION(strtoupper); PHP_FUNCTION(strtolower); PHP_FUNCTION(basename); PHP_FUNCTION(dirname); PHP_FUNCTION(pathinfo); PHP_FUNCTION(strstr); PHP_FUNCTION(strpos); PHP_FUNCTION(stripos); PHP_FUNCTION(strrpos); PHP_FUNCTION(strripos); PHP_FUNCTION(strrchr); PHP_FUNCTION(substr); PHP_FUNCTION(quotemeta); PHP_FUNCTION(ucfirst); PHP_FUNCTION(lcfirst); PHP_FUNCTION(ucwords); PHP_FUNCTION(strtr); PHP_FUNCTION(strrev); PHP_FUNCTION(hebrev); PHP_FUNCTION(hebrevc); PHP_FUNCTION(user_sprintf); PHP_FUNCTION(user_printf); PHP_FUNCTION(vprintf); PHP_FUNCTION(vsprintf); PHP_FUNCTION(addcslashes); PHP_FUNCTION(addslashes); PHP_FUNCTION(stripcslashes); PHP_FUNCTION(stripslashes); PHP_FUNCTION(chr); PHP_FUNCTION(ord); PHP_FUNCTION(nl2br); PHP_FUNCTION(setlocale); PHP_FUNCTION(localeconv); PHP_FUNCTION(nl_langinfo); PHP_FUNCTION(stristr); PHP_FUNCTION(chunk_split); PHP_FUNCTION(parse_str); PHP_FUNCTION(str_getcsv); PHP_FUNCTION(bin2hex); PHP_FUNCTION(hex2bin); PHP_FUNCTION(similar_text); PHP_FUNCTION(strip_tags); PHP_FUNCTION(str_repeat); PHP_FUNCTION(substr_replace); PHP_FUNCTION(strnatcmp); PHP_FUNCTION(strnatcasecmp); PHP_FUNCTION(substr_count); PHP_FUNCTION(str_pad); PHP_FUNCTION(sscanf); PHP_FUNCTION(str_shuffle); PHP_FUNCTION(str_word_count); PHP_FUNCTION(str_split); PHP_FUNCTION(strpbrk); PHP_FUNCTION(substr_compare); PHP_FUNCTION(utf8_encode); PHP_FUNCTION(utf8_decode); #ifdef HAVE_STRCOLL PHP_FUNCTION(strcoll); #endif #if HAVE_STRFMON PHP_FUNCTION(money_format); #endif #if defined(HAVE_LOCALECONV) && defined(ZTS) PHP_MINIT_FUNCTION(localeconv); PHP_MSHUTDOWN_FUNCTION(localeconv); #endif #if HAVE_NL_LANGINFO PHP_MINIT_FUNCTION(nl_langinfo); #endif #if ZEND_INTRIN_SSE4_2_FUNC_PTR PHP_MINIT_FUNCTION(string_intrin); #endif #define strnatcmp(a, b) \ strnatcmp_ex(a, strlen(a), b, strlen(b), 0) #define strnatcasecmp(a, b) \ strnatcmp_ex(a, strlen(a), b, strlen(b), 1) PHPAPI int strnatcmp_ex(char const *a, size_t a_len, char const *b, size_t b_len, int fold_case); #ifdef HAVE_LOCALECONV PHPAPI struct lconv *localeconv_r(struct lconv *out); #endif PHPAPI char *php_strtoupper(char *s, size_t len); PHPAPI char *php_strtolower(char *s, size_t len); PHPAPI zend_string *php_string_toupper(zend_string *s); PHPAPI zend_string *php_string_tolower(zend_string *s); PHPAPI char *php_strtr(char *str, size_t len, const char *str_from, const char *str_to, size_t trlen); #if ZEND_INTRIN_SSE4_2_FUNC_PTR PHPAPI extern zend_string *(*php_addslashes)(zend_string *str); PHPAPI extern void (*php_stripslashes)(zend_string *str); #else PHPAPI zend_string *php_addslashes(zend_string *str); PHPAPI void php_stripslashes(zend_string *str); #endif PHPAPI zend_string *php_addcslashes_str(const char *str, size_t len, char *what, size_t what_len); PHPAPI zend_string *php_addcslashes(zend_string *str, char *what, size_t what_len); PHPAPI void php_stripcslashes(zend_string *str); PHPAPI zend_string *php_basename(const char *s, size_t len, char *suffix, size_t sufflen); PHPAPI size_t php_dirname(char *str, size_t len); PHPAPI char *php_stristr(char *s, char *t, size_t s_len, size_t t_len); PHPAPI zend_string *php_str_to_str(const char *haystack, size_t length, const char *needle, size_t needle_len, const char *str, size_t str_len); PHPAPI zend_string *php_trim(zend_string *str, char *what, size_t what_len, int mode); PHPAPI size_t php_strip_tags(char *rbuf, size_t len, uint8_t *state, const char *allow, size_t allow_len); PHPAPI size_t php_strip_tags_ex(char *rbuf, size_t len, uint8_t *stateptr, const char *allow, size_t allow_len, zend_bool allow_tag_spaces); PHPAPI void php_implode(const zend_string *delim, zval *arr, zval *return_value); PHPAPI void php_explode(const zend_string *delim, zend_string *str, zval *return_value, zend_long limit); PHPAPI size_t php_strspn(char *s1, char *s2, char *s1_end, char *s2_end); PHPAPI size_t php_strcspn(char *s1, char *s2, char *s1_end, char *s2_end); PHPAPI int string_natural_compare_function_ex(zval *result, zval *op1, zval *op2, zend_bool case_insensitive); PHPAPI int string_natural_compare_function(zval *result, zval *op1, zval *op2); PHPAPI int string_natural_case_compare_function(zval *result, zval *op1, zval *op2); #ifndef HAVE_STRERROR PHPAPI char *php_strerror(int errnum); #define strerror php_strerror #endif #ifndef HAVE_MBLEN # define php_mblen(ptr, len) 1 # define php_mb_reset() #elif defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T) # ifdef PHP_WIN32 # include # endif # define php_mblen(ptr, len) ((int) mbrlen(ptr, len, &BG(mblen_state))) # define php_mb_reset() memset(&BG(mblen_state), 0, sizeof(BG(mblen_state))) #else # define php_mblen(ptr, len) mblen(ptr, len) # define php_mb_reset() php_ignore_value(mblen(NULL, 0)) #endif void register_string_constants(INIT_FUNC_ARGS); #endif /* PHP_STRING_H */ PK!Зext/standard/crc32.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ /* * This code implements the AUTODIN II polynomial * The variable corresponding to the macro argument "crc" should * be an unsigned long. * Original code by Spencer Garrett */ #define CRC32(crc, ch) (crc = (crc >> 8) ^ crc32tab[(crc ^ (ch)) & 0xff]) /* generated using the AUTODIN II polynomial * x^32 + x^26 + x^23 + x^22 + x^16 + * x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x^1 + 1 */ static const unsigned int crc32tab[256] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, }; /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!hFext/standard/php_metaphone.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Thies C. Arntzen | +----------------------------------------------------------------------+ */ #ifndef PHP_METAPHONE_H #define PHP_METAPHONE_H PHP_FUNCTION(metaphone); #endif PK!Zext/standard/php_http.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_HTTP_H #define PHP_HTTP_H #include "php.h" #include "zend_smart_str.h" PHPAPI int php_url_encode_hash_ex(HashTable *ht, smart_str *formstr, const char *num_prefix, size_t num_prefix_len, const char *key_prefix, size_t key_prefix_len, const char *key_suffix, size_t key_suffix_len, zval *type, char *arg_sep, int enc_type); #define php_url_encode_hash(ht, formstr) php_url_encode_hash_ex((ht), (formstr), NULL, 0, NULL, 0, NULL, 0, NULL) PHP_FUNCTION(http_build_query); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!6Vext/standard/sha1.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stefan Esser | +----------------------------------------------------------------------+ */ #ifndef SHA1_H #define SHA1_H #include "ext/standard/basic_functions.h" /* SHA1 context. */ typedef struct { uint32_t state[5]; /* state (ABCD) */ uint32_t count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ } PHP_SHA1_CTX; PHPAPI void PHP_SHA1Init(PHP_SHA1_CTX *); PHPAPI void PHP_SHA1Update(PHP_SHA1_CTX *, const unsigned char *, size_t); PHPAPI void PHP_SHA1Final(unsigned char[20], PHP_SHA1_CTX *); PHPAPI void make_sha1_digest(char *sha1str, unsigned char *digest); PHP_FUNCTION(sha1); PHP_FUNCTION(sha1_file); #endif PK!? ext/standard/php_rand.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Zeev Suraski | | Pedro Melo | | Sterling Hughes | | | | Based on code from: Shawn Cokus | +----------------------------------------------------------------------+ */ #ifndef PHP_RAND_H #define PHP_RAND_H #include "php_lcg.h" #include "php_mt_rand.h" /* System Rand functions */ #ifndef RAND_MAX #define RAND_MAX PHP_MT_RAND_MAX #endif #define PHP_RAND_MAX PHP_MT_RAND_MAX /* * A bit of tricky math here. We want to avoid using a modulus because * that simply tosses the high-order bits and might skew the distribution * of random values over the range. Instead we map the range directly. * * We need to map the range from 0...M evenly to the range a...b * Let n = the random number and n' = the mapped random number * * Then we have: n' = a + n(b-a)/M * * We have a problem here in that only n==M will get mapped to b which # means the chances of getting b is much much less than getting any of # the other values in the range. We can fix this by increasing our range # artificially and using: # # n' = a + n(b-a+1)/M * # Now we only have a problem if n==M which would cause us to produce a # number of b+1 which would be bad. So we bump M up by one to make sure # this will never happen, and the final algorithm looks like this: # # n' = a + n(b-a+1)/(M+1) * * -RL */ #define RAND_RANGE_BADSCALING(__n, __min, __max, __tmax) \ (__n) = (__min) + (zend_long) ((double) ( (double) (__max) - (__min) + 1.0) * ((__n) / ((__tmax) + 1.0))) #ifdef PHP_WIN32 #define GENERATE_SEED() (((zend_long) (time(0) * GetCurrentProcessId())) ^ ((zend_long) (1000000.0 * php_combined_lcg()))) #else #define GENERATE_SEED() (((zend_long) (time(0) * getpid())) ^ ((zend_long) (1000000.0 * php_combined_lcg()))) #endif PHPAPI void php_srand(zend_long seed); PHPAPI zend_long php_rand(void); #endif /* PHP_RAND_H */ PK!Ah~~ext/standard/base64.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | | Xinchen Hui | +----------------------------------------------------------------------+ */ #ifndef BASE64_H #define BASE64_H /* * SSSE3 and AVX2 implementation are based on https://github.com/aklomp/base64 * which is copyrighted to: * * Copyright (c) 2005-2007, Nick Galbreath * Copyright (c) 2013-2017, Alfred Klomp * Copyright (c) 2015-2017, Wojciech Mula * Copyright (c) 2016-2017, Matthieu Darbois * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * - Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * - Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ PHP_FUNCTION(base64_decode); PHP_FUNCTION(base64_encode); #if (ZEND_INTRIN_AVX2_FUNC_PTR || ZEND_INTRIN_SSSE3_FUNC_PTR) && !ZEND_INTRIN_AVX2_NATIVE PHP_MINIT_FUNCTION(base64_intrin); PHPAPI extern zend_string *(*php_base64_encode)(const unsigned char *, size_t); PHPAPI extern zend_string *(*php_base64_decode_ex)(const unsigned char *, size_t, zend_bool); #else PHPAPI extern zend_string *php_base64_encode(const unsigned char *, size_t); PHPAPI extern zend_string *php_base64_decode_ex(const unsigned char *, size_t, zend_bool); #endif static inline zend_string *php_base64_encode_str(const zend_string *str) { return php_base64_encode((const unsigned char*)(ZSTR_VAL(str)), ZSTR_LEN(str)); } static inline zend_string *php_base64_decode(const unsigned char *str, size_t len) { return php_base64_decode_ex(str, len, 0); } static inline zend_string *php_base64_decode_str(const zend_string *str) { return php_base64_decode_ex((const unsigned char*)(ZSTR_VAL(str)), ZSTR_LEN(str), 0); } #endif /* BASE64_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!FK ext/standard/url_scanner_ex.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef URL_SCANNER_EX_H #define URL_SCANNER_EX_H PHP_MINIT_FUNCTION(url_scanner_ex); PHP_MSHUTDOWN_FUNCTION(url_scanner_ex); PHP_RINIT_FUNCTION(url_scanner_ex); PHP_RSHUTDOWN_FUNCTION(url_scanner_ex); PHPAPI char *php_url_scanner_adapt_single_url(const char *url, size_t urllen, const char *name, const char *value, size_t *newlen, int encode); PHPAPI int php_url_scanner_add_session_var(char *name, size_t name_len, char *value, size_t value_len, int encode); PHPAPI int php_url_scanner_reset_session_var(zend_string *name, int encode); PHPAPI int php_url_scanner_reset_session_vars(void); PHPAPI int php_url_scanner_add_var(char *name, size_t name_len, char *value, size_t value_len, int encode); PHPAPI int php_url_scanner_reset_var(zend_string *name, int encode); PHPAPI int php_url_scanner_reset_vars(void); #include "zend_smart_str_public.h" typedef struct { /* Used by the mainloop of the scanner */ smart_str tag; /* read only */ smart_str arg; /* read only */ smart_str val; /* read only */ smart_str buf; /* The result buffer */ smart_str result; /* The data which is appended to each relative URL/FORM */ smart_str form_app, url_app; int active; char *lookup_data; int state; int type; smart_str attr_val; int tag_type; int attr_type; /* Everything above is zeroed in RINIT */ HashTable *tags; } url_adapt_state_ex_t; #endif PK!?> > ext/standard/php_standard.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ */ #include "basic_functions.h" #include "php_math.h" #include "php_string.h" #include "base64.h" #include "php_dir.h" #include "php_dns.h" #include "php_mail.h" #include "md5.h" #include "sha1.h" #include "hrtime.h" #include "html.h" #include "exec.h" #include "file.h" #include "php_ext_syslog.h" #include "php_filestat.h" #include "php_browscap.h" #include "pack.h" #include "datetime.h" #include "microtime.h" #include "url.h" #include "pageinfo.h" #include "cyr_convert.h" #include "php_link.h" #include "fsock.h" #include "php_image.h" #include "php_iptc.h" #include "info.h" #include "uniqid.h" #include "php_var.h" #include "quot_print.h" #include "dl.h" #include "php_crypt.h" #include "head.h" #include "php_lcg.h" #include "php_metaphone.h" #include "php_output.h" #include "php_array.h" #include "php_assert.h" #include "php_versioning.h" #include "php_ftok.h" #include "php_type.h" #include "php_password.h" #include "php_random.h" #include "php_version.h" #define PHP_STANDARD_VERSION PHP_VERSION #define phpext_standard_ptr basic_functions_module_ptr PHP_MINIT_FUNCTION(standard_filters); PHP_MSHUTDOWN_FUNCTION(standard_filters); /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!Gext/standard/php_iptc.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Thies C. Arntzen | +----------------------------------------------------------------------+ */ #ifndef PHP_IPTC_H #define PHP_IPTC_H PHP_FUNCTION(iptcparse); PHP_FUNCTION(iptcembed); #endif /* PHP_IPTC_H */ PK!$|ext/standard/uniqid.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Sæther Bakken | +----------------------------------------------------------------------+ */ #ifndef UNIQID_H #define UNIQID_H #ifdef HAVE_GETTIMEOFDAY PHP_FUNCTION(uniqid); #endif #endif /* UNIQID_H */ PK! }b b ext/standard/php_filestat.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | +----------------------------------------------------------------------+ */ #ifndef PHP_FILESTAT_H #define PHP_FILESTAT_H PHP_RINIT_FUNCTION(filestat); PHP_RSHUTDOWN_FUNCTION(filestat); PHP_FUNCTION(realpath_cache_size); PHP_FUNCTION(realpath_cache_get); PHP_FUNCTION(clearstatcache); PHP_FUNCTION(fileatime); PHP_FUNCTION(filectime); PHP_FUNCTION(filegroup); PHP_FUNCTION(fileinode); PHP_FUNCTION(filemtime); PHP_FUNCTION(fileowner); PHP_FUNCTION(fileperms); PHP_FUNCTION(filesize); PHP_FUNCTION(filetype); PHP_FUNCTION(is_writable); PHP_FUNCTION(is_readable); PHP_FUNCTION(is_executable); PHP_FUNCTION(is_file); PHP_FUNCTION(is_dir); PHP_FUNCTION(is_link); PHP_FUNCTION(file_exists); PHP_NAMED_FUNCTION(php_if_stat); PHP_NAMED_FUNCTION(php_if_lstat); PHP_FUNCTION(disk_total_space); PHP_FUNCTION(disk_free_space); PHP_FUNCTION(chown); PHP_FUNCTION(chgrp); #if HAVE_LCHOWN PHP_FUNCTION(lchown); #endif #if HAVE_LCHOWN PHP_FUNCTION(lchgrp); #endif PHP_FUNCTION(chmod); #if HAVE_UTIME PHP_FUNCTION(touch); #endif PHP_FUNCTION(clearstatcache); #ifdef PHP_WIN32 #define S_IRUSR S_IREAD #define S_IWUSR S_IWRITE #define S_IXUSR S_IEXEC #define S_IRGRP S_IREAD #define S_IWGRP S_IWRITE #define S_IXGRP S_IEXEC #define S_IROTH S_IREAD #define S_IWOTH S_IWRITE #define S_IXOTH S_IEXEC #undef getgid #define getgroups(a, b) 0 #define getgid() 1 #define getuid() 1 #endif /* Compatibility. */ typedef size_t php_stat_len; PHPAPI void php_clear_stat_cache(zend_bool clear_realpath_cache, const char *filename, size_t filename_len); PHPAPI void php_stat(const char *filename, size_t filename_length, int type, zval *return_value); /* Switches for various filestat functions: */ #define FS_PERMS 0 #define FS_INODE 1 #define FS_SIZE 2 #define FS_OWNER 3 #define FS_GROUP 4 #define FS_ATIME 5 #define FS_MTIME 6 #define FS_CTIME 7 #define FS_TYPE 8 #define FS_IS_W 9 #define FS_IS_R 10 #define FS_IS_X 11 #define FS_IS_FILE 12 #define FS_IS_DIR 13 #define FS_IS_LINK 14 #define FS_EXISTS 15 #define FS_LSTAT 16 #define FS_STAT 17 #endif /* PHP_FILESTAT_H */ PK!Frext/standard/php_random.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sammy Kaye Powers | +----------------------------------------------------------------------+ */ #ifndef PHP_RANDOM_H #define PHP_RANDOM_H BEGIN_EXTERN_C() PHP_FUNCTION(random_bytes); PHP_FUNCTION(random_int); PHP_MINIT_FUNCTION(random); PHP_MSHUTDOWN_FUNCTION(random); typedef struct { int fd; } php_random_globals; #define php_random_bytes_throw(b, s) php_random_bytes((b), (s), 1) #define php_random_bytes_silent(b, s) php_random_bytes((b), (s), 0) #define php_random_int_throw(min, max, result) \ php_random_int((min), (max), (result), 1) #define php_random_int_silent(min, max, result) \ php_random_int((min), (max), (result), 0) PHPAPI int php_random_bytes(void *bytes, size_t size, zend_bool should_throw); PHPAPI int php_random_int(zend_long min, zend_long max, zend_long *result, zend_bool should_throw); #ifdef ZTS # define RANDOM_G(v) ZEND_TSRMG(random_globals_id, php_random_globals *, v) extern PHPAPI int random_globals_id; #else # define RANDOM_G(v) random_globals.v extern PHPAPI php_random_globals random_globals; #endif END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!*ext/standard/fsock.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Paul Panotzki - Bunyip Information Systems | | Jim Winstead | | Wez Furlong | +----------------------------------------------------------------------+ */ #ifndef FSOCK_H #define FSOCK_H #include "file.h" #include "php_network.h" PHP_FUNCTION(fsockopen); PHP_FUNCTION(pfsockopen); /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim: sw=4 ts=4 */ #endif /* FSOCK_H */ PK!.R R ext/standard/php_dns.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: The typical suspects | | Marcus Boerger | | Pollita | +----------------------------------------------------------------------+ */ #ifndef PHP_DNS_H #define PHP_DNS_H #if defined(HAVE_DNS_SEARCH) #define php_dns_search(res, dname, class, type, answer, anslen) \ ((int)dns_search(res, dname, class, type, answer, anslen, (struct sockaddr *)&from, &fromsize)) #define php_dns_free_handle(res) \ dns_free(res) #elif defined(HAVE_RES_NSEARCH) #define php_dns_search(res, dname, class, type, answer, anslen) \ res_nsearch(res, dname, class, type, answer, anslen); #if HAVE_RES_NDESTROY #define php_dns_free_handle(res) \ res_ndestroy(res); \ php_dns_free_res(res) #else #define php_dns_free_handle(res) \ res_nclose(res); \ php_dns_free_res(res) #endif #elif defined(HAVE_RES_SEARCH) #define php_dns_search(res, dname, class, type, answer, anslen) \ res_search(dname, class, type, answer, anslen) #define php_dns_free_handle(res) /* noop */ #endif #if defined(HAVE_DNS_SEARCH) || defined(HAVE_RES_NSEARCH) || defined(HAVE_RES_SEARCH) #define HAVE_DNS_SEARCH_FUNC 1 #endif #if HAVE_DNS_SEARCH_FUNC && HAVE_DN_EXPAND && HAVE_DN_SKIPNAME #define HAVE_FULL_DNS_FUNCS 1 #endif PHP_FUNCTION(gethostbyaddr); PHP_FUNCTION(gethostbyname); PHP_FUNCTION(gethostbynamel); #ifdef HAVE_GETHOSTNAME PHP_FUNCTION(gethostname); #endif #if defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC PHP_FUNCTION(dns_check_record); # if defined(PHP_WIN32) || HAVE_FULL_DNS_FUNCS PHP_FUNCTION(dns_get_mx); PHP_FUNCTION(dns_get_record); PHP_MINIT_FUNCTION(dns); # endif #endif /* defined(PHP_WIN32) || HAVE_DNS_SEARCH_FUNC */ #ifndef INT16SZ #define INT16SZ 2 #endif #ifndef INT32SZ #define INT32SZ 4 #endif #endif /* PHP_DNS_H */ PK!dK}}ext/standard/credits_ext.hnu[/* DO NOT EDIT THIS FILE! it has been automaticaly created by php7/scripts/credits from the information found in the various php7/ext/.../CREDITS and php7/sapi/.../CREDITS files if you want to change an entry you have to edit the appropriate CREDITS file instead */ CREDIT_LINE("BC Math", "Andi Gutmans"); CREDIT_LINE("Bzip2", "Sterling Hughes"); CREDIT_LINE("Calendar", "Shane Caraveo, Colin Viebrock, Hartmut Holzgraefe, Wez Furlong"); CREDIT_LINE("COM and .Net", "Wez Furlong"); CREDIT_LINE("ctype", "Hartmut Holzgraefe"); CREDIT_LINE("cURL", "Sterling Hughes"); CREDIT_LINE("Date/Time Support", "Derick Rethans"); CREDIT_LINE("DB-LIB (MS SQL, Sybase)", "Wez Furlong, Frank M. Kromann, Adam Baratz"); CREDIT_LINE("DBA", "Sascha Schumann, Marcus Boerger"); CREDIT_LINE("DOM", "Christian Stocker, Rob Richards, Marcus Boerger"); CREDIT_LINE("enchant", "Pierre-Alain Joye, Ilia Alshanetsky"); CREDIT_LINE("EXIF", "Rasmus Lerdorf, Marcus Boerger"); CREDIT_LINE("fileinfo", "Ilia Alshanetsky, Pierre Alain Joye, Scott MacVicar, Derick Rethans, Anatol Belski"); CREDIT_LINE("Firebird driver for PDO", "Ard Biesheuvel"); CREDIT_LINE("FTP", "Stefan Esser, Andrew Skalski"); CREDIT_LINE("GD imaging", "Rasmus Lerdorf, Stig Bakken, Jim Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger"); CREDIT_LINE("GetText", "Alex Plotnick"); CREDIT_LINE("GNU GMP support", "Stanislav Malyshev"); CREDIT_LINE("Iconv", "Rui Hirokawa, Stig Bakken, Moriyoshi Koizumi"); CREDIT_LINE("IMAP", "Rex Logan, Mark Musone, Brian Wang, Kaj-Michael Lang, Antoni Pamies Olive, Rasmus Lerdorf, Andrew Skalski, Chuck Hagenbuch, Daniel R Kalowsky"); CREDIT_LINE("Input Filter", "Rasmus Lerdorf, Derick Rethans, Pierre-Alain Joye, Ilia Alshanetsky"); CREDIT_LINE("InterBase", "Jouni Ahto, Andrew Avdeev, Ard Biesheuvel"); CREDIT_LINE("Internationalization", "Ed Batutis, Vladimir Iordanov, Dmitry Lakhtyuk, Stanislav Malyshev, Vadim Savchuk, Kirti Velankar"); CREDIT_LINE("JSON", "Jakub Zelenka, Omar Kilani, Scott MacVicar"); CREDIT_LINE("LDAP", "Amitay Isaacs, Eric Warnke, Rasmus Lerdorf, Gerrit Thomson, Stig Venaas"); CREDIT_LINE("LIBXML", "Christian Stocker, Rob Richards, Marcus Boerger, Wez Furlong, Shane Caraveo"); CREDIT_LINE("Multibyte String Functions", "Tsukada Takuya, Rui Hirokawa"); CREDIT_LINE("MySQL driver for PDO", "George Schlossnagle, Wez Furlong, Ilia Alshanetsky, Johannes Schlueter"); CREDIT_LINE("MySQLi", "Zak Greant, Georg Richter, Andrey Hristov, Ulf Wendel"); CREDIT_LINE("MySQLnd", "Andrey Hristov, Ulf Wendel, Georg Richter, Johannes Schlüter"); CREDIT_LINE("OCI8", "Stig Bakken, Thies C. Arntzen, Andy Sautins, David Benson, Maxim Maletsky, Harald Radi, Antony Dovgal, Andi Gutmans, Wez Furlong, Christopher Jones, Oracle Corporation"); CREDIT_LINE("ODBC driver for PDO", "Wez Furlong"); CREDIT_LINE("ODBC", "Stig Bakken, Andreas Karajannis, Frank M. Kromann, Daniel R. Kalowsky"); CREDIT_LINE("Opcache", "Andi Gutmans, Zeev Suraski, Stanislav Malyshev, Dmitry Stogov, Xinchen Hui"); CREDIT_LINE("OpenSSL", "Stig Venaas, Wez Furlong, Sascha Kettler, Scott MacVicar"); CREDIT_LINE("Oracle (OCI) driver for PDO", "Wez Furlong"); CREDIT_LINE("pcntl", "Jason Greene, Arnaud Le Blanc"); CREDIT_LINE("Perl Compatible Regexps", "Andrei Zmievski"); CREDIT_LINE("PHP Archive", "Gregory Beaver, Marcus Boerger"); CREDIT_LINE("PHP Data Objects", "Wez Furlong, Marcus Boerger, Sterling Hughes, George Schlossnagle, Ilia Alshanetsky"); CREDIT_LINE("PHP hash", "Sara Golemon, Rasmus Lerdorf, Stefan Esser, Michael Wallner, Scott MacVicar"); CREDIT_LINE("Posix", "Kristian Koehntopp"); CREDIT_LINE("PostgreSQL driver for PDO", "Edin Kadribasic, Ilia Alshanetsky"); CREDIT_LINE("PostgreSQL", "Jouni Ahto, Zeev Suraski, Yasuo Ohgaki, Chris Kings-Lynne"); CREDIT_LINE("Pspell", "Vlad Krupin"); CREDIT_LINE("Readline", "Thies C. Arntzen"); CREDIT_LINE("Recode", "Kristian Koehntopp"); CREDIT_LINE("Reflection", "Marcus Boerger, Timm Friebe, George Schlossnagle, Andrei Zmievski, Johannes Schlueter"); CREDIT_LINE("Sessions", "Sascha Schumann, Andrei Zmievski"); CREDIT_LINE("Shared Memory Operations", "Slava Poliakov, Ilia Alshanetsky"); CREDIT_LINE("SimpleXML", "Sterling Hughes, Marcus Boerger, Rob Richards"); CREDIT_LINE("SNMP", "Rasmus Lerdorf, Harrie Hazewinkel, Mike Jackson, Steven Lawrance, Johann Hanne, Boris Lytochkin"); CREDIT_LINE("SOAP", "Brad Lafountain, Shane Caraveo, Dmitry Stogov"); CREDIT_LINE("Sockets", "Chris Vandomelen, Sterling Hughes, Daniel Beulshausen, Jason Greene"); CREDIT_LINE("Sodium", "Frank Denis"); CREDIT_LINE("SPL", "Marcus Boerger, Etienne Kneuss"); CREDIT_LINE("SQLite 3.x driver for PDO", "Wez Furlong"); CREDIT_LINE("SQLite3", "Scott MacVicar, Ilia Alshanetsky, Brad Dewar"); CREDIT_LINE("System V Message based IPC", "Wez Furlong"); CREDIT_LINE("System V Semaphores", "Tom May"); CREDIT_LINE("System V Shared Memory", "Christian Cartus"); CREDIT_LINE("tidy", "John Coggeshall, Ilia Alshanetsky"); CREDIT_LINE("tokenizer", "Andrei Zmievski, Johannes Schlueter"); CREDIT_LINE("WDDX", "Andrei Zmievski"); CREDIT_LINE("XML", "Stig Bakken, Thies C. Arntzen, Sterling Hughes"); CREDIT_LINE("XMLReader", "Rob Richards"); CREDIT_LINE("xmlrpc", "Dan Libby"); CREDIT_LINE("XMLWriter", "Rob Richards, Pierre-Alain Joye"); CREDIT_LINE("XSL", "Christian Stocker, Rob Richards"); CREDIT_LINE("Zip", "Pierre-Alain Joye, Remi Collet"); CREDIT_LINE("Zlib", "Rasmus Lerdorf, Stefan Roehrich, Zeev Suraski, Jade Nicoletti, Michael Wallner"); PK!;~ext/standard/crypt_freesec.hnu[#ifndef _CRYPT_FREESEC_H #define _CRYPT_FREESEC_H #ifdef PHP_WIN32 # ifndef inline # define inline __inline # endif #endif #include "php_stdint.h" #define MD5_HASH_MAX_LEN 120 struct php_crypt_extended_data { int initialized; uint32_t saltbits; uint32_t old_salt; uint32_t en_keysl[16], en_keysr[16]; uint32_t de_keysl[16], de_keysr[16]; uint32_t old_rawkey0, old_rawkey1; char output[21]; }; /* * _crypt_extended_init() must be called explicitly before first use of * _crypt_extended_r(). */ void _crypt_extended_init(void); char *_crypt_extended_r(const char *key, const char *setting, struct php_crypt_extended_data *data); #endif PK! Jext/standard/pageinfo.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | +----------------------------------------------------------------------+ */ #ifndef PAGEINFO_H #define PAGEINFO_H PHP_FUNCTION(getmyuid); PHP_FUNCTION(getmygid); PHP_FUNCTION(getmypid); PHP_FUNCTION(getmyinode); PHP_FUNCTION(getlastmod); PHPAPI void php_statpage(void); PHPAPI time_t php_getlastmod(void); extern zend_long php_getuid(void); extern zend_long php_getgid(void); #endif PK!n1__ext/standard/dl.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Brian Schaffner | | Shane Caraveo | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef DL_H #define DL_H PHPAPI int php_load_extension(char *filename, int type, int start_now); PHPAPI void php_dl(char *file, int type, zval *return_value, int start_now); PHPAPI void *php_load_shlib(char *path, char **errp); /* dynamic loading functions */ PHPAPI PHP_FUNCTION(dl); PHP_MINFO_FUNCTION(dl); #endif /* DL_H */ PK!הPext/standard/css.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Colin Viebrock | +----------------------------------------------------------------------+ */ #ifndef CSS_H #define CSS_H PHPAPI void php_info_print_css(void); #endif PK!QsTbOOext/standard/php_link.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ */ #ifndef PHP_LINK_H #define PHP_LINK_H #if defined(HAVE_SYMLINK) || defined(PHP_WIN32) PHP_FUNCTION(link); PHP_FUNCTION(readlink); PHP_FUNCTION(linkinfo); PHP_FUNCTION(symlink); #endif #endif /* PHP_LINK_H */ PK!'ext/standard/php_ext_syslog.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Sæther Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_EXT_SYSLOG_H #define PHP_EXT_SYSLOG_H #ifdef HAVE_SYSLOG_H #include "php_syslog.h" PHP_MINIT_FUNCTION(syslog); PHP_RINIT_FUNCTION(syslog); #ifdef PHP_WIN32 PHP_RSHUTDOWN_FUNCTION(syslog); #endif PHP_MSHUTDOWN_FUNCTION(syslog); PHP_FUNCTION(openlog); PHP_FUNCTION(syslog); PHP_FUNCTION(closelog); #endif #endif /* PHP_EXT_SYSLOG_H */ PK!0naaext/standard/html_tables.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ */ #ifndef HTML_TABLES_H #define HTML_TABLES_H /************************************************************************** *************************************************************************** ** THIS FILE IS AUTOMATICALLY GENERATED. DO NOT MODIFY IT. ** *************************************************************************** ** Please change html_tables/html_table_gen.php instead and then ** ** run it in order to generate this file ** *************************************************************************** **************************************************************************/ enum entity_charset { cs_utf_8, cs_8859_1, cs_cp1252, cs_8859_15, cs_cp1251, cs_8859_5, cs_cp866, cs_macroman, cs_koi8r, cs_big5, cs_gb2312, cs_big5hkscs, cs_sjis, cs_eucjp, cs_numelems /* used to count the number of charsets */ }; #define CHARSET_UNICODE_COMPAT(cs) ((cs) <= cs_8859_1) #define CHARSET_SINGLE_BYTE(cs) ((cs) > cs_utf_8 && (cs) < cs_big5) #define CHARSET_PARTIAL_SUPPORT(cs) ((cs) >= cs_big5) static const struct { const char *codeset; uint32_t codeset_len; enum entity_charset charset; } charset_map[] = { { "ISO-8859-1", sizeof("ISO-8859-1")-1, cs_8859_1 }, { "ISO8859-1", sizeof("ISO8859-1")-1, cs_8859_1 }, { "ISO-8859-15", sizeof("ISO-8859-15")-1, cs_8859_15 }, { "ISO8859-15", sizeof("ISO8859-15")-1, cs_8859_15 }, { "utf-8", sizeof("utf-8")-1, cs_utf_8 }, { "cp1252", sizeof("cp1252")-1, cs_cp1252 }, { "Windows-1252", sizeof("Windows-1252")-1, cs_cp1252 }, { "1252", sizeof("1252")-1, cs_cp1252 }, { "BIG5", sizeof("BIG5")-1, cs_big5 }, { "950", sizeof("950")-1, cs_big5 }, { "GB2312", sizeof("GB2312")-1, cs_gb2312 }, { "936", sizeof("936")-1, cs_gb2312 }, { "BIG5-HKSCS", sizeof("BIG5-HKSCS")-1, cs_big5hkscs }, { "Shift_JIS", sizeof("Shift_JIS")-1, cs_sjis }, { "SJIS", sizeof("SJIS")-1, cs_sjis }, { "932", sizeof("932")-1, cs_sjis }, { "SJIS-win", sizeof("SJIS-win")-1, cs_sjis }, { "CP932", sizeof("CP932")-1, cs_sjis }, { "EUCJP", sizeof("EUCJP")-1, cs_eucjp }, { "EUC-JP", sizeof("EUC-JP")-1, cs_eucjp }, { "eucJP-win", sizeof("eucJP-win")-1, cs_eucjp }, { "KOI8-R", sizeof("KOI8-R")-1, cs_koi8r }, { "koi8-ru", sizeof("koi8-ru")-1, cs_koi8r }, { "koi8r", sizeof("koi8r")-1, cs_koi8r }, { "cp1251", sizeof("cp1251")-1, cs_cp1251 }, { "Windows-1251", sizeof("Windows-1251")-1, cs_cp1251 }, { "win-1251", sizeof("win-1251")-1, cs_cp1251 }, { "iso8859-5", sizeof("iso8859-5")-1, cs_8859_5 }, { "iso-8859-5", sizeof("iso-8859-5")-1, cs_8859_5 }, { "cp866", sizeof("cp866")-1, cs_cp866 }, { "866", sizeof("866")-1, cs_cp866 }, { "ibm866", sizeof("ibm866")-1, cs_cp866 }, { "MacRoman", sizeof("MacRoman")-1, cs_macroman } }; /* longest entity name length excluding & and ; */ #define LONGEST_ENTITY_LENGTH 31 /* Definitions for mappings *to* Unicode. * The origin charset must have at most 256 code points. * The multi-byte encodings are not supported */ typedef struct { unsigned short uni_cp[64]; } enc_to_uni_stage2; typedef struct { const enc_to_uni_stage2 *inner[4]; } enc_to_uni; /* bits 7-8 bits (only single bytes encodings supported )*/ #define ENT_ENC_TO_UNI_STAGE1(k) ((k & 0xC0) >> 6) /* bits 1-6 */ #define ENT_ENC_TO_UNI_STAGE2(k) ((k) & 0x3F) /* {{{ Mappings *to* Unicode for ISO-8859-1 */ /* {{{ Stage 2 tables for ISO-8859-1 */ static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_00 = { { 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000A, 0x000B, 0x000C, 0x000D, 0x000E, 0x000F, 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001A, 0x001B, 0x001C, 0x001D, 0x001E, 0x001F, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, } }; static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_40 = { { 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0x007F, } }; static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_80 = { { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, } }; static const enc_to_uni_stage2 enc_to_uni_s2_iso88591_C0 = { { 0x00C0, 0x00C1, 0x00C2, 0x00C3, 0x00C4, 0x00C5, 0x00C6, 0x00C7, 0x00C8, 0x00C9, 0x00CA, 0x00CB, 0x00CC, 0x00CD, 0x00CE, 0x00CF, 0x00D0, 0x00D1, 0x00D2, 0x00D3, 0x00D4, 0x00D5, 0x00D6, 0x00D7, 0x00D8, 0x00D9, 0x00DA, 0x00DB, 0x00DC, 0x00DD, 0x00DE, 0x00DF, 0x00E0, 0x00E1, 0x00E2, 0x00E3, 0x00E4, 0x00E5, 0x00E6, 0x00E7, 0x00E8, 0x00E9, 0x00EA, 0x00EB, 0x00EC, 0x00ED, 0x00EE, 0x00EF, 0x00F0, 0x00F1, 0x00F2, 0x00F3, 0x00F4, 0x00F5, 0x00F6, 0x00F7, 0x00F8, 0x00F9, 0x00FA, 0x00FB, 0x00FC, 0x00FD, 0x00FE, 0x00FF, } }; /* end of stage 2 tables for ISO-8859-1 }}} */ /* {{{ Stage 1 table for ISO-8859-1 */ static const enc_to_uni enc_to_uni_iso88591 = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_iso88591_80, &enc_to_uni_s2_iso88591_C0 } }; /* end of stage 1 table for ISO-8859-1 }}} */ /* {{{ Mappings *to* Unicode for ISO-8859-5 */ /* {{{ Stage 2 tables for ISO-8859-5 */ static const enc_to_uni_stage2 enc_to_uni_s2_iso88595_80 = { { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406, 0x0407, 0x0408, 0x0409, 0x040A, 0x040B, 0x040C, 0x00AD, 0x040E, 0x040F, 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, } }; static const enc_to_uni_stage2 enc_to_uni_s2_iso88595_C0 = { { 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x2116, 0x0451, 0x0452, 0x0453, 0x0454, 0x0455, 0x0456, 0x0457, 0x0458, 0x0459, 0x045A, 0x045B, 0x045C, 0x00A7, 0x045E, 0x045F, } }; /* end of stage 2 tables for ISO-8859-5 }}} */ /* {{{ Stage 1 table for ISO-8859-5 */ static const enc_to_uni enc_to_uni_iso88595 = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_iso88595_80, &enc_to_uni_s2_iso88595_C0 } }; /* end of stage 1 table for ISO-8859-5 }}} */ /* {{{ Mappings *to* Unicode for ISO-8859-15 */ /* {{{ Stage 2 tables for ISO-8859-15 */ static const enc_to_uni_stage2 enc_to_uni_s2_iso885915_80 = { { 0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087, 0x0088, 0x0089, 0x008A, 0x008B, 0x008C, 0x008D, 0x008E, 0x008F, 0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097, 0x0098, 0x0099, 0x009A, 0x009B, 0x009C, 0x009D, 0x009E, 0x009F, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x20AC, 0x00A5, 0x0160, 0x00A7, 0x0161, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x017D, 0x00B5, 0x00B6, 0x00B7, 0x017E, 0x00B9, 0x00BA, 0x00BB, 0x0152, 0x0153, 0x0178, 0x00BF, } }; /* end of stage 2 tables for ISO-8859-15 }}} */ /* {{{ Stage 1 table for ISO-8859-15 */ static const enc_to_uni enc_to_uni_iso885915 = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_iso885915_80, &enc_to_uni_s2_iso88591_C0 } }; /* end of stage 1 table for ISO-8859-15 }}} */ /* {{{ Mappings *to* Unicode for Windows-1252 */ /* {{{ Stage 2 tables for Windows-1252 */ static const enc_to_uni_stage2 enc_to_uni_s2_win1252_80 = { { 0x20AC, 0xFFFF, 0x201A, 0x0192, 0x201E, 0x2026, 0x2020, 0x2021, 0x02C6, 0x2030, 0x0160, 0x2039, 0x0152, 0xFFFF, 0x017D, 0xFFFF, 0xFFFF, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0x02DC, 0x2122, 0x0161, 0x203A, 0x0153, 0xFFFF, 0x017E, 0x0178, 0x00A0, 0x00A1, 0x00A2, 0x00A3, 0x00A4, 0x00A5, 0x00A6, 0x00A7, 0x00A8, 0x00A9, 0x00AA, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x00AF, 0x00B0, 0x00B1, 0x00B2, 0x00B3, 0x00B4, 0x00B5, 0x00B6, 0x00B7, 0x00B8, 0x00B9, 0x00BA, 0x00BB, 0x00BC, 0x00BD, 0x00BE, 0x00BF, } }; /* end of stage 2 tables for Windows-1252 }}} */ /* {{{ Stage 1 table for Windows-1252 */ static const enc_to_uni enc_to_uni_win1252 = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_win1252_80, &enc_to_uni_s2_iso88591_C0 } }; /* end of stage 1 table for Windows-1252 }}} */ /* {{{ Mappings *to* Unicode for Windows-1251 */ /* {{{ Stage 2 tables for Windows-1251 */ static const enc_to_uni_stage2 enc_to_uni_s2_win1251_80 = { { 0x0402, 0x0403, 0x201A, 0x0453, 0x201E, 0x2026, 0x2020, 0x2021, 0x20AC, 0x2030, 0x0409, 0x2039, 0x040A, 0x040C, 0x040B, 0x040F, 0x0452, 0x2018, 0x2019, 0x201C, 0x201D, 0x2022, 0x2013, 0x2014, 0xFFFF, 0x2122, 0x0459, 0x203A, 0x045A, 0x045C, 0x045B, 0x045F, 0x00A0, 0x040E, 0x045E, 0x0408, 0x00A4, 0x0490, 0x00A6, 0x00A7, 0x0401, 0x00A9, 0x0404, 0x00AB, 0x00AC, 0x00AD, 0x00AE, 0x0407, 0x00B0, 0x00B1, 0x0406, 0x0456, 0x0491, 0x00B5, 0x00B6, 0x00B7, 0x0451, 0x2116, 0x0454, 0x00BB, 0x0458, 0x0405, 0x0455, 0x0457, } }; static const enc_to_uni_stage2 enc_to_uni_s2_win1251_C0 = { { 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, } }; /* end of stage 2 tables for Windows-1251 }}} */ /* {{{ Stage 1 table for Windows-1251 */ static const enc_to_uni enc_to_uni_win1251 = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_win1251_80, &enc_to_uni_s2_win1251_C0 } }; /* end of stage 1 table for Windows-1251 }}} */ /* {{{ Mappings *to* Unicode for KOI8-R */ /* {{{ Stage 2 tables for KOI8-R */ static const enc_to_uni_stage2 enc_to_uni_s2_koi8r_80 = { { 0x2500, 0x2502, 0x250C, 0x2510, 0x2514, 0x2518, 0x251C, 0x2524, 0x252C, 0x2534, 0x253C, 0x2580, 0x2584, 0x2588, 0x258C, 0x2590, 0x2591, 0x2592, 0x2593, 0x2320, 0x25A0, 0x2219, 0x221A, 0x2248, 0x2264, 0x2265, 0x00A0, 0x2321, 0x00B0, 0x00B2, 0x00B7, 0x00F7, 0x2550, 0x2551, 0x2552, 0x0451, 0x2553, 0x2554, 0x2555, 0x2556, 0x2557, 0x2558, 0x2559, 0x255A, 0x255B, 0x255C, 0x255D, 0x255E, 0x255F, 0x2560, 0x2561, 0x0401, 0x2562, 0x2563, 0x2564, 0x2565, 0x2566, 0x2567, 0x2568, 0x2569, 0x256A, 0x256B, 0x256C, 0x00A9, } }; static const enc_to_uni_stage2 enc_to_uni_s2_koi8r_C0 = { { 0x044E, 0x0430, 0x0431, 0x0446, 0x0434, 0x0435, 0x0444, 0x0433, 0x0445, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x044F, 0x0440, 0x0441, 0x0442, 0x0443, 0x0436, 0x0432, 0x044C, 0x044B, 0x0437, 0x0448, 0x044D, 0x0449, 0x0447, 0x044A, 0x042E, 0x0410, 0x0411, 0x0426, 0x0414, 0x0415, 0x0424, 0x0413, 0x0425, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x042F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0416, 0x0412, 0x042C, 0x042B, 0x0417, 0x0428, 0x042D, 0x0429, 0x0427, 0x042A, } }; /* end of stage 2 tables for KOI8-R }}} */ /* {{{ Stage 1 table for KOI8-R */ static const enc_to_uni enc_to_uni_koi8r = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_koi8r_80, &enc_to_uni_s2_koi8r_C0 } }; /* end of stage 1 table for KOI8-R }}} */ /* {{{ Mappings *to* Unicode for CP-866 */ /* {{{ Stage 2 tables for CP-866 */ static const enc_to_uni_stage2 enc_to_uni_s2_cp866_80 = { { 0x0410, 0x0411, 0x0412, 0x0413, 0x0414, 0x0415, 0x0416, 0x0417, 0x0418, 0x0419, 0x041A, 0x041B, 0x041C, 0x041D, 0x041E, 0x041F, 0x0420, 0x0421, 0x0422, 0x0423, 0x0424, 0x0425, 0x0426, 0x0427, 0x0428, 0x0429, 0x042A, 0x042B, 0x042C, 0x042D, 0x042E, 0x042F, 0x0430, 0x0431, 0x0432, 0x0433, 0x0434, 0x0435, 0x0436, 0x0437, 0x0438, 0x0439, 0x043A, 0x043B, 0x043C, 0x043D, 0x043E, 0x043F, 0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557, 0x255D, 0x255C, 0x255B, 0x2510, } }; static const enc_to_uni_stage2 enc_to_uni_s2_cp866_C0 = { { 0x2514, 0x2534, 0x252C, 0x251C, 0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588, 0x2584, 0x258C, 0x2590, 0x2580, 0x0440, 0x0441, 0x0442, 0x0443, 0x0444, 0x0445, 0x0446, 0x0447, 0x0448, 0x0449, 0x044A, 0x044B, 0x044C, 0x044D, 0x044E, 0x044F, 0x0401, 0x0451, 0x0404, 0x0454, 0x0407, 0x0457, 0x040E, 0x045E, 0x00B0, 0x2219, 0x00B7, 0x221A, 0x2116, 0x00A4, 0x25A0, 0x00A0, } }; /* end of stage 2 tables for CP-866 }}} */ /* {{{ Stage 1 table for CP-866 */ static const enc_to_uni enc_to_uni_cp866 = { { &enc_to_uni_s2_iso88591_00, &enc_to_uni_s2_iso88591_40, &enc_to_uni_s2_cp866_80, &enc_to_uni_s2_cp866_C0 } }; /* end of stage 1 table for CP-866 }}} */ /* {{{ Mappings *to* Unicode for MacRoman */ /* {{{ Stage 2 tables for MacRoman */ static const enc_to_uni_stage2 enc_to_uni_s2_macroman_00 = { { 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002A, 0x002B, 0x002C, 0x002D, 0x002E, 0x002F, 0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003A, 0x003B, 0x003C, 0x003D, 0x003E, 0x003F, } }; static const enc_to_uni_stage2 enc_to_uni_s2_macroman_40 = { { 0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004A, 0x004B, 0x004C, 0x004D, 0x004E, 0x004F, 0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059, 0x005A, 0x005B, 0x005C, 0x005D, 0x005E, 0x005F, 0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067, 0x0068, 0x0069, 0x006A, 0x006B, 0x006C, 0x006D, 0x006E, 0x006F, 0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077, 0x0078, 0x0079, 0x007A, 0x007B, 0x007C, 0x007D, 0x007E, 0xFFFF, } }; static const enc_to_uni_stage2 enc_to_uni_s2_macroman_80 = { { 0x00C4, 0x00C5, 0x00C7, 0x00C9, 0x00D1, 0x00D6, 0x00DC, 0x00E1, 0x00E0, 0x00E2, 0x00E4, 0x00E3, 0x00E5, 0x00E7, 0x00E9, 0x00E8, 0x00EA, 0x00EB, 0x00ED, 0x00EC, 0x00EE, 0x00EF, 0x00F1, 0x00F3, 0x00F2, 0x00F4, 0x00F6, 0x00F5, 0x00FA, 0x00F9, 0x00FB, 0x00FC, 0x2020, 0x00B0, 0x00A2, 0x00A3, 0x00A7, 0x2022, 0x00B6, 0x00DF, 0x00AE, 0x00A9, 0x2122, 0x00B4, 0x00A8, 0x2260, 0x00C6, 0x00D8, 0x221E, 0x00B1, 0x2264, 0x2265, 0x00A5, 0x00B5, 0x2202, 0x2211, 0x220F, 0x03C0, 0x222B, 0x00AA, 0x00BA, 0x03A9, 0x00E6, 0x00F8, } }; static const enc_to_uni_stage2 enc_to_uni_s2_macroman_C0 = { { 0x00BF, 0x00A1, 0x00AC, 0x221A, 0x0192, 0x2248, 0x2206, 0x00AB, 0x00BB, 0x2026, 0x00A0, 0x00C0, 0x00C3, 0x00D5, 0x0152, 0x0153, 0x2013, 0x2014, 0x201C, 0x201D, 0x2018, 0x2019, 0x00F7, 0x25CA, 0x00FF, 0x0178, 0x2044, 0x20AC, 0x2039, 0x203A, 0xFB01, 0xFB02, 0x2021, 0x00B7, 0x201A, 0x201E, 0x2030, 0x00C2, 0x00CA, 0x00C1, 0x00CB, 0x00C8, 0x00CD, 0x00CE, 0x00CF, 0x00CC, 0x00D3, 0x00D4, 0xF8FF, 0x00D2, 0x00DA, 0x00DB, 0x00D9, 0x0131, 0x02C6, 0x02DC, 0x00AF, 0x02D8, 0x02D9, 0x02DA, 0x00B8, 0x02DD, 0x02DB, 0x02C7, } }; /* end of stage 2 tables for MacRoman }}} */ /* {{{ Stage 1 table for MacRoman */ static const enc_to_uni enc_to_uni_macroman = { { &enc_to_uni_s2_macroman_00, &enc_to_uni_s2_macroman_40, &enc_to_uni_s2_macroman_80, &enc_to_uni_s2_macroman_C0 } }; /* end of stage 1 table for MacRoman }}} */ /* {{{ Index of tables for encoding conversion */ static const enc_to_uni *const enc_to_uni_index[cs_numelems] = { NULL, &enc_to_uni_iso88591, &enc_to_uni_win1252, &enc_to_uni_iso885915, &enc_to_uni_win1251, &enc_to_uni_iso88595, &enc_to_uni_cp866, &enc_to_uni_macroman, &enc_to_uni_koi8r, }; /* }}} */ /* Definitions for mappings *from* Unicode */ typedef struct { unsigned short un_code_point; /* we don't need bigger */ unsigned char cs_code; /* currently, we only have maps to single-byte encodings */ } uni_to_enc; /* {{{ Mappings *from* Unicode for ISO-8859-15 */ static const uni_to_enc unimap_iso885915[] = { { 0x00A5, 0xA5 }, /* yen sign */ { 0x00A7, 0xA7 }, /* section sign */ { 0x00A9, 0xA9 }, /* copyright sign */ { 0x00AA, 0xAA }, /* feminine ordinal indicator */ { 0x00AB, 0xAB }, /* left-pointing double angle quotation mark */ { 0x00AC, 0xAC }, /* not sign */ { 0x00AD, 0xAD }, /* soft hyphen */ { 0x00AE, 0xAE }, /* registered sign */ { 0x00AF, 0xAF }, /* macron */ { 0x00B0, 0xB0 }, /* degree sign */ { 0x00B1, 0xB1 }, /* plus-minus sign */ { 0x00B2, 0xB2 }, /* superscript two */ { 0x00B3, 0xB3 }, /* superscript three */ { 0x00B5, 0xB5 }, /* micro sign */ { 0x00B6, 0xB6 }, /* pilcrow sign */ { 0x00B7, 0xB7 }, /* middle dot */ { 0x00B9, 0xB9 }, /* superscript one */ { 0x00BA, 0xBA }, /* masculine ordinal indicator */ { 0x00BB, 0xBB }, /* right-pointing double angle quotation mark */ { 0x0152, 0xBC }, /* latin capital ligature oe */ { 0x0153, 0xBD }, /* latin small ligature oe */ { 0x0160, 0xA6 }, /* latin capital letter s with caron */ { 0x0161, 0xA8 }, /* latin small letter s with caron */ { 0x0178, 0xBE }, /* latin capital letter y with diaeresis */ { 0x017D, 0xB4 }, /* latin capital letter z with caron */ { 0x017E, 0xB8 }, /* latin small letter z with caron */ { 0x20AC, 0xA4 }, /* euro sign */ }; /* {{{ end of mappings *from* Unicode for ISO-8859-15 */ /* {{{ Mappings *from* Unicode for Windows-1252 */ static const uni_to_enc unimap_win1252[] = { { 0x0152, 0x8C }, /* latin capital ligature oe */ { 0x0153, 0x9C }, /* latin small ligature oe */ { 0x0160, 0x8A }, /* latin capital letter s with caron */ { 0x0161, 0x9A }, /* latin small letter s with caron */ { 0x0178, 0x9F }, /* latin capital letter y with diaeresis */ { 0x017D, 0x8E }, /* latin capital letter z with caron */ { 0x017E, 0x9E }, /* latin small letter z with caron */ { 0x0192, 0x83 }, /* latin small letter f with hook */ { 0x02C6, 0x88 }, /* modifier letter circumflex accent */ { 0x02DC, 0x98 }, /* small tilde */ { 0x2013, 0x96 }, /* en dash */ { 0x2014, 0x97 }, /* em dash */ { 0x2018, 0x91 }, /* left single quotation mark */ { 0x2019, 0x92 }, /* right single quotation mark */ { 0x201A, 0x82 }, /* single low-9 quotation mark */ { 0x201C, 0x93 }, /* left double quotation mark */ { 0x201D, 0x94 }, /* right double quotation mark */ { 0x201E, 0x84 }, /* double low-9 quotation mark */ { 0x2020, 0x86 }, /* dagger */ { 0x2021, 0x87 }, /* double dagger */ { 0x2022, 0x95 }, /* bullet */ { 0x2026, 0x85 }, /* horizontal ellipsis */ { 0x2030, 0x89 }, /* per mille sign */ { 0x2039, 0x8B }, /* single left-pointing angle quotation mark */ { 0x203A, 0x9B }, /* single right-pointing angle quotation mark */ { 0x20AC, 0x80 }, /* euro sign */ { 0x2122, 0x99 }, /* trade mark sign */ }; /* {{{ end of mappings *from* Unicode for Windows-1252 */ /* {{{ Mappings *from* Unicode for Windows-1251 */ static const uni_to_enc unimap_win1251[] = { { 0x00A0, 0xA0 }, /* no-break space */ { 0x00A4, 0xA4 }, /* currency sign */ { 0x00A6, 0xA6 }, /* broken bar */ { 0x00A7, 0xA7 }, /* section sign */ { 0x00A9, 0xA9 }, /* copyright sign */ { 0x00AB, 0xAB }, /* left-pointing double angle quotation mark */ { 0x00AC, 0xAC }, /* not sign */ { 0x00AD, 0xAD }, /* soft hyphen */ { 0x00AE, 0xAE }, /* registered sign */ { 0x00B0, 0xB0 }, /* degree sign */ { 0x00B1, 0xB1 }, /* plus-minus sign */ { 0x00B5, 0xB5 }, /* micro sign */ { 0x00B6, 0xB6 }, /* pilcrow sign */ { 0x00B7, 0xB7 }, /* middle dot */ { 0x00BB, 0xBB }, /* right-pointing double angle quotation mark */ { 0x0401, 0xA8 }, /* cyrillic capital letter io */ { 0x0402, 0x80 }, /* cyrillic capital letter dje */ { 0x0403, 0x81 }, /* cyrillic capital letter gje */ { 0x0404, 0xAA }, /* cyrillic capital letter ukrainian ie */ { 0x0405, 0xBD }, /* cyrillic capital letter dze */ { 0x0406, 0xB2 }, /* cyrillic capital letter byelorussian-ukrainian i */ { 0x0407, 0xAF }, /* cyrillic capital letter yi */ { 0x0408, 0xA3 }, /* cyrillic capital letter je */ { 0x0409, 0x8A }, /* cyrillic capital letter lje */ { 0x040A, 0x8C }, /* cyrillic capital letter nje */ { 0x040B, 0x8E }, /* cyrillic capital letter tshe */ { 0x040C, 0x8D }, /* cyrillic capital letter kje */ { 0x040E, 0xA1 }, /* cyrillic capital letter short u */ { 0x040F, 0x8F }, /* cyrillic capital letter dzhe */ { 0x0410, 0xC0 }, /* cyrillic capital letter a */ { 0x0411, 0xC1 }, /* cyrillic capital letter be */ { 0x0412, 0xC2 }, /* cyrillic capital letter ve */ { 0x0413, 0xC3 }, /* cyrillic capital letter ghe */ { 0x0414, 0xC4 }, /* cyrillic capital letter de */ { 0x0415, 0xC5 }, /* cyrillic capital letter ie */ { 0x0416, 0xC6 }, /* cyrillic capital letter zhe */ { 0x0417, 0xC7 }, /* cyrillic capital letter ze */ { 0x0418, 0xC8 }, /* cyrillic capital letter i */ { 0x0419, 0xC9 }, /* cyrillic capital letter short i */ { 0x041A, 0xCA }, /* cyrillic capital letter ka */ { 0x041B, 0xCB }, /* cyrillic capital letter el */ { 0x041C, 0xCC }, /* cyrillic capital letter em */ { 0x041D, 0xCD }, /* cyrillic capital letter en */ { 0x041E, 0xCE }, /* cyrillic capital letter o */ { 0x041F, 0xCF }, /* cyrillic capital letter pe */ { 0x0420, 0xD0 }, /* cyrillic capital letter er */ { 0x0421, 0xD1 }, /* cyrillic capital letter es */ { 0x0422, 0xD2 }, /* cyrillic capital letter te */ { 0x0423, 0xD3 }, /* cyrillic capital letter u */ { 0x0424, 0xD4 }, /* cyrillic capital letter ef */ { 0x0425, 0xD5 }, /* cyrillic capital letter ha */ { 0x0426, 0xD6 }, /* cyrillic capital letter tse */ { 0x0427, 0xD7 }, /* cyrillic capital letter che */ { 0x0428, 0xD8 }, /* cyrillic capital letter sha */ { 0x0429, 0xD9 }, /* cyrillic capital letter shcha */ { 0x042A, 0xDA }, /* cyrillic capital letter hard sign */ { 0x042B, 0xDB }, /* cyrillic capital letter yeru */ { 0x042C, 0xDC }, /* cyrillic capital letter soft sign */ { 0x042D, 0xDD }, /* cyrillic capital letter e */ { 0x042E, 0xDE }, /* cyrillic capital letter yu */ { 0x042F, 0xDF }, /* cyrillic capital letter ya */ { 0x0430, 0xE0 }, /* cyrillic small letter a */ { 0x0431, 0xE1 }, /* cyrillic small letter be */ { 0x0432, 0xE2 }, /* cyrillic small letter ve */ { 0x0433, 0xE3 }, /* cyrillic small letter ghe */ { 0x0434, 0xE4 }, /* cyrillic small letter de */ { 0x0435, 0xE5 }, /* cyrillic small letter ie */ { 0x0436, 0xE6 }, /* cyrillic small letter zhe */ { 0x0437, 0xE7 }, /* cyrillic small letter ze */ { 0x0438, 0xE8 }, /* cyrillic small letter i */ { 0x0439, 0xE9 }, /* cyrillic small letter short i */ { 0x043A, 0xEA }, /* cyrillic small letter ka */ { 0x043B, 0xEB }, /* cyrillic small letter el */ { 0x043C, 0xEC }, /* cyrillic small letter em */ { 0x043D, 0xED }, /* cyrillic small letter en */ { 0x043E, 0xEE }, /* cyrillic small letter o */ { 0x043F, 0xEF }, /* cyrillic small letter pe */ { 0x0440, 0xF0 }, /* cyrillic small letter er */ { 0x0441, 0xF1 }, /* cyrillic small letter es */ { 0x0442, 0xF2 }, /* cyrillic small letter te */ { 0x0443, 0xF3 }, /* cyrillic small letter u */ { 0x0444, 0xF4 }, /* cyrillic small letter ef */ { 0x0445, 0xF5 }, /* cyrillic small letter ha */ { 0x0446, 0xF6 }, /* cyrillic small letter tse */ { 0x0447, 0xF7 }, /* cyrillic small letter che */ { 0x0448, 0xF8 }, /* cyrillic small letter sha */ { 0x0449, 0xF9 }, /* cyrillic small letter shcha */ { 0x044A, 0xFA }, /* cyrillic small letter hard sign */ { 0x044B, 0xFB }, /* cyrillic small letter yeru */ { 0x044C, 0xFC }, /* cyrillic small letter soft sign */ { 0x044D, 0xFD }, /* cyrillic small letter e */ { 0x044E, 0xFE }, /* cyrillic small letter yu */ { 0x044F, 0xFF }, /* cyrillic small letter ya */ { 0x0451, 0xB8 }, /* cyrillic small letter io */ { 0x0452, 0x90 }, /* cyrillic small letter dje */ { 0x0453, 0x83 }, /* cyrillic small letter gje */ { 0x0454, 0xBA }, /* cyrillic small letter ukrainian ie */ { 0x0455, 0xBE }, /* cyrillic small letter dze */ { 0x0456, 0xB3 }, /* cyrillic small letter byelorussian-ukrainian i */ { 0x0457, 0xBF }, /* cyrillic small letter yi */ { 0x0458, 0xBC }, /* cyrillic small letter je */ { 0x0459, 0x9A }, /* cyrillic small letter lje */ { 0x045A, 0x9C }, /* cyrillic small letter nje */ { 0x045B, 0x9E }, /* cyrillic small letter tshe */ { 0x045C, 0x9D }, /* cyrillic small letter kje */ { 0x045E, 0xA2 }, /* cyrillic small letter short u */ { 0x045F, 0x9F }, /* cyrillic small letter dzhe */ { 0x0490, 0xA5 }, /* cyrillic capital letter ghe with upturn */ { 0x0491, 0xB4 }, /* cyrillic small letter ghe with upturn */ { 0x2013, 0x96 }, /* en dash */ { 0x2014, 0x97 }, /* em dash */ { 0x2018, 0x91 }, /* left single quotation mark */ { 0x2019, 0x92 }, /* right single quotation mark */ { 0x201A, 0x82 }, /* single low-9 quotation mark */ { 0x201C, 0x93 }, /* left double quotation mark */ { 0x201D, 0x94 }, /* right double quotation mark */ { 0x201E, 0x84 }, /* double low-9 quotation mark */ { 0x2020, 0x86 }, /* dagger */ { 0x2021, 0x87 }, /* double dagger */ { 0x2022, 0x95 }, /* bullet */ { 0x2026, 0x85 }, /* horizontal ellipsis */ { 0x2030, 0x89 }, /* per mille sign */ { 0x2039, 0x8B }, /* single left-pointing angle quotation mark */ { 0x203A, 0x9B }, /* single right-pointing angle quotation mark */ { 0x20AC, 0x88 }, /* euro sign */ { 0x2116, 0xB9 }, /* numero sign */ { 0x2122, 0x99 }, /* trade mark sign */ }; /* {{{ end of mappings *from* Unicode for Windows-1251 */ /* {{{ Mappings *from* Unicode for KOI8-R */ static const uni_to_enc unimap_koi8r[] = { { 0x00A0, 0x9A }, /* no-break space */ { 0x00A9, 0xBF }, /* copyright sign */ { 0x00B0, 0x9C }, /* degree sign */ { 0x00B2, 0x9D }, /* superscript two */ { 0x00B7, 0x9E }, /* middle dot */ { 0x00F7, 0x9F }, /* division sign */ { 0x0401, 0xB3 }, /* cyrillic capital letter io */ { 0x0410, 0xE1 }, /* cyrillic capital letter a */ { 0x0411, 0xE2 }, /* cyrillic capital letter be */ { 0x0412, 0xF7 }, /* cyrillic capital letter ve */ { 0x0413, 0xE7 }, /* cyrillic capital letter ghe */ { 0x0414, 0xE4 }, /* cyrillic capital letter de */ { 0x0415, 0xE5 }, /* cyrillic capital letter ie */ { 0x0416, 0xF6 }, /* cyrillic capital letter zhe */ { 0x0417, 0xFA }, /* cyrillic capital letter ze */ { 0x0418, 0xE9 }, /* cyrillic capital letter i */ { 0x0419, 0xEA }, /* cyrillic capital letter short i */ { 0x041A, 0xEB }, /* cyrillic capital letter ka */ { 0x041B, 0xEC }, /* cyrillic capital letter el */ { 0x041C, 0xED }, /* cyrillic capital letter em */ { 0x041D, 0xEE }, /* cyrillic capital letter en */ { 0x041E, 0xEF }, /* cyrillic capital letter o */ { 0x041F, 0xF0 }, /* cyrillic capital letter pe */ { 0x0420, 0xF2 }, /* cyrillic capital letter er */ { 0x0421, 0xF3 }, /* cyrillic capital letter es */ { 0x0422, 0xF4 }, /* cyrillic capital letter te */ { 0x0423, 0xF5 }, /* cyrillic capital letter u */ { 0x0424, 0xE6 }, /* cyrillic capital letter ef */ { 0x0425, 0xE8 }, /* cyrillic capital letter ha */ { 0x0426, 0xE3 }, /* cyrillic capital letter tse */ { 0x0427, 0xFE }, /* cyrillic capital letter che */ { 0x0428, 0xFB }, /* cyrillic capital letter sha */ { 0x0429, 0xFD }, /* cyrillic capital letter shcha */ { 0x042A, 0xFF }, /* cyrillic capital letter hard sign */ { 0x042B, 0xF9 }, /* cyrillic capital letter yeru */ { 0x042C, 0xF8 }, /* cyrillic capital letter soft sign */ { 0x042D, 0xFC }, /* cyrillic capital letter e */ { 0x042E, 0xE0 }, /* cyrillic capital letter yu */ { 0x042F, 0xF1 }, /* cyrillic capital letter ya */ { 0x0430, 0xC1 }, /* cyrillic small letter a */ { 0x0431, 0xC2 }, /* cyrillic small letter be */ { 0x0432, 0xD7 }, /* cyrillic small letter ve */ { 0x0433, 0xC7 }, /* cyrillic small letter ghe */ { 0x0434, 0xC4 }, /* cyrillic small letter de */ { 0x0435, 0xC5 }, /* cyrillic small letter ie */ { 0x0436, 0xD6 }, /* cyrillic small letter zhe */ { 0x0437, 0xDA }, /* cyrillic small letter ze */ { 0x0438, 0xC9 }, /* cyrillic small letter i */ { 0x0439, 0xCA }, /* cyrillic small letter short i */ { 0x043A, 0xCB }, /* cyrillic small letter ka */ { 0x043B, 0xCC }, /* cyrillic small letter el */ { 0x043C, 0xCD }, /* cyrillic small letter em */ { 0x043D, 0xCE }, /* cyrillic small letter en */ { 0x043E, 0xCF }, /* cyrillic small letter o */ { 0x043F, 0xD0 }, /* cyrillic small letter pe */ { 0x0440, 0xD2 }, /* cyrillic small letter er */ { 0x0441, 0xD3 }, /* cyrillic small letter es */ { 0x0442, 0xD4 }, /* cyrillic small letter te */ { 0x0443, 0xD5 }, /* cyrillic small letter u */ { 0x0444, 0xC6 }, /* cyrillic small letter ef */ { 0x0445, 0xC8 }, /* cyrillic small letter ha */ { 0x0446, 0xC3 }, /* cyrillic small letter tse */ { 0x0447, 0xDE }, /* cyrillic small letter che */ { 0x0448, 0xDB }, /* cyrillic small letter sha */ { 0x0449, 0xDD }, /* cyrillic small letter shcha */ { 0x044A, 0xDF }, /* cyrillic small letter hard sign */ { 0x044B, 0xD9 }, /* cyrillic small letter yeru */ { 0x044C, 0xD8 }, /* cyrillic small letter soft sign */ { 0x044D, 0xDC }, /* cyrillic small letter e */ { 0x044E, 0xC0 }, /* cyrillic small letter yu */ { 0x044F, 0xD1 }, /* cyrillic small letter ya */ { 0x0451, 0xA3 }, /* cyrillic small letter io */ { 0x2219, 0x95 }, /* bullet operator */ { 0x221A, 0x96 }, /* square root */ { 0x2248, 0x97 }, /* almost equal to */ { 0x2264, 0x98 }, /* less-than or equal to */ { 0x2265, 0x99 }, /* greater-than or equal to */ { 0x2320, 0x93 }, /* top half integral */ { 0x2321, 0x9B }, /* bottom half integral */ { 0x2500, 0x80 }, /* box drawings light horizontal */ { 0x2502, 0x81 }, /* box drawings light vertical */ { 0x250C, 0x82 }, /* box drawings light down and right */ { 0x2510, 0x83 }, /* box drawings light down and left */ { 0x2514, 0x84 }, /* box drawings light up and right */ { 0x2518, 0x85 }, /* box drawings light up and left */ { 0x251C, 0x86 }, /* box drawings light vertical and right */ { 0x2524, 0x87 }, /* box drawings light vertical and left */ { 0x252C, 0x88 }, /* box drawings light down and horizontal */ { 0x2534, 0x89 }, /* box drawings light up and horizontal */ { 0x253C, 0x8A }, /* box drawings light vertical and horizontal */ { 0x2550, 0xA0 }, /* box drawings double horizontal */ { 0x2551, 0xA1 }, /* box drawings double vertical */ { 0x2552, 0xA2 }, /* box drawings down single and right double */ { 0x2553, 0xA4 }, /* box drawings down double and right single */ { 0x2554, 0xA5 }, /* box drawings double down and right */ { 0x2555, 0xA6 }, /* box drawings down single and left double */ { 0x2556, 0xA7 }, /* box drawings down double and left single */ { 0x2557, 0xA8 }, /* box drawings double down and left */ { 0x2558, 0xA9 }, /* box drawings up single and right double */ { 0x2559, 0xAA }, /* box drawings up double and right single */ { 0x255A, 0xAB }, /* box drawings double up and right */ { 0x255B, 0xAC }, /* box drawings up single and left double */ { 0x255C, 0xAD }, /* box drawings up double and left single */ { 0x255D, 0xAE }, /* box drawings double up and left */ { 0x255E, 0xAF }, /* box drawings vertical single and right double */ { 0x255F, 0xB0 }, /* box drawings vertical double and right single */ { 0x2560, 0xB1 }, /* box drawings double vertical and right */ { 0x2561, 0xB2 }, /* box drawings vertical single and left double */ { 0x2562, 0xB4 }, /* box drawings vertical double and left single */ { 0x2563, 0xB5 }, /* box drawings double vertical and left */ { 0x2564, 0xB6 }, /* box drawings down single and horizontal double */ { 0x2565, 0xB7 }, /* box drawings down double and horizontal single */ { 0x2566, 0xB8 }, /* box drawings double down and horizontal */ { 0x2567, 0xB9 }, /* box drawings up single and horizontal double */ { 0x2568, 0xBA }, /* box drawings up double and horizontal single */ { 0x2569, 0xBB }, /* box drawings double up and horizontal */ { 0x256A, 0xBC }, /* box drawings vertical single and horizontal double */ { 0x256B, 0xBD }, /* box drawings vertical double and horizontal single */ { 0x256C, 0xBE }, /* box drawings double vertical and horizontal */ { 0x2580, 0x8B }, /* upper half block */ { 0x2584, 0x8C }, /* lower half block */ { 0x2588, 0x8D }, /* full block */ { 0x258C, 0x8E }, /* left half block */ { 0x2590, 0x8F }, /* right half block */ { 0x2591, 0x90 }, /* light shade */ { 0x2592, 0x91 }, /* medium shade */ { 0x2593, 0x92 }, /* dark shade */ { 0x25A0, 0x94 }, /* black square */ }; /* {{{ end of mappings *from* Unicode for KOI8-R */ /* {{{ Mappings *from* Unicode for CP-866 */ static const uni_to_enc unimap_cp866[] = { { 0x00A0, 0xFF }, /* no-break space */ { 0x00A4, 0xFD }, /* currency sign */ { 0x00B0, 0xF8 }, /* degree sign */ { 0x00B7, 0xFA }, /* middle dot */ { 0x0401, 0xF0 }, /* cyrillic capital letter io */ { 0x0404, 0xF2 }, /* cyrillic capital letter ukrainian ie */ { 0x0407, 0xF4 }, /* cyrillic capital letter yi */ { 0x040E, 0xF6 }, /* cyrillic capital letter short u */ { 0x0410, 0x80 }, /* cyrillic capital letter a */ { 0x0411, 0x81 }, /* cyrillic capital letter be */ { 0x0412, 0x82 }, /* cyrillic capital letter ve */ { 0x0413, 0x83 }, /* cyrillic capital letter ghe */ { 0x0414, 0x84 }, /* cyrillic capital letter de */ { 0x0415, 0x85 }, /* cyrillic capital letter ie */ { 0x0416, 0x86 }, /* cyrillic capital letter zhe */ { 0x0417, 0x87 }, /* cyrillic capital letter ze */ { 0x0418, 0x88 }, /* cyrillic capital letter i */ { 0x0419, 0x89 }, /* cyrillic capital letter short i */ { 0x041A, 0x8A }, /* cyrillic capital letter ka */ { 0x041B, 0x8B }, /* cyrillic capital letter el */ { 0x041C, 0x8C }, /* cyrillic capital letter em */ { 0x041D, 0x8D }, /* cyrillic capital letter en */ { 0x041E, 0x8E }, /* cyrillic capital letter o */ { 0x041F, 0x8F }, /* cyrillic capital letter pe */ { 0x0420, 0x90 }, /* cyrillic capital letter er */ { 0x0421, 0x91 }, /* cyrillic capital letter es */ { 0x0422, 0x92 }, /* cyrillic capital letter te */ { 0x0423, 0x93 }, /* cyrillic capital letter u */ { 0x0424, 0x94 }, /* cyrillic capital letter ef */ { 0x0425, 0x95 }, /* cyrillic capital letter ha */ { 0x0426, 0x96 }, /* cyrillic capital letter tse */ { 0x0427, 0x97 }, /* cyrillic capital letter che */ { 0x0428, 0x98 }, /* cyrillic capital letter sha */ { 0x0429, 0x99 }, /* cyrillic capital letter shcha */ { 0x042A, 0x9A }, /* cyrillic capital letter hard sign */ { 0x042B, 0x9B }, /* cyrillic capital letter yeru */ { 0x042C, 0x9C }, /* cyrillic capital letter soft sign */ { 0x042D, 0x9D }, /* cyrillic capital letter e */ { 0x042E, 0x9E }, /* cyrillic capital letter yu */ { 0x042F, 0x9F }, /* cyrillic capital letter ya */ { 0x0430, 0xA0 }, /* cyrillic small letter a */ { 0x0431, 0xA1 }, /* cyrillic small letter be */ { 0x0432, 0xA2 }, /* cyrillic small letter ve */ { 0x0433, 0xA3 }, /* cyrillic small letter ghe */ { 0x0434, 0xA4 }, /* cyrillic small letter de */ { 0x0435, 0xA5 }, /* cyrillic small letter ie */ { 0x0436, 0xA6 }, /* cyrillic small letter zhe */ { 0x0437, 0xA7 }, /* cyrillic small letter ze */ { 0x0438, 0xA8 }, /* cyrillic small letter i */ { 0x0439, 0xA9 }, /* cyrillic small letter short i */ { 0x043A, 0xAA }, /* cyrillic small letter ka */ { 0x043B, 0xAB }, /* cyrillic small letter el */ { 0x043C, 0xAC }, /* cyrillic small letter em */ { 0x043D, 0xAD }, /* cyrillic small letter en */ { 0x043E, 0xAE }, /* cyrillic small letter o */ { 0x043F, 0xAF }, /* cyrillic small letter pe */ { 0x0440, 0xE0 }, /* cyrillic small letter er */ { 0x0441, 0xE1 }, /* cyrillic small letter es */ { 0x0442, 0xE2 }, /* cyrillic small letter te */ { 0x0443, 0xE3 }, /* cyrillic small letter u */ { 0x0444, 0xE4 }, /* cyrillic small letter ef */ { 0x0445, 0xE5 }, /* cyrillic small letter ha */ { 0x0446, 0xE6 }, /* cyrillic small letter tse */ { 0x0447, 0xE7 }, /* cyrillic small letter che */ { 0x0448, 0xE8 }, /* cyrillic small letter sha */ { 0x0449, 0xE9 }, /* cyrillic small letter shcha */ { 0x044A, 0xEA }, /* cyrillic small letter hard sign */ { 0x044B, 0xEB }, /* cyrillic small letter yeru */ { 0x044C, 0xEC }, /* cyrillic small letter soft sign */ { 0x044D, 0xED }, /* cyrillic small letter e */ { 0x044E, 0xEE }, /* cyrillic small letter yu */ { 0x044F, 0xEF }, /* cyrillic small letter ya */ { 0x0451, 0xF1 }, /* cyrillic small letter io */ { 0x0454, 0xF3 }, /* cyrillic small letter ukrainian ie */ { 0x0457, 0xF5 }, /* cyrillic small letter yi */ { 0x045E, 0xF7 }, /* cyrillic small letter short u */ { 0x2116, 0xFC }, /* numero sign */ { 0x2219, 0xF9 }, /* bullet operator */ { 0x221A, 0xFB }, /* square root */ { 0x2500, 0xC4 }, /* box drawings light horizontal */ { 0x2502, 0xB3 }, /* box drawings light vertical */ { 0x250C, 0xDA }, /* box drawings light down and right */ { 0x2510, 0xBF }, /* box drawings light down and left */ { 0x2514, 0xC0 }, /* box drawings light up and right */ { 0x2518, 0xD9 }, /* box drawings light up and left */ { 0x251C, 0xC3 }, /* box drawings light vertical and right */ { 0x2524, 0xB4 }, /* box drawings light vertical and left */ { 0x252C, 0xC2 }, /* box drawings light down and horizontal */ { 0x2534, 0xC1 }, /* box drawings light up and horizontal */ { 0x253C, 0xC5 }, /* box drawings light vertical and horizontal */ { 0x2550, 0xCD }, /* box drawings double horizontal */ { 0x2551, 0xBA }, /* box drawings double vertical */ { 0x2552, 0xD5 }, /* box drawings down single and right double */ { 0x2553, 0xD6 }, /* box drawings down double and right single */ { 0x2554, 0xC9 }, /* box drawings double down and right */ { 0x2555, 0xB8 }, /* box drawings down single and left double */ { 0x2556, 0xB7 }, /* box drawings down double and left single */ { 0x2557, 0xBB }, /* box drawings double down and left */ { 0x2558, 0xD4 }, /* box drawings up single and right double */ { 0x2559, 0xD3 }, /* box drawings up double and right single */ { 0x255A, 0xC8 }, /* box drawings double up and right */ { 0x255B, 0xBE }, /* box drawings up single and left double */ { 0x255C, 0xBD }, /* box drawings up double and left single */ { 0x255D, 0xBC }, /* box drawings double up and left */ { 0x255E, 0xC6 }, /* box drawings vertical single and right double */ { 0x255F, 0xC7 }, /* box drawings vertical double and right single */ { 0x2560, 0xCC }, /* box drawings double vertical and right */ { 0x2561, 0xB5 }, /* box drawings vertical single and left double */ { 0x2562, 0xB6 }, /* box drawings vertical double and left single */ { 0x2563, 0xB9 }, /* box drawings double vertical and left */ { 0x2564, 0xD1 }, /* box drawings down single and horizontal double */ { 0x2565, 0xD2 }, /* box drawings down double and horizontal single */ { 0x2566, 0xCB }, /* box drawings double down and horizontal */ { 0x2567, 0xCF }, /* box drawings up single and horizontal double */ { 0x2568, 0xD0 }, /* box drawings up double and horizontal single */ { 0x2569, 0xCA }, /* box drawings double up and horizontal */ { 0x256A, 0xD8 }, /* box drawings vertical single and horizontal double */ { 0x256B, 0xD7 }, /* box drawings vertical double and horizontal single */ { 0x256C, 0xCE }, /* box drawings double vertical and horizontal */ { 0x2580, 0xDF }, /* upper half block */ { 0x2584, 0xDC }, /* lower half block */ { 0x2588, 0xDB }, /* full block */ { 0x258C, 0xDD }, /* left half block */ { 0x2590, 0xDE }, /* right half block */ { 0x2591, 0xB0 }, /* light shade */ { 0x2592, 0xB1 }, /* medium shade */ { 0x2593, 0xB2 }, /* dark shade */ { 0x25A0, 0xFE }, /* black square */ }; /* {{{ end of mappings *from* Unicode for CP-866 */ /* {{{ Mappings *from* Unicode for MacRoman */ static const uni_to_enc unimap_macroman[] = { { 0x00A0, 0xCA }, /* no-break space */ { 0x00A1, 0xC1 }, /* inverted exclamation mark */ { 0x00A2, 0xA2 }, /* cent sign */ { 0x00A3, 0xA3 }, /* pound sign */ { 0x00A5, 0xB4 }, /* yen sign */ { 0x00A7, 0xA4 }, /* section sign */ { 0x00A8, 0xAC }, /* diaeresis */ { 0x00A9, 0xA9 }, /* copyright sign */ { 0x00AA, 0xBB }, /* feminine ordinal indicator */ { 0x00AB, 0xC7 }, /* left-pointing double angle quotation mark */ { 0x00AC, 0xC2 }, /* not sign */ { 0x00AE, 0xA8 }, /* registered sign */ { 0x00AF, 0xF8 }, /* macron */ { 0x00B0, 0xA1 }, /* degree sign */ { 0x00B1, 0xB1 }, /* plus-minus sign */ { 0x00B4, 0xAB }, /* acute accent */ { 0x00B5, 0xB5 }, /* micro sign */ { 0x00B6, 0xA6 }, /* pilcrow sign */ { 0x00B7, 0xE1 }, /* middle dot */ { 0x00B8, 0xFC }, /* cedilla */ { 0x00BA, 0xBC }, /* masculine ordinal indicator */ { 0x00BB, 0xC8 }, /* right-pointing double angle quotation mark */ { 0x00BF, 0xC0 }, /* inverted question mark */ { 0x00C0, 0xCB }, /* latin capital letter a with grave */ { 0x00C1, 0xE7 }, /* latin capital letter a with acute */ { 0x00C2, 0xE5 }, /* latin capital letter a with circumflex */ { 0x00C3, 0xCC }, /* latin capital letter a with tilde */ { 0x00C4, 0x80 }, /* latin capital letter a with diaeresis */ { 0x00C5, 0x81 }, /* latin capital letter a with ring above */ { 0x00C6, 0xAE }, /* latin capital letter ae */ { 0x00C7, 0x82 }, /* latin capital letter c with cedilla */ { 0x00C8, 0xE9 }, /* latin capital letter e with grave */ { 0x00C9, 0x83 }, /* latin capital letter e with acute */ { 0x00CA, 0xE6 }, /* latin capital letter e with circumflex */ { 0x00CB, 0xE8 }, /* latin capital letter e with diaeresis */ { 0x00CC, 0xED }, /* latin capital letter i with grave */ { 0x00CD, 0xEA }, /* latin capital letter i with acute */ { 0x00CE, 0xEB }, /* latin capital letter i with circumflex */ { 0x00CF, 0xEC }, /* latin capital letter i with diaeresis */ { 0x00D1, 0x84 }, /* latin capital letter n with tilde */ { 0x00D2, 0xF1 }, /* latin capital letter o with grave */ { 0x00D3, 0xEE }, /* latin capital letter o with acute */ { 0x00D4, 0xEF }, /* latin capital letter o with circumflex */ { 0x00D5, 0xCD }, /* latin capital letter o with tilde */ { 0x00D6, 0x85 }, /* latin capital letter o with diaeresis */ { 0x00D8, 0xAF }, /* latin capital letter o with stroke */ { 0x00D9, 0xF4 }, /* latin capital letter u with grave */ { 0x00DA, 0xF2 }, /* latin capital letter u with acute */ { 0x00DB, 0xF3 }, /* latin capital letter u with circumflex */ { 0x00DC, 0x86 }, /* latin capital letter u with diaeresis */ { 0x00DF, 0xA7 }, /* latin small letter sharp s */ { 0x00E0, 0x88 }, /* latin small letter a with grave */ { 0x00E1, 0x87 }, /* latin small letter a with acute */ { 0x00E2, 0x89 }, /* latin small letter a with circumflex */ { 0x00E3, 0x8B }, /* latin small letter a with tilde */ { 0x00E4, 0x8A }, /* latin small letter a with diaeresis */ { 0x00E5, 0x8C }, /* latin small letter a with ring above */ { 0x00E6, 0xBE }, /* latin small letter ae */ { 0x00E7, 0x8D }, /* latin small letter c with cedilla */ { 0x00E8, 0x8F }, /* latin small letter e with grave */ { 0x00E9, 0x8E }, /* latin small letter e with acute */ { 0x00EA, 0x90 }, /* latin small letter e with circumflex */ { 0x00EB, 0x91 }, /* latin small letter e with diaeresis */ { 0x00EC, 0x93 }, /* latin small letter i with grave */ { 0x00ED, 0x92 }, /* latin small letter i with acute */ { 0x00EE, 0x94 }, /* latin small letter i with circumflex */ { 0x00EF, 0x95 }, /* latin small letter i with diaeresis */ { 0x00F1, 0x96 }, /* latin small letter n with tilde */ { 0x00F2, 0x98 }, /* latin small letter o with grave */ { 0x00F3, 0x97 }, /* latin small letter o with acute */ { 0x00F4, 0x99 }, /* latin small letter o with circumflex */ { 0x00F5, 0x9B }, /* latin small letter o with tilde */ { 0x00F6, 0x9A }, /* latin small letter o with diaeresis */ { 0x00F7, 0xD6 }, /* division sign */ { 0x00F8, 0xBF }, /* latin small letter o with stroke */ { 0x00F9, 0x9D }, /* latin small letter u with grave */ { 0x00FA, 0x9C }, /* latin small letter u with acute */ { 0x00FB, 0x9E }, /* latin small letter u with circumflex */ { 0x00FC, 0x9F }, /* latin small letter u with diaeresis */ { 0x00FF, 0xD8 }, /* latin small letter y with diaeresis */ { 0x0131, 0xF5 }, /* latin small letter dotless i */ { 0x0152, 0xCE }, /* latin capital ligature oe */ { 0x0153, 0xCF }, /* latin small ligature oe */ { 0x0178, 0xD9 }, /* latin capital letter y with diaeresis */ { 0x0192, 0xC4 }, /* latin small letter f with hook */ { 0x02C6, 0xF6 }, /* modifier letter circumflex accent */ { 0x02C7, 0xFF }, /* caron */ { 0x02D8, 0xF9 }, /* breve */ { 0x02D9, 0xFA }, /* dot above */ { 0x02DA, 0xFB }, /* ring above */ { 0x02DB, 0xFE }, /* ogonek */ { 0x02DC, 0xF7 }, /* small tilde */ { 0x02DD, 0xFD }, /* double acute accent */ { 0x03A9, 0xBD }, /* greek capital letter omega */ { 0x03C0, 0xB9 }, /* greek small letter pi */ { 0x2013, 0xD0 }, /* en dash */ { 0x2014, 0xD1 }, /* em dash */ { 0x2018, 0xD4 }, /* left single quotation mark */ { 0x2019, 0xD5 }, /* right single quotation mark */ { 0x201A, 0xE2 }, /* single low-9 quotation mark */ { 0x201C, 0xD2 }, /* left double quotation mark */ { 0x201D, 0xD3 }, /* right double quotation mark */ { 0x201E, 0xE3 }, /* double low-9 quotation mark */ { 0x2020, 0xA0 }, /* dagger */ { 0x2021, 0xE0 }, /* double dagger */ { 0x2022, 0xA5 }, /* bullet */ { 0x2026, 0xC9 }, /* horizontal ellipsis */ { 0x2030, 0xE4 }, /* per mille sign */ { 0x2039, 0xDC }, /* single left-pointing angle quotation mark */ { 0x203A, 0xDD }, /* single right-pointing angle quotation mark */ { 0x2044, 0xDA }, /* fraction slash */ { 0x20AC, 0xDB }, /* euro sign */ { 0x2122, 0xAA }, /* trade mark sign */ { 0x2202, 0xB6 }, /* partial differential */ { 0x2206, 0xC6 }, /* increment */ { 0x220F, 0xB8 }, /* n-ary product */ { 0x2211, 0xB7 }, /* n-ary summation */ { 0x221A, 0xC3 }, /* square root */ { 0x221E, 0xB0 }, /* infinity */ { 0x222B, 0xBA }, /* integral */ { 0x2248, 0xC5 }, /* almost equal to */ { 0x2260, 0xAD }, /* not equal to */ { 0x2264, 0xB2 }, /* less-than or equal to */ { 0x2265, 0xB3 }, /* greater-than or equal to */ { 0x25CA, 0xD7 }, /* lozenge */ { 0xF8FF, 0xF0 }, /* apple logo */ { 0xFB01, 0xDE }, /* latin small ligature fi */ { 0xFB02, 0xDF }, /* latin small ligature fl */ }; /* {{{ end of mappings *from* Unicode for MacRoman */ /* HTML 5 has many more named entities. * Some of them map to two unicode code points, not one. * We're going to use a three-stage table (with an extra one for the entities * with two code points). */ #define ENT_STAGE1_INDEX(k) (((k) & 0xFFF000) >> 12) /* > 1D, we have no mapping */ #define ENT_STAGE2_INDEX(k) (((k) & 0xFC0) >> 6) #define ENT_STAGE3_INDEX(k) ((k) & 0x3F) #define ENT_CODE_POINT_FROM_STAGES(i,j,k) (((i) << 12) | ((j) << 6) | (k)) /* The default entity may be NULL. Binary search is still possible while is senseless as there are just two rows (see also find_entity_for_char()). */ typedef union { struct { const char *default_entity; unsigned size; /* number of remaining entries in the table */ unsigned short default_entity_len; } leading_entry; struct { const char *entity; unsigned second_cp; /* second code point */ unsigned short entity_len; } normal_entry; } entity_multicodepoint_row; /* blocks of these should start at code points k where k % 0xFC0 == 0 */ typedef struct { char ambiguous; /* if 0 look into entity */ union { struct { const char *entity; /* may be NULL */ unsigned short entity_len; } ent; const entity_multicodepoint_row *multicodepoint_table; } data; } entity_stage3_row; /* Calculate k & 0x3F Use as offset */ typedef const entity_stage3_row *entity_stage2_row; /* 64 elements */ /* Calculate k & 0xFC0 >> 6. Use as offset */ typedef const entity_stage3_row *const *entity_stage1_row; /* 64 elements */ /* For stage 1, Calculate k & 0xFFF000 >> 3*4. * If larger than 1D, we have no mapping. Otherwise lookup that index */ typedef struct { const entity_stage1_row *ms_table; /* for tables with only basic entities, this member is to be accessed * directly for better performance: */ const entity_stage3_row *table; } entity_table_opt; /* Replaced "GT" > "gt" and "QUOT" > "quot" for consistency's sake. */ /* {{{ Start of HTML5 multi-stage table for codepoint -> entity */ /* {{{ Start of double code point tables for HTML5 */ static const entity_multicodepoint_row multi_cp_html5_0003C[] = { { {"lt", 01, 2} }, { {"nvlt", 0x020D2, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_0003D[] = { { {"equals", 01, 6} }, { {"bne", 0x020E5, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_0003E[] = { { {"gt", 01, 2} }, { {"nvgt", 0x020D2, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_00066[] = { { {NULL, 01, 0} }, { {"fjlig", 0x0006A, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_0205F[] = { { {"MediumSpace", 01, 11} }, { {"ThickSpace", 0x0200A, 10} }, }; static const entity_multicodepoint_row multi_cp_html5_0219D[] = { { {"rarrw", 01, 5} }, { {"nrarrw", 0x00338, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_02202[] = { { {"part", 01, 4} }, { {"npart", 0x00338, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_02220[] = { { {"angle", 01, 5} }, { {"nang", 0x020D2, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_02229[] = { { {"cap", 01, 3} }, { {"caps", 0x0FE00, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_0222A[] = { { {"cup", 01, 3} }, { {"cups", 0x0FE00, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_0223C[] = { { {"sim", 01, 3} }, { {"nvsim", 0x020D2, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_0223D[] = { { {"bsim", 01, 4} }, { {"race", 0x00331, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_0223E[] = { { {"ac", 01, 2} }, { {"acE", 0x00333, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_02242[] = { { {"esim", 01, 4} }, { {"nesim", 0x00338, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_0224B[] = { { {"apid", 01, 4} }, { {"napid", 0x00338, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_0224D[] = { { {"CupCap", 01, 6} }, { {"nvap", 0x020D2, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_0224E[] = { { {"bump", 01, 4} }, { {"nbump", 0x00338, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_0224F[] = { { {"HumpEqual", 01, 9} }, { {"nbumpe", 0x00338, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_02250[] = { { {"esdot", 01, 5} }, { {"nedot", 0x00338, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_02261[] = { { {"Congruent", 01, 9} }, { {"bnequiv", 0x020E5, 7} }, }; static const entity_multicodepoint_row multi_cp_html5_02264[] = { { {"leq", 01, 3} }, { {"nvle", 0x020D2, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_02265[] = { { {"ge", 01, 2} }, { {"nvge", 0x020D2, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_02266[] = { { {"lE", 01, 2} }, { {"nlE", 0x00338, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_02267[] = { { {"geqq", 01, 4} }, { {"NotGreaterFullEqual", 0x00338, 19} }, }; static const entity_multicodepoint_row multi_cp_html5_02268[] = { { {"lneqq", 01, 5} }, { {"lvertneqq", 0x0FE00, 9} }, }; static const entity_multicodepoint_row multi_cp_html5_02269[] = { { {"gneqq", 01, 5} }, { {"gvertneqq", 0x0FE00, 9} }, }; static const entity_multicodepoint_row multi_cp_html5_0226A[] = { { {"ll", 02, 2} }, { {"nLtv", 0x00338, 4} }, { {"nLt", 0x020D2, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_0226B[] = { { {"gg", 02, 2} }, { {"NotGreaterGreater", 0x00338, 17} }, { {"nGt", 0x020D2, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_0227F[] = { { {"SucceedsTilde", 01, 13} }, { {"NotSucceedsTilde", 0x00338, 16} }, }; static const entity_multicodepoint_row multi_cp_html5_02282[] = { { {"sub", 01, 3} }, { {"vnsub", 0x020D2, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_02283[] = { { {"sup", 01, 3} }, { {"nsupset", 0x020D2, 7} }, }; static const entity_multicodepoint_row multi_cp_html5_0228A[] = { { {"subsetneq", 01, 9} }, { {"vsubne", 0x0FE00, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_0228B[] = { { {"supsetneq", 01, 9} }, { {"vsupne", 0x0FE00, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_0228F[] = { { {"sqsub", 01, 5} }, { {"NotSquareSubset", 0x00338, 15} }, }; static const entity_multicodepoint_row multi_cp_html5_02290[] = { { {"sqsupset", 01, 8} }, { {"NotSquareSuperset", 0x00338, 17} }, }; static const entity_multicodepoint_row multi_cp_html5_02293[] = { { {"sqcap", 01, 5} }, { {"sqcaps", 0x0FE00, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_02294[] = { { {"sqcup", 01, 5} }, { {"sqcups", 0x0FE00, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_022B4[] = { { {"LeftTriangleEqual", 01, 17} }, { {"nvltrie", 0x020D2, 7} }, }; static const entity_multicodepoint_row multi_cp_html5_022B5[] = { { {"RightTriangleEqual", 01, 18} }, { {"nvrtrie", 0x020D2, 7} }, }; static const entity_multicodepoint_row multi_cp_html5_022D8[] = { { {"Ll", 01, 2} }, { {"nLl", 0x00338, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_022D9[] = { { {"Gg", 01, 2} }, { {"nGg", 0x00338, 3} }, }; static const entity_multicodepoint_row multi_cp_html5_022DA[] = { { {"lesseqgtr", 01, 9} }, { {"lesg", 0x0FE00, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_022DB[] = { { {"gtreqless", 01, 9} }, { {"gesl", 0x0FE00, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_022F5[] = { { {"isindot", 01, 7} }, { {"notindot", 0x00338, 8} }, }; static const entity_multicodepoint_row multi_cp_html5_022F9[] = { { {"isinE", 01, 5} }, { {"notinE", 0x00338, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_02933[] = { { {"rarrc", 01, 5} }, { {"nrarrc", 0x00338, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_029CF[] = { { {"LeftTriangleBar", 01, 15} }, { {"NotLeftTriangleBar", 0x00338, 18} }, }; static const entity_multicodepoint_row multi_cp_html5_029D0[] = { { {"RightTriangleBar", 01, 16} }, { {"NotRightTriangleBar", 0x00338, 19} }, }; static const entity_multicodepoint_row multi_cp_html5_02A6D[] = { { {"congdot", 01, 7} }, { {"ncongdot", 0x00338, 8} }, }; static const entity_multicodepoint_row multi_cp_html5_02A70[] = { { {"apE", 01, 3} }, { {"napE", 0x00338, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_02A7D[] = { { {"les", 01, 3} }, { {"nles", 0x00338, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_02A7E[] = { { {"ges", 01, 3} }, { {"nges", 0x00338, 4} }, }; static const entity_multicodepoint_row multi_cp_html5_02AA1[] = { { {"LessLess", 01, 8} }, { {"NotNestedLessLess", 0x00338, 17} }, }; static const entity_multicodepoint_row multi_cp_html5_02AA2[] = { { {"GreaterGreater", 01, 14} }, { {"NotNestedGreaterGreater", 0x00338, 23} }, }; static const entity_multicodepoint_row multi_cp_html5_02AAC[] = { { {"smte", 01, 4} }, { {"smtes", 0x0FE00, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_02AAD[] = { { {"late", 01, 4} }, { {"lates", 0x0FE00, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_02AAF[] = { { {"preceq", 01, 6} }, { {"NotPrecedesEqual", 0x00338, 16} }, }; static const entity_multicodepoint_row multi_cp_html5_02AB0[] = { { {"SucceedsEqual", 01, 13} }, { {"NotSucceedsEqual", 0x00338, 16} }, }; static const entity_multicodepoint_row multi_cp_html5_02AC5[] = { { {"subE", 01, 4} }, { {"nsubE", 0x00338, 5} }, }; static const entity_multicodepoint_row multi_cp_html5_02AC6[] = { { {"supseteqq", 01, 9} }, { {"nsupseteqq", 0x00338, 10} }, }; static const entity_multicodepoint_row multi_cp_html5_02ACB[] = { { {"subsetneqq", 01, 10} }, { {"vsubnE", 0x0FE00, 6} }, }; static const entity_multicodepoint_row multi_cp_html5_02ACC[] = { { {"supnE", 01, 5} }, { {"varsupsetneqq", 0x0FE00, 13} }, }; static const entity_multicodepoint_row multi_cp_html5_02AFD[] = { { {"parsl", 01, 5} }, { {"nparsl", 0x020E5, 6} }, }; /* End of double code point tables }}} */ /* {{{ Stage 3 Tables for HTML5 */ static const entity_stage3_row empty_stage3_table[] = { /* 64 elements */ {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00000[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Tab", 3} } }, {0, { {"NewLine", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"excl", 4} } }, {0, { {"quot", 4} } }, {0, { {"num", 3} } }, {0, { {"dollar", 6} } }, {0, { {"percnt", 6} } }, {0, { {"amp", 3} } }, {0, { {"apos", 4} } }, {0, { {"lpar", 4} } }, {0, { {"rpar", 4} } }, {0, { {"ast", 3} } }, {0, { {"plus", 4} } }, {0, { {"comma", 5} } }, {0, { {NULL, 0} } }, {0, { {"period", 6} } }, {0, { {"sol", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"colon", 5} } }, {0, { {"semi", 4} } }, {1, { {(void *)multi_cp_html5_0003C, 0} } }, {1, { {(void *)multi_cp_html5_0003D, 0} } }, {1, { {(void *)multi_cp_html5_0003E, 0} } }, {0, { {"quest", 5} } }, }; static const entity_stage3_row stage3_table_html5_00040[] = { {0, { {"commat", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbrack", 6} } }, {0, { {"bsol", 4} } }, {0, { {"rsqb", 4} } }, {0, { {"Hat", 3} } }, {0, { {"lowbar", 6} } }, {0, { {"grave", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_00066, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbrace", 6} } }, {0, { {"vert", 4} } }, {0, { {"rcub", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00080[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nbsp", 4} } }, {0, { {"iexcl", 5} } }, {0, { {"cent", 4} } }, {0, { {"pound", 5} } }, {0, { {"curren", 6} } }, {0, { {"yen", 3} } }, {0, { {"brvbar", 6} } }, {0, { {"sect", 4} } }, {0, { {"DoubleDot", 9} } }, {0, { {"copy", 4} } }, {0, { {"ordf", 4} } }, {0, { {"laquo", 5} } }, {0, { {"not", 3} } }, {0, { {"shy", 3} } }, {0, { {"reg", 3} } }, {0, { {"macr", 4} } }, {0, { {"deg", 3} } }, {0, { {"plusmn", 6} } }, {0, { {"sup2", 4} } }, {0, { {"sup3", 4} } }, {0, { {"DiacriticalAcute", 16} } }, {0, { {"micro", 5} } }, {0, { {"para", 4} } }, {0, { {"CenterDot", 9} } }, {0, { {"Cedilla", 7} } }, {0, { {"sup1", 4} } }, {0, { {"ordm", 4} } }, {0, { {"raquo", 5} } }, {0, { {"frac14", 6} } }, {0, { {"half", 4} } }, {0, { {"frac34", 6} } }, {0, { {"iquest", 6} } }, }; static const entity_stage3_row stage3_table_html5_000C0[] = { {0, { {"Agrave", 6} } }, {0, { {"Aacute", 6} } }, {0, { {"Acirc", 5} } }, {0, { {"Atilde", 6} } }, {0, { {"Auml", 4} } }, {0, { {"Aring", 5} } }, {0, { {"AElig", 5} } }, {0, { {"Ccedil", 6} } }, {0, { {"Egrave", 6} } }, {0, { {"Eacute", 6} } }, {0, { {"Ecirc", 5} } }, {0, { {"Euml", 4} } }, {0, { {"Igrave", 6} } }, {0, { {"Iacute", 6} } }, {0, { {"Icirc", 5} } }, {0, { {"Iuml", 4} } }, {0, { {"ETH", 3} } }, {0, { {"Ntilde", 6} } }, {0, { {"Ograve", 6} } }, {0, { {"Oacute", 6} } }, {0, { {"Ocirc", 5} } }, {0, { {"Otilde", 6} } }, {0, { {"Ouml", 4} } }, {0, { {"times", 5} } }, {0, { {"Oslash", 6} } }, {0, { {"Ugrave", 6} } }, {0, { {"Uacute", 6} } }, {0, { {"Ucirc", 5} } }, {0, { {"Uuml", 4} } }, {0, { {"Yacute", 6} } }, {0, { {"THORN", 5} } }, {0, { {"szlig", 5} } }, {0, { {"agrave", 6} } }, {0, { {"aacute", 6} } }, {0, { {"acirc", 5} } }, {0, { {"atilde", 6} } }, {0, { {"auml", 4} } }, {0, { {"aring", 5} } }, {0, { {"aelig", 5} } }, {0, { {"ccedil", 6} } }, {0, { {"egrave", 6} } }, {0, { {"eacute", 6} } }, {0, { {"ecirc", 5} } }, {0, { {"euml", 4} } }, {0, { {"igrave", 6} } }, {0, { {"iacute", 6} } }, {0, { {"icirc", 5} } }, {0, { {"iuml", 4} } }, {0, { {"eth", 3} } }, {0, { {"ntilde", 6} } }, {0, { {"ograve", 6} } }, {0, { {"oacute", 6} } }, {0, { {"ocirc", 5} } }, {0, { {"otilde", 6} } }, {0, { {"ouml", 4} } }, {0, { {"divide", 6} } }, {0, { {"oslash", 6} } }, {0, { {"ugrave", 6} } }, {0, { {"uacute", 6} } }, {0, { {"ucirc", 5} } }, {0, { {"uuml", 4} } }, {0, { {"yacute", 6} } }, {0, { {"thorn", 5} } }, {0, { {"yuml", 4} } }, }; static const entity_stage3_row stage3_table_html5_00100[] = { {0, { {"Amacr", 5} } }, {0, { {"amacr", 5} } }, {0, { {"Abreve", 6} } }, {0, { {"abreve", 6} } }, {0, { {"Aogon", 5} } }, {0, { {"aogon", 5} } }, {0, { {"Cacute", 6} } }, {0, { {"cacute", 6} } }, {0, { {"Ccirc", 5} } }, {0, { {"ccirc", 5} } }, {0, { {"Cdot", 4} } }, {0, { {"cdot", 4} } }, {0, { {"Ccaron", 6} } }, {0, { {"ccaron", 6} } }, {0, { {"Dcaron", 6} } }, {0, { {"dcaron", 6} } }, {0, { {"Dstrok", 6} } }, {0, { {"dstrok", 6} } }, {0, { {"Emacr", 5} } }, {0, { {"emacr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Edot", 4} } }, {0, { {"edot", 4} } }, {0, { {"Eogon", 5} } }, {0, { {"eogon", 5} } }, {0, { {"Ecaron", 6} } }, {0, { {"ecaron", 6} } }, {0, { {"Gcirc", 5} } }, {0, { {"gcirc", 5} } }, {0, { {"Gbreve", 6} } }, {0, { {"gbreve", 6} } }, {0, { {"Gdot", 4} } }, {0, { {"gdot", 4} } }, {0, { {"Gcedil", 6} } }, {0, { {NULL, 0} } }, {0, { {"Hcirc", 5} } }, {0, { {"hcirc", 5} } }, {0, { {"Hstrok", 6} } }, {0, { {"hstrok", 6} } }, {0, { {"Itilde", 6} } }, {0, { {"itilde", 6} } }, {0, { {"Imacr", 5} } }, {0, { {"imacr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Iogon", 5} } }, {0, { {"iogon", 5} } }, {0, { {"Idot", 4} } }, {0, { {"inodot", 6} } }, {0, { {"IJlig", 5} } }, {0, { {"ijlig", 5} } }, {0, { {"Jcirc", 5} } }, {0, { {"jcirc", 5} } }, {0, { {"Kcedil", 6} } }, {0, { {"kcedil", 6} } }, {0, { {"kgreen", 6} } }, {0, { {"Lacute", 6} } }, {0, { {"lacute", 6} } }, {0, { {"Lcedil", 6} } }, {0, { {"lcedil", 6} } }, {0, { {"Lcaron", 6} } }, {0, { {"lcaron", 6} } }, {0, { {"Lmidot", 6} } }, }; static const entity_stage3_row stage3_table_html5_00140[] = { {0, { {"lmidot", 6} } }, {0, { {"Lstrok", 6} } }, {0, { {"lstrok", 6} } }, {0, { {"Nacute", 6} } }, {0, { {"nacute", 6} } }, {0, { {"Ncedil", 6} } }, {0, { {"ncedil", 6} } }, {0, { {"Ncaron", 6} } }, {0, { {"ncaron", 6} } }, {0, { {"napos", 5} } }, {0, { {"ENG", 3} } }, {0, { {"eng", 3} } }, {0, { {"Omacr", 5} } }, {0, { {"omacr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Odblac", 6} } }, {0, { {"odblac", 6} } }, {0, { {"OElig", 5} } }, {0, { {"oelig", 5} } }, {0, { {"Racute", 6} } }, {0, { {"racute", 6} } }, {0, { {"Rcedil", 6} } }, {0, { {"rcedil", 6} } }, {0, { {"Rcaron", 6} } }, {0, { {"rcaron", 6} } }, {0, { {"Sacute", 6} } }, {0, { {"sacute", 6} } }, {0, { {"Scirc", 5} } }, {0, { {"scirc", 5} } }, {0, { {"Scedil", 6} } }, {0, { {"scedil", 6} } }, {0, { {"Scaron", 6} } }, {0, { {"scaron", 6} } }, {0, { {"Tcedil", 6} } }, {0, { {"tcedil", 6} } }, {0, { {"Tcaron", 6} } }, {0, { {"tcaron", 6} } }, {0, { {"Tstrok", 6} } }, {0, { {"tstrok", 6} } }, {0, { {"Utilde", 6} } }, {0, { {"utilde", 6} } }, {0, { {"Umacr", 5} } }, {0, { {"umacr", 5} } }, {0, { {"Ubreve", 6} } }, {0, { {"ubreve", 6} } }, {0, { {"Uring", 5} } }, {0, { {"uring", 5} } }, {0, { {"Udblac", 6} } }, {0, { {"udblac", 6} } }, {0, { {"Uogon", 5} } }, {0, { {"uogon", 5} } }, {0, { {"Wcirc", 5} } }, {0, { {"wcirc", 5} } }, {0, { {"Ycirc", 5} } }, {0, { {"ycirc", 5} } }, {0, { {"Yuml", 4} } }, {0, { {"Zacute", 6} } }, {0, { {"zacute", 6} } }, {0, { {"Zdot", 4} } }, {0, { {"zdot", 4} } }, {0, { {"Zcaron", 6} } }, {0, { {"zcaron", 6} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00180[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"fnof", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"imped", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_001C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"gacute", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00200[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"jmath", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_002C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"circ", 4} } }, {0, { {"Hacek", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Breve", 5} } }, {0, { {"dot", 3} } }, {0, { {"ring", 4} } }, {0, { {"ogon", 4} } }, {0, { {"DiacriticalTilde", 16} } }, {0, { {"DiacriticalDoubleAcute", 22} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00300[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"DownBreve", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00380[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Alpha", 5} } }, {0, { {"Beta", 4} } }, {0, { {"Gamma", 5} } }, {0, { {"Delta", 5} } }, {0, { {"Epsilon", 7} } }, {0, { {"Zeta", 4} } }, {0, { {"Eta", 3} } }, {0, { {"Theta", 5} } }, {0, { {"Iota", 4} } }, {0, { {"Kappa", 5} } }, {0, { {"Lambda", 6} } }, {0, { {"Mu", 2} } }, {0, { {"Nu", 2} } }, {0, { {"Xi", 2} } }, {0, { {"Omicron", 7} } }, {0, { {"Pi", 2} } }, {0, { {"Rho", 3} } }, {0, { {NULL, 0} } }, {0, { {"Sigma", 5} } }, {0, { {"Tau", 3} } }, {0, { {"Upsilon", 7} } }, {0, { {"Phi", 3} } }, {0, { {"Chi", 3} } }, {0, { {"Psi", 3} } }, {0, { {"Omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"alpha", 5} } }, {0, { {"beta", 4} } }, {0, { {"gamma", 5} } }, {0, { {"delta", 5} } }, {0, { {"epsi", 4} } }, {0, { {"zeta", 4} } }, {0, { {"eta", 3} } }, {0, { {"theta", 5} } }, {0, { {"iota", 4} } }, {0, { {"kappa", 5} } }, {0, { {"lambda", 6} } }, {0, { {"mu", 2} } }, {0, { {"nu", 2} } }, {0, { {"xi", 2} } }, {0, { {"omicron", 7} } }, }; static const entity_stage3_row stage3_table_html5_003C0[] = { {0, { {"pi", 2} } }, {0, { {"rho", 3} } }, {0, { {"sigmav", 6} } }, {0, { {"sigma", 5} } }, {0, { {"tau", 3} } }, {0, { {"upsi", 4} } }, {0, { {"phi", 3} } }, {0, { {"chi", 3} } }, {0, { {"psi", 3} } }, {0, { {"omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"thetasym", 8} } }, {0, { {"upsih", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"straightphi", 11} } }, {0, { {"piv", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Gammad", 6} } }, {0, { {"gammad", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"varkappa", 8} } }, {0, { {"rhov", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"straightepsilon", 15} } }, {0, { {"backepsilon", 11} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_00400[] = { {0, { {NULL, 0} } }, {0, { {"IOcy", 4} } }, {0, { {"DJcy", 4} } }, {0, { {"GJcy", 4} } }, {0, { {"Jukcy", 5} } }, {0, { {"DScy", 4} } }, {0, { {"Iukcy", 5} } }, {0, { {"YIcy", 4} } }, {0, { {"Jsercy", 6} } }, {0, { {"LJcy", 4} } }, {0, { {"NJcy", 4} } }, {0, { {"TSHcy", 5} } }, {0, { {"KJcy", 4} } }, {0, { {NULL, 0} } }, {0, { {"Ubrcy", 5} } }, {0, { {"DZcy", 4} } }, {0, { {"Acy", 3} } }, {0, { {"Bcy", 3} } }, {0, { {"Vcy", 3} } }, {0, { {"Gcy", 3} } }, {0, { {"Dcy", 3} } }, {0, { {"IEcy", 4} } }, {0, { {"ZHcy", 4} } }, {0, { {"Zcy", 3} } }, {0, { {"Icy", 3} } }, {0, { {"Jcy", 3} } }, {0, { {"Kcy", 3} } }, {0, { {"Lcy", 3} } }, {0, { {"Mcy", 3} } }, {0, { {"Ncy", 3} } }, {0, { {"Ocy", 3} } }, {0, { {"Pcy", 3} } }, {0, { {"Rcy", 3} } }, {0, { {"Scy", 3} } }, {0, { {"Tcy", 3} } }, {0, { {"Ucy", 3} } }, {0, { {"Fcy", 3} } }, {0, { {"KHcy", 4} } }, {0, { {"TScy", 4} } }, {0, { {"CHcy", 4} } }, {0, { {"SHcy", 4} } }, {0, { {"SHCHcy", 6} } }, {0, { {"HARDcy", 6} } }, {0, { {"Ycy", 3} } }, {0, { {"SOFTcy", 6} } }, {0, { {"Ecy", 3} } }, {0, { {"YUcy", 4} } }, {0, { {"YAcy", 4} } }, {0, { {"acy", 3} } }, {0, { {"bcy", 3} } }, {0, { {"vcy", 3} } }, {0, { {"gcy", 3} } }, {0, { {"dcy", 3} } }, {0, { {"iecy", 4} } }, {0, { {"zhcy", 4} } }, {0, { {"zcy", 3} } }, {0, { {"icy", 3} } }, {0, { {"jcy", 3} } }, {0, { {"kcy", 3} } }, {0, { {"lcy", 3} } }, {0, { {"mcy", 3} } }, {0, { {"ncy", 3} } }, {0, { {"ocy", 3} } }, {0, { {"pcy", 3} } }, }; static const entity_stage3_row stage3_table_html5_00440[] = { {0, { {"rcy", 3} } }, {0, { {"scy", 3} } }, {0, { {"tcy", 3} } }, {0, { {"ucy", 3} } }, {0, { {"fcy", 3} } }, {0, { {"khcy", 4} } }, {0, { {"tscy", 4} } }, {0, { {"chcy", 4} } }, {0, { {"shcy", 4} } }, {0, { {"shchcy", 6} } }, {0, { {"hardcy", 6} } }, {0, { {"ycy", 3} } }, {0, { {"softcy", 6} } }, {0, { {"ecy", 3} } }, {0, { {"yucy", 4} } }, {0, { {"yacy", 4} } }, {0, { {NULL, 0} } }, {0, { {"iocy", 4} } }, {0, { {"djcy", 4} } }, {0, { {"gjcy", 4} } }, {0, { {"jukcy", 5} } }, {0, { {"dscy", 4} } }, {0, { {"iukcy", 5} } }, {0, { {"yicy", 4} } }, {0, { {"jsercy", 6} } }, {0, { {"ljcy", 4} } }, {0, { {"njcy", 4} } }, {0, { {"tshcy", 5} } }, {0, { {"kjcy", 4} } }, {0, { {NULL, 0} } }, {0, { {"ubrcy", 5} } }, {0, { {"dzcy", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02000[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ensp", 4} } }, {0, { {"emsp", 4} } }, {0, { {"emsp13", 6} } }, {0, { {"emsp14", 6} } }, {0, { {NULL, 0} } }, {0, { {"numsp", 5} } }, {0, { {"puncsp", 6} } }, {0, { {"ThinSpace", 9} } }, {0, { {"hairsp", 6} } }, {0, { {"ZeroWidthSpace", 14} } }, {0, { {"zwnj", 4} } }, {0, { {"zwj", 3} } }, {0, { {"lrm", 3} } }, {0, { {"rlm", 3} } }, {0, { {"hyphen", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ndash", 5} } }, {0, { {"mdash", 5} } }, {0, { {"horbar", 6} } }, {0, { {"Verbar", 6} } }, {0, { {NULL, 0} } }, {0, { {"OpenCurlyQuote", 14} } }, {0, { {"rsquo", 5} } }, {0, { {"sbquo", 5} } }, {0, { {NULL, 0} } }, {0, { {"OpenCurlyDoubleQuote", 20} } }, {0, { {"rdquo", 5} } }, {0, { {"bdquo", 5} } }, {0, { {NULL, 0} } }, {0, { {"dagger", 6} } }, {0, { {"Dagger", 6} } }, {0, { {"bull", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nldr", 4} } }, {0, { {"hellip", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"permil", 6} } }, {0, { {"pertenk", 7} } }, {0, { {"prime", 5} } }, {0, { {"Prime", 5} } }, {0, { {"tprime", 6} } }, {0, { {"backprime", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lsaquo", 6} } }, {0, { {"rsaquo", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"oline", 5} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02040[] = { {0, { {NULL, 0} } }, {0, { {"caret", 5} } }, {0, { {NULL, 0} } }, {0, { {"hybull", 6} } }, {0, { {"frasl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"bsemi", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"qprime", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_0205F, 0} } }, {0, { {"NoBreak", 7} } }, {0, { {"af", 2} } }, {0, { {"InvisibleTimes", 14} } }, {0, { {"ic", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02080[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"euro", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_020C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"TripleDot", 9} } }, {0, { {"DotDot", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02100[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"complexes", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"incare", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"gscr", 4} } }, {0, { {"HilbertSpace", 12} } }, {0, { {"Hfr", 3} } }, {0, { {"Hopf", 4} } }, {0, { {"planckh", 7} } }, {0, { {"planck", 6} } }, {0, { {"imagline", 8} } }, {0, { {"Ifr", 3} } }, {0, { {"lagran", 6} } }, {0, { {"ell", 3} } }, {0, { {NULL, 0} } }, {0, { {"naturals", 8} } }, {0, { {"numero", 6} } }, {0, { {"copysr", 6} } }, {0, { {"wp", 2} } }, {0, { {"primes", 6} } }, {0, { {"rationals", 9} } }, {0, { {"realine", 7} } }, {0, { {"Rfr", 3} } }, {0, { {"Ropf", 4} } }, {0, { {"rx", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trade", 5} } }, {0, { {NULL, 0} } }, {0, { {"Zopf", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"mho", 3} } }, {0, { {"Zfr", 3} } }, {0, { {"iiota", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Bscr", 4} } }, {0, { {"Cfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"escr", 4} } }, {0, { {"expectation", 11} } }, {0, { {"Fouriertrf", 10} } }, {0, { {NULL, 0} } }, {0, { {"Mellintrf", 9} } }, {0, { {"orderof", 7} } }, {0, { {"aleph", 5} } }, {0, { {"beth", 4} } }, {0, { {"gimel", 5} } }, {0, { {"daleth", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02140[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"CapitalDifferentialD", 20} } }, {0, { {"DifferentialD", 13} } }, {0, { {"exponentiale", 12} } }, {0, { {"ImaginaryI", 10} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"frac13", 6} } }, {0, { {"frac23", 6} } }, {0, { {"frac15", 6} } }, {0, { {"frac25", 6} } }, {0, { {"frac35", 6} } }, {0, { {"frac45", 6} } }, {0, { {"frac16", 6} } }, {0, { {"frac56", 6} } }, {0, { {"frac18", 6} } }, {0, { {"frac38", 6} } }, {0, { {"frac58", 6} } }, {0, { {"frac78", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02180[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"larr", 4} } }, {0, { {"uarr", 4} } }, {0, { {"srarr", 5} } }, {0, { {"darr", 4} } }, {0, { {"harr", 4} } }, {0, { {"UpDownArrow", 11} } }, {0, { {"nwarrow", 7} } }, {0, { {"UpperRightArrow", 15} } }, {0, { {"LowerRightArrow", 15} } }, {0, { {"swarr", 5} } }, {0, { {"nleftarrow", 10} } }, {0, { {"nrarr", 5} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_0219D, 0} } }, {0, { {"Larr", 4} } }, {0, { {"Uarr", 4} } }, {0, { {"twoheadrightarrow", 17} } }, {0, { {"Darr", 4} } }, {0, { {"larrtl", 6} } }, {0, { {"rarrtl", 6} } }, {0, { {"LeftTeeArrow", 12} } }, {0, { {"UpTeeArrow", 10} } }, {0, { {"map", 3} } }, {0, { {"DownTeeArrow", 12} } }, {0, { {NULL, 0} } }, {0, { {"larrhk", 6} } }, {0, { {"rarrhk", 6} } }, {0, { {"larrlp", 6} } }, {0, { {"looparrowright", 14} } }, {0, { {"harrw", 5} } }, {0, { {"nleftrightarrow", 15} } }, {0, { {NULL, 0} } }, {0, { {"Lsh", 3} } }, {0, { {"rsh", 3} } }, {0, { {"ldsh", 4} } }, {0, { {"rdsh", 4} } }, {0, { {NULL, 0} } }, {0, { {"crarr", 5} } }, {0, { {"curvearrowleft", 14} } }, {0, { {"curarr", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"olarr", 5} } }, {0, { {"orarr", 5} } }, {0, { {"leftharpoonup", 13} } }, {0, { {"leftharpoondown", 15} } }, {0, { {"RightUpVector", 13} } }, {0, { {"uharl", 5} } }, }; static const entity_stage3_row stage3_table_html5_021C0[] = { {0, { {"rharu", 5} } }, {0, { {"rhard", 5} } }, {0, { {"RightDownVector", 15} } }, {0, { {"dharl", 5} } }, {0, { {"rightleftarrows", 15} } }, {0, { {"udarr", 5} } }, {0, { {"lrarr", 5} } }, {0, { {"llarr", 5} } }, {0, { {"upuparrows", 10} } }, {0, { {"rrarr", 5} } }, {0, { {"downdownarrows", 14} } }, {0, { {"leftrightharpoons", 17} } }, {0, { {"rightleftharpoons", 17} } }, {0, { {"nLeftarrow", 10} } }, {0, { {"nhArr", 5} } }, {0, { {"nrArr", 5} } }, {0, { {"DoubleLeftArrow", 15} } }, {0, { {"DoubleUpArrow", 13} } }, {0, { {"Implies", 7} } }, {0, { {"Downarrow", 9} } }, {0, { {"hArr", 4} } }, {0, { {"Updownarrow", 11} } }, {0, { {"nwArr", 5} } }, {0, { {"neArr", 5} } }, {0, { {"seArr", 5} } }, {0, { {"swArr", 5} } }, {0, { {"lAarr", 5} } }, {0, { {"rAarr", 5} } }, {0, { {NULL, 0} } }, {0, { {"zigrarr", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"LeftArrowBar", 12} } }, {0, { {"RightArrowBar", 13} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"DownArrowUpArrow", 16} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"loarr", 5} } }, {0, { {"roarr", 5} } }, {0, { {"hoarr", 5} } }, }; static const entity_stage3_row stage3_table_html5_02200[] = { {0, { {"forall", 6} } }, {0, { {"comp", 4} } }, {1, { {(void *)multi_cp_html5_02202, 0} } }, {0, { {"Exists", 6} } }, {0, { {"nexist", 6} } }, {0, { {"empty", 5} } }, {0, { {NULL, 0} } }, {0, { {"nabla", 5} } }, {0, { {"isinv", 5} } }, {0, { {"notin", 5} } }, {0, { {NULL, 0} } }, {0, { {"ReverseElement", 14} } }, {0, { {"notniva", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prod", 4} } }, {0, { {"Coproduct", 9} } }, {0, { {"sum", 3} } }, {0, { {"minus", 5} } }, {0, { {"MinusPlus", 9} } }, {0, { {"plusdo", 6} } }, {0, { {NULL, 0} } }, {0, { {"ssetmn", 6} } }, {0, { {"lowast", 6} } }, {0, { {"compfn", 6} } }, {0, { {NULL, 0} } }, {0, { {"Sqrt", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prop", 4} } }, {0, { {"infin", 5} } }, {0, { {"angrt", 5} } }, {1, { {(void *)multi_cp_html5_02220, 0} } }, {0, { {"angmsd", 6} } }, {0, { {"angsph", 6} } }, {0, { {"mid", 3} } }, {0, { {"nshortmid", 9} } }, {0, { {"shortparallel", 13} } }, {0, { {"nparallel", 9} } }, {0, { {"and", 3} } }, {0, { {"or", 2} } }, {1, { {(void *)multi_cp_html5_02229, 0} } }, {1, { {(void *)multi_cp_html5_0222A, 0} } }, {0, { {"Integral", 8} } }, {0, { {"Int", 3} } }, {0, { {"tint", 4} } }, {0, { {"ContourIntegral", 15} } }, {0, { {"DoubleContourIntegral", 21} } }, {0, { {"Cconint", 7} } }, {0, { {"cwint", 5} } }, {0, { {"cwconint", 8} } }, {0, { {"awconint", 8} } }, {0, { {"there4", 6} } }, {0, { {"Because", 7} } }, {0, { {"ratio", 5} } }, {0, { {"Colon", 5} } }, {0, { {"minusd", 6} } }, {0, { {NULL, 0} } }, {0, { {"mDDot", 5} } }, {0, { {"homtht", 6} } }, {1, { {(void *)multi_cp_html5_0223C, 0} } }, {1, { {(void *)multi_cp_html5_0223D, 0} } }, {1, { {(void *)multi_cp_html5_0223E, 0} } }, {0, { {"acd", 3} } }, }; static const entity_stage3_row stage3_table_html5_02240[] = { {0, { {"wr", 2} } }, {0, { {"NotTilde", 8} } }, {1, { {(void *)multi_cp_html5_02242, 0} } }, {0, { {"simeq", 5} } }, {0, { {"nsime", 5} } }, {0, { {"TildeFullEqual", 14} } }, {0, { {"simne", 5} } }, {0, { {"ncong", 5} } }, {0, { {"approx", 6} } }, {0, { {"napprox", 7} } }, {0, { {"ape", 3} } }, {1, { {(void *)multi_cp_html5_0224B, 0} } }, {0, { {"bcong", 5} } }, {1, { {(void *)multi_cp_html5_0224D, 0} } }, {1, { {(void *)multi_cp_html5_0224E, 0} } }, {1, { {(void *)multi_cp_html5_0224F, 0} } }, {1, { {(void *)multi_cp_html5_02250, 0} } }, {0, { {"doteqdot", 8} } }, {0, { {"fallingdotseq", 13} } }, {0, { {"risingdotseq", 12} } }, {0, { {"coloneq", 7} } }, {0, { {"eqcolon", 7} } }, {0, { {"ecir", 4} } }, {0, { {"circeq", 6} } }, {0, { {NULL, 0} } }, {0, { {"wedgeq", 6} } }, {0, { {"veeeq", 5} } }, {0, { {NULL, 0} } }, {0, { {"triangleq", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"equest", 6} } }, {0, { {"NotEqual", 8} } }, {1, { {(void *)multi_cp_html5_02261, 0} } }, {0, { {"NotCongruent", 12} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02264, 0} } }, {1, { {(void *)multi_cp_html5_02265, 0} } }, {1, { {(void *)multi_cp_html5_02266, 0} } }, {1, { {(void *)multi_cp_html5_02267, 0} } }, {1, { {(void *)multi_cp_html5_02268, 0} } }, {1, { {(void *)multi_cp_html5_02269, 0} } }, {1, { {(void *)multi_cp_html5_0226A, 0} } }, {1, { {(void *)multi_cp_html5_0226B, 0} } }, {0, { {"between", 7} } }, {0, { {"NotCupCap", 9} } }, {0, { {"NotLess", 7} } }, {0, { {"ngtr", 4} } }, {0, { {"NotLessEqual", 12} } }, {0, { {"ngeq", 4} } }, {0, { {"LessTilde", 9} } }, {0, { {"GreaterTilde", 12} } }, {0, { {"nlsim", 5} } }, {0, { {"ngsim", 5} } }, {0, { {"lessgtr", 7} } }, {0, { {"gl", 2} } }, {0, { {"ntlg", 4} } }, {0, { {"NotGreaterLess", 14} } }, {0, { {"prec", 4} } }, {0, { {"succ", 4} } }, {0, { {"PrecedesSlantEqual", 18} } }, {0, { {"succcurlyeq", 11} } }, {0, { {"precsim", 7} } }, {1, { {(void *)multi_cp_html5_0227F, 0} } }, }; static const entity_stage3_row stage3_table_html5_02280[] = { {0, { {"npr", 3} } }, {0, { {"NotSucceeds", 11} } }, {1, { {(void *)multi_cp_html5_02282, 0} } }, {1, { {(void *)multi_cp_html5_02283, 0} } }, {0, { {"nsub", 4} } }, {0, { {"nsup", 4} } }, {0, { {"SubsetEqual", 11} } }, {0, { {"supe", 4} } }, {0, { {"NotSubsetEqual", 14} } }, {0, { {"NotSupersetEqual", 16} } }, {1, { {(void *)multi_cp_html5_0228A, 0} } }, {1, { {(void *)multi_cp_html5_0228B, 0} } }, {0, { {NULL, 0} } }, {0, { {"cupdot", 6} } }, {0, { {"UnionPlus", 9} } }, {1, { {(void *)multi_cp_html5_0228F, 0} } }, {1, { {(void *)multi_cp_html5_02290, 0} } }, {0, { {"SquareSubsetEqual", 17} } }, {0, { {"SquareSupersetEqual", 19} } }, {1, { {(void *)multi_cp_html5_02293, 0} } }, {1, { {(void *)multi_cp_html5_02294, 0} } }, {0, { {"CirclePlus", 10} } }, {0, { {"ominus", 6} } }, {0, { {"CircleTimes", 11} } }, {0, { {"osol", 4} } }, {0, { {"CircleDot", 9} } }, {0, { {"ocir", 4} } }, {0, { {"oast", 4} } }, {0, { {NULL, 0} } }, {0, { {"odash", 5} } }, {0, { {"boxplus", 7} } }, {0, { {"boxminus", 8} } }, {0, { {"timesb", 6} } }, {0, { {"sdotb", 5} } }, {0, { {"vdash", 5} } }, {0, { {"dashv", 5} } }, {0, { {"DownTee", 7} } }, {0, { {"perp", 4} } }, {0, { {NULL, 0} } }, {0, { {"models", 6} } }, {0, { {"DoubleRightTee", 14} } }, {0, { {"Vdash", 5} } }, {0, { {"Vvdash", 6} } }, {0, { {"VDash", 5} } }, {0, { {"nvdash", 6} } }, {0, { {"nvDash", 6} } }, {0, { {"nVdash", 6} } }, {0, { {"nVDash", 6} } }, {0, { {"prurel", 6} } }, {0, { {NULL, 0} } }, {0, { {"vartriangleleft", 15} } }, {0, { {"vrtri", 5} } }, {1, { {(void *)multi_cp_html5_022B4, 0} } }, {1, { {(void *)multi_cp_html5_022B5, 0} } }, {0, { {"origof", 6} } }, {0, { {"imof", 4} } }, {0, { {"mumap", 5} } }, {0, { {"hercon", 6} } }, {0, { {"intcal", 6} } }, {0, { {"veebar", 6} } }, {0, { {NULL, 0} } }, {0, { {"barvee", 6} } }, {0, { {"angrtvb", 7} } }, {0, { {"lrtri", 5} } }, }; static const entity_stage3_row stage3_table_html5_022C0[] = { {0, { {"xwedge", 6} } }, {0, { {"xvee", 4} } }, {0, { {"bigcap", 6} } }, {0, { {"bigcup", 6} } }, {0, { {"diamond", 7} } }, {0, { {"sdot", 4} } }, {0, { {"Star", 4} } }, {0, { {"divonx", 6} } }, {0, { {"bowtie", 6} } }, {0, { {"ltimes", 6} } }, {0, { {"rtimes", 6} } }, {0, { {"lthree", 6} } }, {0, { {"rthree", 6} } }, {0, { {"backsimeq", 9} } }, {0, { {"curlyvee", 8} } }, {0, { {"curlywedge", 10} } }, {0, { {"Sub", 3} } }, {0, { {"Supset", 6} } }, {0, { {"Cap", 3} } }, {0, { {"Cup", 3} } }, {0, { {"pitchfork", 9} } }, {0, { {"epar", 4} } }, {0, { {"lessdot", 7} } }, {0, { {"gtrdot", 6} } }, {1, { {(void *)multi_cp_html5_022D8, 0} } }, {1, { {(void *)multi_cp_html5_022D9, 0} } }, {1, { {(void *)multi_cp_html5_022DA, 0} } }, {1, { {(void *)multi_cp_html5_022DB, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"curlyeqprec", 11} } }, {0, { {"cuesc", 5} } }, {0, { {"NotPrecedesSlantEqual", 21} } }, {0, { {"NotSucceedsSlantEqual", 21} } }, {0, { {"NotSquareSubsetEqual", 20} } }, {0, { {"NotSquareSupersetEqual", 22} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lnsim", 5} } }, {0, { {"gnsim", 5} } }, {0, { {"precnsim", 8} } }, {0, { {"scnsim", 6} } }, {0, { {"nltri", 5} } }, {0, { {"ntriangleright", 14} } }, {0, { {"nltrie", 6} } }, {0, { {"NotRightTriangleEqual", 21} } }, {0, { {"vellip", 6} } }, {0, { {"ctdot", 5} } }, {0, { {"utdot", 5} } }, {0, { {"dtdot", 5} } }, {0, { {"disin", 5} } }, {0, { {"isinsv", 6} } }, {0, { {"isins", 5} } }, {1, { {(void *)multi_cp_html5_022F5, 0} } }, {0, { {"notinvc", 7} } }, {0, { {"notinvb", 7} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_022F9, 0} } }, {0, { {"nisd", 4} } }, {0, { {"xnis", 4} } }, {0, { {"nis", 3} } }, {0, { {"notnivc", 7} } }, {0, { {"notnivb", 7} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02300[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"barwed", 6} } }, {0, { {"doublebarwedge", 14} } }, {0, { {NULL, 0} } }, {0, { {"lceil", 5} } }, {0, { {"RightCeiling", 12} } }, {0, { {"LeftFloor", 9} } }, {0, { {"RightFloor", 10} } }, {0, { {"drcrop", 6} } }, {0, { {"dlcrop", 6} } }, {0, { {"urcrop", 6} } }, {0, { {"ulcrop", 6} } }, {0, { {"bnot", 4} } }, {0, { {NULL, 0} } }, {0, { {"profline", 8} } }, {0, { {"profsurf", 8} } }, {0, { {NULL, 0} } }, {0, { {"telrec", 6} } }, {0, { {"target", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ulcorner", 8} } }, {0, { {"urcorner", 8} } }, {0, { {"llcorner", 8} } }, {0, { {"drcorn", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"frown", 5} } }, {0, { {"smile", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"cylcty", 6} } }, {0, { {"profalar", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"topbot", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ovbar", 5} } }, {0, { {NULL, 0} } }, {0, { {"solbar", 6} } }, }; static const entity_stage3_row stage3_table_html5_02340[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"angzarr", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02380[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lmoust", 6} } }, {0, { {"rmoust", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"OverBracket", 11} } }, {0, { {"bbrk", 4} } }, {0, { {"bbrktbrk", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_023C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"OverParenthesis", 15} } }, {0, { {"UnderParenthesis", 16} } }, {0, { {"OverBrace", 9} } }, {0, { {"UnderBrace", 10} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trpezium", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"elinters", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02400[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"blank", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_024C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"oS", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02500[] = { {0, { {"HorizontalLine", 14} } }, {0, { {NULL, 0} } }, {0, { {"boxv", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxdr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxdl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxur", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxul", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxvr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxvl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxhd", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxhu", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxvh", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02540[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxH", 4} } }, {0, { {"boxV", 4} } }, {0, { {"boxdR", 5} } }, {0, { {"boxDr", 5} } }, {0, { {"boxDR", 5} } }, {0, { {"boxdL", 5} } }, {0, { {"boxDl", 5} } }, {0, { {"boxDL", 5} } }, {0, { {"boxuR", 5} } }, {0, { {"boxUr", 5} } }, {0, { {"boxUR", 5} } }, {0, { {"boxuL", 5} } }, {0, { {"boxUl", 5} } }, {0, { {"boxUL", 5} } }, {0, { {"boxvR", 5} } }, {0, { {"boxVr", 5} } }, {0, { {"boxVR", 5} } }, {0, { {"boxvL", 5} } }, {0, { {"boxVl", 5} } }, {0, { {"boxVL", 5} } }, {0, { {"boxHd", 5} } }, {0, { {"boxhD", 5} } }, {0, { {"boxHD", 5} } }, {0, { {"boxHu", 5} } }, {0, { {"boxhU", 5} } }, {0, { {"boxHU", 5} } }, {0, { {"boxvH", 5} } }, {0, { {"boxVh", 5} } }, {0, { {"boxVH", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02580[] = { {0, { {"uhblk", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lhblk", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"block", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"blk14", 5} } }, {0, { {"blk12", 5} } }, {0, { {"blk34", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Square", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"squarf", 6} } }, {0, { {"EmptyVerySmallSquare", 20} } }, {0, { {NULL, 0} } }, {0, { {"rect", 4} } }, {0, { {"marker", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"fltns", 5} } }, {0, { {NULL, 0} } }, {0, { {"bigtriangleup", 13} } }, {0, { {"blacktriangle", 13} } }, {0, { {"triangle", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"blacktriangleright", 18} } }, {0, { {"rtri", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"bigtriangledown", 15} } }, {0, { {"blacktriangledown", 17} } }, {0, { {"triangledown", 12} } }, }; static const entity_stage3_row stage3_table_html5_025C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"blacktriangleleft", 17} } }, {0, { {"ltri", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lozenge", 7} } }, {0, { {"cir", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"tridot", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"bigcirc", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ultri", 5} } }, {0, { {"urtri", 5} } }, {0, { {"lltri", 5} } }, {0, { {"EmptySmallSquare", 16} } }, {0, { {"FilledSmallSquare", 17} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02600[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"starf", 5} } }, {0, { {"star", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"phone", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02640[] = { {0, { {"female", 6} } }, {0, { {NULL, 0} } }, {0, { {"male", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"spadesuit", 9} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"clubs", 5} } }, {0, { {NULL, 0} } }, {0, { {"hearts", 6} } }, {0, { {"diamondsuit", 11} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sung", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"flat", 4} } }, {0, { {"natur", 5} } }, {0, { {"sharp", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02700[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"check", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"cross", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"maltese", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sext", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02740[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"VerticalSeparator", 17} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbbrk", 5} } }, {0, { {"rbbrk", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_027C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"bsolhsub", 8} } }, {0, { {"suphsol", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"LeftDoubleBracket", 17} } }, {0, { {"RightDoubleBracket", 18} } }, {0, { {"langle", 6} } }, {0, { {"RightAngleBracket", 17} } }, {0, { {"Lang", 4} } }, {0, { {"Rang", 4} } }, {0, { {"loang", 5} } }, {0, { {"roang", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"longleftarrow", 13} } }, {0, { {"LongRightArrow", 14} } }, {0, { {"LongLeftRightArrow", 18} } }, {0, { {"xlArr", 5} } }, {0, { {"DoubleLongRightArrow", 20} } }, {0, { {"xhArr", 5} } }, {0, { {NULL, 0} } }, {0, { {"xmap", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"dzigrarr", 8} } }, }; static const entity_stage3_row stage3_table_html5_02900[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nvlArr", 6} } }, {0, { {"nvrArr", 6} } }, {0, { {"nvHarr", 6} } }, {0, { {"Map", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbarr", 5} } }, {0, { {"bkarow", 6} } }, {0, { {"lBarr", 5} } }, {0, { {"dbkarow", 7} } }, {0, { {"drbkarow", 8} } }, {0, { {"DDotrahd", 8} } }, {0, { {"UpArrowBar", 10} } }, {0, { {"DownArrowBar", 12} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Rarrtl", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"latail", 6} } }, {0, { {"ratail", 6} } }, {0, { {"lAtail", 6} } }, {0, { {"rAtail", 6} } }, {0, { {"larrfs", 6} } }, {0, { {"rarrfs", 6} } }, {0, { {"larrbfs", 7} } }, {0, { {"rarrbfs", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nwarhk", 6} } }, {0, { {"nearhk", 6} } }, {0, { {"searhk", 6} } }, {0, { {"swarhk", 6} } }, {0, { {"nwnear", 6} } }, {0, { {"toea", 4} } }, {0, { {"seswar", 6} } }, {0, { {"swnwar", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02933, 0} } }, {0, { {NULL, 0} } }, {0, { {"cudarrr", 7} } }, {0, { {"ldca", 4} } }, {0, { {"rdca", 4} } }, {0, { {"cudarrl", 7} } }, {0, { {"larrpl", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"curarrm", 7} } }, {0, { {"cularrp", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02940[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"rarrpl", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"harrcir", 7} } }, {0, { {"Uarrocir", 8} } }, {0, { {"lurdshar", 8} } }, {0, { {"ldrushar", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"LeftRightVector", 15} } }, {0, { {"RightUpDownVector", 17} } }, {0, { {"DownLeftRightVector", 19} } }, {0, { {"LeftUpDownVector", 16} } }, {0, { {"LeftVectorBar", 13} } }, {0, { {"RightVectorBar", 14} } }, {0, { {"RightUpVectorBar", 16} } }, {0, { {"RightDownVectorBar", 18} } }, {0, { {"DownLeftVectorBar", 17} } }, {0, { {"DownRightVectorBar", 18} } }, {0, { {"LeftUpVectorBar", 15} } }, {0, { {"LeftDownVectorBar", 17} } }, {0, { {"LeftTeeVector", 13} } }, {0, { {"RightTeeVector", 14} } }, {0, { {"RightUpTeeVector", 16} } }, {0, { {"RightDownTeeVector", 18} } }, {0, { {"DownLeftTeeVector", 17} } }, {0, { {"DownRightTeeVector", 18} } }, {0, { {"LeftUpTeeVector", 15} } }, {0, { {"LeftDownTeeVector", 17} } }, {0, { {"lHar", 4} } }, {0, { {"uHar", 4} } }, {0, { {"rHar", 4} } }, {0, { {"dHar", 4} } }, {0, { {"luruhar", 7} } }, {0, { {"ldrdhar", 7} } }, {0, { {"ruluhar", 7} } }, {0, { {"rdldhar", 7} } }, {0, { {"lharul", 6} } }, {0, { {"llhard", 6} } }, {0, { {"rharul", 6} } }, {0, { {"lrhard", 6} } }, {0, { {"udhar", 5} } }, {0, { {"ReverseUpEquilibrium", 20} } }, {0, { {"RoundImplies", 12} } }, {0, { {"erarr", 5} } }, {0, { {"simrarr", 7} } }, {0, { {"larrsim", 7} } }, {0, { {"rarrsim", 7} } }, {0, { {"rarrap", 6} } }, {0, { {"ltlarr", 6} } }, {0, { {NULL, 0} } }, {0, { {"gtrarr", 6} } }, {0, { {"subrarr", 7} } }, {0, { {NULL, 0} } }, {0, { {"suplarr", 7} } }, {0, { {"lfisht", 6} } }, {0, { {"rfisht", 6} } }, {0, { {"ufisht", 6} } }, {0, { {"dfisht", 6} } }, }; static const entity_stage3_row stage3_table_html5_02980[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lopar", 5} } }, {0, { {"ropar", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lbrke", 5} } }, {0, { {"rbrke", 5} } }, {0, { {"lbrkslu", 7} } }, {0, { {"rbrksld", 7} } }, {0, { {"lbrksld", 7} } }, {0, { {"rbrkslu", 7} } }, {0, { {"langd", 5} } }, {0, { {"rangd", 5} } }, {0, { {"lparlt", 6} } }, {0, { {"rpargt", 6} } }, {0, { {"gtlPar", 6} } }, {0, { {"ltrPar", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"vzigzag", 7} } }, {0, { {NULL, 0} } }, {0, { {"vangrt", 6} } }, {0, { {"angrtvbd", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ange", 4} } }, {0, { {"range", 5} } }, {0, { {"dwangle", 7} } }, {0, { {"uwangle", 7} } }, {0, { {"angmsdaa", 8} } }, {0, { {"angmsdab", 8} } }, {0, { {"angmsdac", 8} } }, {0, { {"angmsdad", 8} } }, {0, { {"angmsdae", 8} } }, {0, { {"angmsdaf", 8} } }, {0, { {"angmsdag", 8} } }, {0, { {"angmsdah", 8} } }, {0, { {"bemptyv", 7} } }, {0, { {"demptyv", 7} } }, {0, { {"cemptyv", 7} } }, {0, { {"raemptyv", 8} } }, {0, { {"laemptyv", 8} } }, {0, { {"ohbar", 5} } }, {0, { {"omid", 4} } }, {0, { {"opar", 4} } }, {0, { {NULL, 0} } }, {0, { {"operp", 5} } }, {0, { {NULL, 0} } }, {0, { {"olcross", 7} } }, {0, { {"odsold", 6} } }, {0, { {NULL, 0} } }, {0, { {"olcir", 5} } }, {0, { {"ofcir", 5} } }, }; static const entity_stage3_row stage3_table_html5_029C0[] = { {0, { {"olt", 3} } }, {0, { {"ogt", 3} } }, {0, { {"cirscir", 7} } }, {0, { {"cirE", 4} } }, {0, { {"solb", 4} } }, {0, { {"bsolb", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"boxbox", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trisb", 5} } }, {0, { {"rtriltri", 8} } }, {1, { {(void *)multi_cp_html5_029CF, 0} } }, {1, { {(void *)multi_cp_html5_029D0, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"iinfin", 6} } }, {0, { {"infintie", 8} } }, {0, { {"nvinfin", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"eparsl", 6} } }, {0, { {"smeparsl", 8} } }, {0, { {"eqvparsl", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lozf", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"RuleDelayed", 11} } }, {0, { {NULL, 0} } }, {0, { {"dsol", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_02A00[] = { {0, { {"xodot", 5} } }, {0, { {"bigoplus", 8} } }, {0, { {"bigotimes", 9} } }, {0, { {NULL, 0} } }, {0, { {"biguplus", 8} } }, {0, { {NULL, 0} } }, {0, { {"bigsqcup", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"iiiint", 6} } }, {0, { {"fpartint", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"cirfnint", 8} } }, {0, { {"awint", 5} } }, {0, { {"rppolint", 8} } }, {0, { {"scpolint", 8} } }, {0, { {"npolint", 7} } }, {0, { {"pointint", 8} } }, {0, { {"quatint", 7} } }, {0, { {"intlarhk", 8} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"pluscir", 7} } }, {0, { {"plusacir", 8} } }, {0, { {"simplus", 7} } }, {0, { {"plusdu", 6} } }, {0, { {"plussim", 7} } }, {0, { {"plustwo", 7} } }, {0, { {NULL, 0} } }, {0, { {"mcomma", 6} } }, {0, { {"minusdu", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"loplus", 6} } }, {0, { {"roplus", 6} } }, {0, { {"Cross", 5} } }, {0, { {"timesd", 6} } }, {0, { {"timesbar", 8} } }, {0, { {NULL, 0} } }, {0, { {"smashp", 6} } }, {0, { {"lotimes", 7} } }, {0, { {"rotimes", 7} } }, {0, { {"otimesas", 8} } }, {0, { {"Otimes", 6} } }, {0, { {"odiv", 4} } }, {0, { {"triplus", 7} } }, {0, { {"triminus", 8} } }, {0, { {"tritime", 7} } }, {0, { {"iprod", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amalg", 5} } }, }; static const entity_stage3_row stage3_table_html5_02A40[] = { {0, { {"capdot", 6} } }, {0, { {NULL, 0} } }, {0, { {"ncup", 4} } }, {0, { {"ncap", 4} } }, {0, { {"capand", 6} } }, {0, { {"cupor", 5} } }, {0, { {"cupcap", 6} } }, {0, { {"capcup", 6} } }, {0, { {"cupbrcap", 8} } }, {0, { {"capbrcup", 8} } }, {0, { {"cupcup", 6} } }, {0, { {"capcap", 6} } }, {0, { {"ccups", 5} } }, {0, { {"ccaps", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ccupssm", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"And", 3} } }, {0, { {"Or", 2} } }, {0, { {"andand", 6} } }, {0, { {"oror", 4} } }, {0, { {"orslope", 7} } }, {0, { {"andslope", 8} } }, {0, { {NULL, 0} } }, {0, { {"andv", 4} } }, {0, { {"orv", 3} } }, {0, { {"andd", 4} } }, {0, { {"ord", 3} } }, {0, { {NULL, 0} } }, {0, { {"wedbar", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sdote", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"simdot", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02A6D, 0} } }, {0, { {"easter", 6} } }, {0, { {"apacir", 6} } }, {1, { {(void *)multi_cp_html5_02A70, 0} } }, {0, { {"eplus", 5} } }, {0, { {"pluse", 5} } }, {0, { {"Esim", 4} } }, {0, { {"Colone", 6} } }, {0, { {"Equal", 5} } }, {0, { {NULL, 0} } }, {0, { {"ddotseq", 7} } }, {0, { {"equivDD", 7} } }, {0, { {"ltcir", 5} } }, {0, { {"gtcir", 5} } }, {0, { {"ltquest", 7} } }, {0, { {"gtquest", 7} } }, {1, { {(void *)multi_cp_html5_02A7D, 0} } }, {1, { {(void *)multi_cp_html5_02A7E, 0} } }, {0, { {"lesdot", 6} } }, }; static const entity_stage3_row stage3_table_html5_02A80[] = { {0, { {"gesdot", 6} } }, {0, { {"lesdoto", 7} } }, {0, { {"gesdoto", 7} } }, {0, { {"lesdotor", 8} } }, {0, { {"gesdotol", 8} } }, {0, { {"lap", 3} } }, {0, { {"gap", 3} } }, {0, { {"lne", 3} } }, {0, { {"gne", 3} } }, {0, { {"lnap", 4} } }, {0, { {"gnap", 4} } }, {0, { {"lesseqqgtr", 10} } }, {0, { {"gEl", 3} } }, {0, { {"lsime", 5} } }, {0, { {"gsime", 5} } }, {0, { {"lsimg", 5} } }, {0, { {"gsiml", 5} } }, {0, { {"lgE", 3} } }, {0, { {"glE", 3} } }, {0, { {"lesges", 6} } }, {0, { {"gesles", 6} } }, {0, { {"els", 3} } }, {0, { {"egs", 3} } }, {0, { {"elsdot", 6} } }, {0, { {"egsdot", 6} } }, {0, { {"el", 2} } }, {0, { {"eg", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"siml", 4} } }, {0, { {"simg", 4} } }, {0, { {"simlE", 5} } }, {0, { {"simgE", 5} } }, {1, { {(void *)multi_cp_html5_02AA1, 0} } }, {1, { {(void *)multi_cp_html5_02AA2, 0} } }, {0, { {NULL, 0} } }, {0, { {"glj", 3} } }, {0, { {"gla", 3} } }, {0, { {"ltcc", 4} } }, {0, { {"gtcc", 4} } }, {0, { {"lescc", 5} } }, {0, { {"gescc", 5} } }, {0, { {"smt", 3} } }, {0, { {"lat", 3} } }, {1, { {(void *)multi_cp_html5_02AAC, 0} } }, {1, { {(void *)multi_cp_html5_02AAD, 0} } }, {0, { {"bumpE", 5} } }, {1, { {(void *)multi_cp_html5_02AAF, 0} } }, {1, { {(void *)multi_cp_html5_02AB0, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prE", 3} } }, {0, { {"scE", 3} } }, {0, { {"precneqq", 8} } }, {0, { {"scnE", 4} } }, {0, { {"precapprox", 10} } }, {0, { {"succapprox", 10} } }, {0, { {"precnapprox", 11} } }, {0, { {"succnapprox", 11} } }, {0, { {"Pr", 2} } }, {0, { {"Sc", 2} } }, {0, { {"subdot", 6} } }, {0, { {"supdot", 6} } }, {0, { {"subplus", 7} } }, }; static const entity_stage3_row stage3_table_html5_02AC0[] = { {0, { {"supplus", 7} } }, {0, { {"submult", 7} } }, {0, { {"supmult", 7} } }, {0, { {"subedot", 7} } }, {0, { {"supedot", 7} } }, {1, { {(void *)multi_cp_html5_02AC5, 0} } }, {1, { {(void *)multi_cp_html5_02AC6, 0} } }, {0, { {"subsim", 6} } }, {0, { {"supsim", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02ACB, 0} } }, {1, { {(void *)multi_cp_html5_02ACC, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"csub", 4} } }, {0, { {"csup", 4} } }, {0, { {"csube", 5} } }, {0, { {"csupe", 5} } }, {0, { {"subsup", 6} } }, {0, { {"supsub", 6} } }, {0, { {"subsub", 6} } }, {0, { {"supsup", 6} } }, {0, { {"suphsub", 7} } }, {0, { {"supdsub", 7} } }, {0, { {"forkv", 5} } }, {0, { {"topfork", 7} } }, {0, { {"mlcp", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Dashv", 5} } }, {0, { {NULL, 0} } }, {0, { {"Vdashl", 6} } }, {0, { {"Barv", 4} } }, {0, { {"vBar", 4} } }, {0, { {"vBarv", 5} } }, {0, { {NULL, 0} } }, {0, { {"Vbar", 4} } }, {0, { {"Not", 3} } }, {0, { {"bNot", 4} } }, {0, { {"rnmid", 5} } }, {0, { {"cirmid", 6} } }, {0, { {"midcir", 6} } }, {0, { {"topcir", 6} } }, {0, { {"nhpar", 5} } }, {0, { {"parsim", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {1, { {(void *)multi_cp_html5_02AFD, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_0FB00[] = { {0, { {"fflig", 5} } }, {0, { {"filig", 5} } }, {0, { {"fllig", 5} } }, {0, { {"ffilig", 6} } }, {0, { {"ffllig", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_1D480[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Ascr", 4} } }, {0, { {NULL, 0} } }, {0, { {"Cscr", 4} } }, {0, { {"Dscr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Gscr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Jscr", 4} } }, {0, { {"Kscr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Nscr", 4} } }, {0, { {"Oscr", 4} } }, {0, { {"Pscr", 4} } }, {0, { {"Qscr", 4} } }, {0, { {NULL, 0} } }, {0, { {"Sscr", 4} } }, {0, { {"Tscr", 4} } }, {0, { {"Uscr", 4} } }, {0, { {"Vscr", 4} } }, {0, { {"Wscr", 4} } }, {0, { {"Xscr", 4} } }, {0, { {"Yscr", 4} } }, {0, { {"Zscr", 4} } }, {0, { {"ascr", 4} } }, {0, { {"bscr", 4} } }, {0, { {"cscr", 4} } }, {0, { {"dscr", 4} } }, {0, { {NULL, 0} } }, {0, { {"fscr", 4} } }, {0, { {NULL, 0} } }, {0, { {"hscr", 4} } }, {0, { {"iscr", 4} } }, {0, { {"jscr", 4} } }, }; static const entity_stage3_row stage3_table_html5_1D4C0[] = { {0, { {"kscr", 4} } }, {0, { {"lscr", 4} } }, {0, { {"mscr", 4} } }, {0, { {"nscr", 4} } }, {0, { {NULL, 0} } }, {0, { {"pscr", 4} } }, {0, { {"qscr", 4} } }, {0, { {"rscr", 4} } }, {0, { {"sscr", 4} } }, {0, { {"tscr", 4} } }, {0, { {"uscr", 4} } }, {0, { {"vscr", 4} } }, {0, { {"wscr", 4} } }, {0, { {"xscr", 4} } }, {0, { {"yscr", 4} } }, {0, { {"zscr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_1D500[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Afr", 3} } }, {0, { {"Bfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"Dfr", 3} } }, {0, { {"Efr", 3} } }, {0, { {"Ffr", 3} } }, {0, { {"Gfr", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Jfr", 3} } }, {0, { {"Kfr", 3} } }, {0, { {"Lfr", 3} } }, {0, { {"Mfr", 3} } }, {0, { {"Nfr", 3} } }, {0, { {"Ofr", 3} } }, {0, { {"Pfr", 3} } }, {0, { {"Qfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"Sfr", 3} } }, {0, { {"Tfr", 3} } }, {0, { {"Ufr", 3} } }, {0, { {"Vfr", 3} } }, {0, { {"Wfr", 3} } }, {0, { {"Xfr", 3} } }, {0, { {"Yfr", 3} } }, {0, { {NULL, 0} } }, {0, { {"afr", 3} } }, {0, { {"bfr", 3} } }, {0, { {"cfr", 3} } }, {0, { {"dfr", 3} } }, {0, { {"efr", 3} } }, {0, { {"ffr", 3} } }, {0, { {"gfr", 3} } }, {0, { {"hfr", 3} } }, {0, { {"ifr", 3} } }, {0, { {"jfr", 3} } }, {0, { {"kfr", 3} } }, {0, { {"lfr", 3} } }, {0, { {"mfr", 3} } }, {0, { {"nfr", 3} } }, {0, { {"ofr", 3} } }, {0, { {"pfr", 3} } }, {0, { {"qfr", 3} } }, {0, { {"rfr", 3} } }, {0, { {"sfr", 3} } }, {0, { {"tfr", 3} } }, {0, { {"ufr", 3} } }, {0, { {"vfr", 3} } }, {0, { {"wfr", 3} } }, {0, { {"xfr", 3} } }, {0, { {"yfr", 3} } }, {0, { {"zfr", 3} } }, {0, { {"Aopf", 4} } }, {0, { {"Bopf", 4} } }, {0, { {NULL, 0} } }, {0, { {"Dopf", 4} } }, {0, { {"Eopf", 4} } }, {0, { {"Fopf", 4} } }, {0, { {"Gopf", 4} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html5_1D540[] = { {0, { {"Iopf", 4} } }, {0, { {"Jopf", 4} } }, {0, { {"Kopf", 4} } }, {0, { {"Lopf", 4} } }, {0, { {"Mopf", 4} } }, {0, { {NULL, 0} } }, {0, { {"Oopf", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Sopf", 4} } }, {0, { {"Topf", 4} } }, {0, { {"Uopf", 4} } }, {0, { {"Vopf", 4} } }, {0, { {"Wopf", 4} } }, {0, { {"Xopf", 4} } }, {0, { {"Yopf", 4} } }, {0, { {NULL, 0} } }, {0, { {"aopf", 4} } }, {0, { {"bopf", 4} } }, {0, { {"copf", 4} } }, {0, { {"dopf", 4} } }, {0, { {"eopf", 4} } }, {0, { {"fopf", 4} } }, {0, { {"gopf", 4} } }, {0, { {"hopf", 4} } }, {0, { {"iopf", 4} } }, {0, { {"jopf", 4} } }, {0, { {"kopf", 4} } }, {0, { {"lopf", 4} } }, {0, { {"mopf", 4} } }, {0, { {"nopf", 4} } }, {0, { {"oopf", 4} } }, {0, { {"popf", 4} } }, {0, { {"qopf", 4} } }, {0, { {"ropf", 4} } }, {0, { {"sopf", 4} } }, {0, { {"topf", 4} } }, {0, { {"uopf", 4} } }, {0, { {"vopf", 4} } }, {0, { {"wopf", 4} } }, {0, { {"xopf", 4} } }, {0, { {"yopf", 4} } }, {0, { {"zopf", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; /* end of stage 3 Tables for HTML5 }}} */ /* {{{ Stage 2 Tables for HTML5 */ static const entity_stage2_row empty_stage2_table[] = { empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; static const entity_stage2_row stage2_table_html5_00000[] = { stage3_table_html5_00000, stage3_table_html5_00040, stage3_table_html5_00080, stage3_table_html5_000C0, stage3_table_html5_00100, stage3_table_html5_00140, stage3_table_html5_00180, stage3_table_html5_001C0, stage3_table_html5_00200, empty_stage3_table, empty_stage3_table, stage3_table_html5_002C0, stage3_table_html5_00300, empty_stage3_table, stage3_table_html5_00380, stage3_table_html5_003C0, stage3_table_html5_00400, stage3_table_html5_00440, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; static const entity_stage2_row stage2_table_html5_02000[] = { stage3_table_html5_02000, stage3_table_html5_02040, stage3_table_html5_02080, stage3_table_html5_020C0, stage3_table_html5_02100, stage3_table_html5_02140, stage3_table_html5_02180, stage3_table_html5_021C0, stage3_table_html5_02200, stage3_table_html5_02240, stage3_table_html5_02280, stage3_table_html5_022C0, stage3_table_html5_02300, stage3_table_html5_02340, stage3_table_html5_02380, stage3_table_html5_023C0, stage3_table_html5_02400, empty_stage3_table, empty_stage3_table, stage3_table_html5_024C0, stage3_table_html5_02500, stage3_table_html5_02540, stage3_table_html5_02580, stage3_table_html5_025C0, stage3_table_html5_02600, stage3_table_html5_02640, empty_stage3_table, empty_stage3_table, stage3_table_html5_02700, stage3_table_html5_02740, empty_stage3_table, stage3_table_html5_027C0, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html5_02900, stage3_table_html5_02940, stage3_table_html5_02980, stage3_table_html5_029C0, stage3_table_html5_02A00, stage3_table_html5_02A40, stage3_table_html5_02A80, stage3_table_html5_02AC0, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; static const entity_stage2_row stage2_table_html5_0F000[] = { empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html5_0FB00, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; static const entity_stage2_row stage2_table_html5_1D000[] = { empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html5_1D480, stage3_table_html5_1D4C0, stage3_table_html5_1D500, stage3_table_html5_1D540, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; /* end of stage 2 tables for HTML5 }}} */ static const entity_stage1_row entity_ms_table_html5[] = { stage2_table_html5_00000, empty_stage2_table, stage2_table_html5_02000, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, stage2_table_html5_0F000, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, stage2_table_html5_1D000, }; /* end of HTML5 multi-stage table for codepoint -> entity }}} */ /* {{{ HTML5 hash table for entity -> codepoint */ typedef struct { const char *entity; unsigned short entity_len; unsigned int codepoint1; unsigned int codepoint2; } entity_cp_map; typedef const entity_cp_map *entity_ht_bucket; typedef struct { unsigned num_elems; /* power of 2 */ const entity_ht_bucket *buckets; /* .num_elems elements */ } entity_ht; static const entity_cp_map ht_bucket_empty[] = { {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_000[] = { {"realpart", 8, 0x0211C, 0}, {"varr", 4, 0x02195, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_001[] = { {"angrt", 5, 0x0221F, 0}, {"iogon", 5, 0x0012F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_003[] = { {"lessdot", 7, 0x022D6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_005[] = { {"simrarr", 7, 0x02972, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_007[] = { {"Zscr", 4, 0x1D4B5, 0}, {"midast", 6, 0x0002A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_00D[] = { {"copf", 4, 0x1D554, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_00F[] = { {"female", 6, 0x02640, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_017[] = { {"NegativeThickSpace", 18, 0x0200B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_020[] = { {"copy", 4, 0x000A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_022[] = { {"angst", 5, 0x000C5, 0}, {"searr", 5, 0x02198, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_024[] = { {"sqcups", 6, 0x02294, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_027[] = { {"Acirc", 5, 0x000C2, 0}, {"gtdot", 5, 0x022D7, 0}, {"varpi", 5, 0x003D6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_028[] = { {"UpTee", 5, 0x022A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_029[] = { {"TildeTilde", 10, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_02A[] = { {"mfr", 3, 0x1D52A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_02B[] = { {"RightVectorBar", 14, 0x02953, 0}, {"gesdot", 6, 0x02A80, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_02C[] = { {"Uarrocir", 8, 0x02949, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_02E[] = { {"RightTriangleBar", 16, 0x029D0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_030[] = { {"Ocy", 3, 0x0041E, 0}, {"int", 3, 0x0222B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_034[] = { {"preccurlyeq", 11, 0x0227C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_038[] = { {"sccue", 5, 0x0227D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_040[] = { {"DoubleContourIntegral", 21, 0x0222F, 0}, {"nexist", 6, 0x02204, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_047[] = { {"acirc", 5, 0x000E2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_04C[] = { {"setmn", 5, 0x02216, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_04E[] = { {"Dopf", 4, 0x1D53B, 0}, {"LeftTee", 7, 0x022A3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_051[] = { {"SquareSuperset", 14, 0x02290, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_059[] = { {"udhar", 5, 0x0296E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_05D[] = { {"Equal", 5, 0x02A75, 0}, {"pscr", 4, 0x1D4C5, 0}, {"xvee", 4, 0x022C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_05F[] = { {"approx", 6, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_060[] = { {"HARDcy", 6, 0x0042A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_061[] = { {"nGg", 3, 0x022D9, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_063[] = { {"yopf", 4, 0x1D56A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_064[] = { {"prcue", 5, 0x0227C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_065[] = { {"loarr", 5, 0x021FD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_069[] = { {"mho", 3, 0x02127, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_06A[] = { {"otimesas", 8, 0x02A36, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_06D[] = { {"capcap", 6, 0x02A4B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_06E[] = { {"eplus", 5, 0x02A71, 0}, {"nGt", 3, 0x0226B, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_06F[] = { {"Bumpeq", 6, 0x0224E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_071[] = { {"submult", 7, 0x02AC1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_073[] = { {"subplus", 7, 0x02ABF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_074[] = { {"auml", 4, 0x000E4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_07A[] = { {"RightDoubleBracket", 18, 0x027E7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_07B[] = { {"varkappa", 8, 0x003F0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_07C[] = { {"plusdo", 6, 0x02214, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_07F[] = { {"mid", 3, 0x02223, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_082[] = { {"plusdu", 6, 0x02A25, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_084[] = { {"notniva", 7, 0x0220C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_085[] = { {"notnivb", 7, 0x022FE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_086[] = { {"notnivc", 7, 0x022FD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_088[] = { {"varepsilon", 10, 0x003F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_089[] = { {"nspar", 5, 0x02226, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_08C[] = { {"Ofr", 3, 0x1D512, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_08E[] = { {"Omega", 5, 0x003A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_090[] = { {"equals", 6, 0x0003D, 0}, {"harrcir", 7, 0x02948, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_094[] = { {"Succeeds", 8, 0x0227B, 0}, {"cupdot", 6, 0x0228D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_097[] = { {"lsqb", 4, 0x0005B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_09E[] = { {"Qscr", 4, 0x1D4AC, 0}, {"urcorn", 6, 0x0231D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0A4[] = { {"Zopf", 4, 0x02124, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0A6[] = { {"triangleleft", 12, 0x025C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0AB[] = { {"supdsub", 7, 0x02AD8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0AC[] = { {"chcy", 4, 0x00447, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0AD[] = { {"sqsupset", 8, 0x02290, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0AE[] = { {"omega", 5, 0x003C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0AF[] = { {"rthree", 6, 0x022CC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0B0[] = { {"THORN", 5, 0x000DE, 0}, {"clubsuit", 8, 0x02663, 0}, {"filig", 5, 0x0FB01, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0B2[] = { {"ocir", 4, 0x0229A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0B8[] = { {"ShortDownArrow", 14, 0x02193, 0}, {"atilde", 6, 0x000E3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0B9[] = { {"DownLeftTeeVector", 17, 0x0295E, 0}, {"LeftTeeArrow", 12, 0x021A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0BA[] = { {"GreaterFullEqual", 16, 0x02267, 0}, {"emsp", 4, 0x02003, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0C0[] = { {"lozf", 4, 0x029EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0C4[] = { {"ThinSpace", 9, 0x02009, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0CE[] = { {"fnof", 4, 0x00192, 0}, {"multimap", 8, 0x022B8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0D1[] = { {"Zacute", 6, 0x00179, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0D2[] = { {"mdash", 5, 0x02014, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0D3[] = { {"minusb", 6, 0x0229F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0D5[] = { {"minusd", 6, 0x02238, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0DF[] = { {"varsigma", 8, 0x003C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0E5[] = { {"ntilde", 6, 0x000F1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0E6[] = { {"Lambda", 6, 0x0039B, 0}, {"integers", 8, 0x02124, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0E8[] = { {"gesles", 6, 0x02A94, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0EC[] = { {"NotSubset", 9, 0x02282, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0EF[] = { {"NotLeftTriangleEqual", 20, 0x022EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0F3[] = { {"LessLess", 8, 0x02AA1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0F4[] = { {"gscr", 4, 0x0210A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0FA[] = { {"popf", 4, 0x1D561, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0FB[] = { {"Agrave", 6, 0x000C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0FD[] = { {"nvinfin", 7, 0x029DE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_0FE[] = { {"gacute", 6, 0x001F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_100[] = { {"diam", 4, 0x022C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_101[] = { {"nesim", 5, 0x02242, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_103[] = { {"YIcy", 4, 0x00407, 0}, {"bcy", 3, 0x00431, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_105[] = { {"Exists", 6, 0x02203, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_106[] = { {"vert", 4, 0x0007C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_109[] = { {"ropar", 5, 0x02986, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_10A[] = { {"topfork", 7, 0x02ADA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_10B[] = { {"nLl", 3, 0x022D8, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_10D[] = { {"notin", 5, 0x02209, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_10E[] = { {"SucceedsSlantEqual", 18, 0x0227D, 0}, {"toea", 4, 0x02928, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_10F[] = { {"ImaginaryI", 10, 0x02148, 0}, {"srarr", 5, 0x02192, 0}, {"ulcorner", 8, 0x0231C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_110[] = { {"LeftArrowBar", 12, 0x021E4, 0}, {"ldsh", 4, 0x021B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_111[] = { {"DownBreve", 9, 0x00311, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_113[] = { {"nLt", 3, 0x0226A, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_116[] = { {"vltri", 5, 0x022B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_11B[] = { {"VDash", 5, 0x022AB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_11C[] = { {"Dstrok", 6, 0x00110, 0}, {"Intersection", 12, 0x022C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_11E[] = { {"lrhar", 5, 0x021CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_121[] = { {"RightTee", 8, 0x022A2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_124[] = { {"RightArrowLeftArrow", 19, 0x021C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_129[] = { {"Ccirc", 5, 0x00108, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_12A[] = { {"ntrianglelefteq", 15, 0x022EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_12C[] = { {"leftharpoonup", 13, 0x021BC, 0}, {"scap", 4, 0x02AB8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_12E[] = { {"darr", 4, 0x02193, 0}, {"qfr", 3, 0x1D52E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_12F[] = { {"cdot", 4, 0x0010B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_130[] = { {"supseteqq", 9, 0x02AC6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_134[] = { {"Scy", 3, 0x00421, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_135[] = { {"Hscr", 4, 0x0210B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_137[] = { {"LowerRightArrow", 15, 0x02198, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_13A[] = { {"divide", 6, 0x000F7, 0}, {"tcedil", 6, 0x00163, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_13B[] = { {"LeftArrow", 9, 0x02190, 0}, {"Qopf", 4, 0x0211A, 0}, {"vDash", 5, 0x022A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_145[] = { {"dash", 4, 0x02010, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_147[] = { {"oror", 4, 0x02A56, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_149[] = { {"ccirc", 5, 0x00109, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_14B[] = { {"LongLeftArrow", 13, 0x027F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_14C[] = { {"straightphi", 11, 0x003D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_14E[] = { {"xlarr", 5, 0x027F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_14F[] = { {"DJcy", 4, 0x00402, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_158[] = { {"nbsp", 4, 0x000A0, 0}, {"succcurlyeq", 11, 0x0227D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_159[] = { {"njcy", 4, 0x0045A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_15B[] = { {"Leftarrow", 9, 0x021D0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_15E[] = { {"dtrif", 5, 0x025BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_15F[] = { {"bfr", 3, 0x1D51F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_161[] = { {"GreaterTilde", 12, 0x02273, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_164[] = { {"hamilt", 6, 0x0210B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_165[] = { {"Dcy", 3, 0x00414, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_168[] = { {"LeftUpVector", 12, 0x021BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_16A[] = { {"bigoplus", 8, 0x02A01, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_170[] = { {"nwarhk", 6, 0x02923, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_173[] = { {"diams", 5, 0x02666, 0}, {"suphsol", 7, 0x027C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_17A[] = { {"boxminus", 8, 0x0229F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_17B[] = { {"leftarrow", 9, 0x02190, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_17C[] = { {"andd", 4, 0x02A5C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_17F[] = { {"NonBreakingSpace", 16, 0x000A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_181[] = { {"xutri", 5, 0x025B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_189[] = { {"Longleftrightarrow", 18, 0x027FA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_18B[] = { {"Longleftarrow", 13, 0x027F8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_18C[] = { {"gtrapprox", 9, 0x02A86, 0}, {"phmmat", 6, 0x02133, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_18E[] = { {"andv", 4, 0x02A5A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_18F[] = { {"equiv", 5, 0x02261, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_190[] = { {"Sfr", 3, 0x1D516, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_191[] = { {"gopf", 4, 0x1D558, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_193[] = { {"sqsub", 5, 0x0228F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_195[] = { {"approxeq", 8, 0x0224A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_19A[] = { {"Del", 3, 0x02207, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_19C[] = { {"nrightarrow", 11, 0x0219B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_19F[] = { {"SquareUnion", 11, 0x02294, 0}, {"strns", 5, 0x000AF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A0[] = { {"Itilde", 6, 0x00128, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A1[] = { {"sqsup", 5, 0x02290, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A2[] = { {"Ouml", 4, 0x000D6, 0}, {"PrecedesTilde", 13, 0x0227E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A3[] = { {"AMP", 3, 0x00026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A4[] = { {"plusmn", 6, 0x000B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A5[] = { {"xcup", 4, 0x022C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1A8[] = { {"radic", 5, 0x0221A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1AB[] = { {"longleftarrow", 13, 0x027F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1AC[] = { {"lrcorner", 8, 0x0231F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1AD[] = { {"notni", 5, 0x0220C, 0}, {"updownarrow", 11, 0x02195, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1AE[] = { {"szlig", 5, 0x000DF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1AF[] = { {"ugrave", 6, 0x000F9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1B0[] = { {"imof", 4, 0x022B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1B2[] = { {"csub", 4, 0x02ACF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1B5[] = { {"gsim", 4, 0x02273, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1B9[] = { {"leftleftarrows", 14, 0x021C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1BD[] = { {"backcong", 8, 0x0224C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1BE[] = { {"clubs", 5, 0x02663, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1C0[] = { {"csup", 4, 0x02AD0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1C1[] = { {"Dfr", 3, 0x1D507, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1C4[] = { {"profline", 8, 0x02312, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1C6[] = { {"Zdot", 4, 0x0017B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1C9[] = { {"ClockwiseContourIntegral", 24, 0x02232, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1CA[] = { {"roplus", 6, 0x02A2E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1CD[] = { {"Rang", 4, 0x027EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1CE[] = { {"bcong", 5, 0x0224C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D0[] = { {"tshcy", 5, 0x0045B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D1[] = { {"eDot", 4, 0x02251, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D2[] = { {"Hopf", 4, 0x0210D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D4[] = { {"lpar", 4, 0x00028, 0}, {"odash", 5, 0x0229D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D5[] = { {"capbrcup", 8, 0x02A49, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D6[] = { {"ucy", 3, 0x00443, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D8[] = { {"ofcir", 5, 0x029BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1D9[] = { {"Breve", 5, 0x002D8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1DA[] = { {"barvee", 6, 0x022BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1DF[] = { {"backsim", 7, 0x0223D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1E0[] = { {"ange", 4, 0x029A4, 0}, {"half", 4, 0x000BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1E1[] = { {"tscr", 4, 0x1D4C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1E5[] = { {"realine", 7, 0x0211B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1E6[] = { {"Oacute", 6, 0x000D3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1E7[] = { {"dfisht", 6, 0x0297F, 0}, {"swnwar", 6, 0x0292A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1E8[] = { {"tscy", 4, 0x00446, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1EB[] = { {"lsquor", 6, 0x0201A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1EF[] = { {"naturals", 8, 0x02115, 0}, {"utrif", 5, 0x025B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1F0[] = { {"DiacriticalTilde", 16, 0x002DC, 0}, {"RightUpVectorBar", 16, 0x02954, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1F2[] = { {"rHar", 4, 0x02964, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1F4[] = { {"curlyeqprec", 11, 0x022DE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1F8[] = { {"dtri", 4, 0x025BF, 0}, {"euml", 4, 0x000EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1F9[] = { {"breve", 5, 0x002D8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1FA[] = { {"Barwed", 6, 0x02306, 0}, {"nvlArr", 6, 0x02902, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1FC[] = { {"dcaron", 6, 0x0010F, 0}, {"natural", 7, 0x0266E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1FE[] = { {"nsupseteqq", 10, 0x02AC6, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_1FF[] = { {"nedot", 5, 0x02250, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_205[] = { {"bigtriangledown", 15, 0x025BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_207[] = { {"fcy", 3, 0x00444, 0}, {"marker", 6, 0x025AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_20E[] = { {"Union", 5, 0x022C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_212[] = { {"varpropto", 9, 0x0221D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_213[] = { {"CloseCurlyDoubleQuote", 21, 0x0201D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_219[] = { {"DoubleLongRightArrow", 20, 0x027F9, 0}, {"GreaterGreater", 14, 0x02AA2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_21D[] = { {"Umacr", 5, 0x0016A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_220[] = { {"Colon", 5, 0x02237, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_222[] = { {"Hat", 3, 0x0005E, 0}, {"Uscr", 4, 0x1D4B0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_227[] = { {"SHCHcy", 6, 0x00429, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_229[] = { {"nLeftarrow", 10, 0x021CD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_22B[] = { {"Ecirc", 5, 0x000CA, 0}, {"Jukcy", 5, 0x00404, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_22C[] = { {"nbumpe", 6, 0x0224F, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_22D[] = { {"NotLess", 7, 0x0226E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_22F[] = { {"gtlPar", 6, 0x02995, 0}, {"suphsub", 7, 0x02AD7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_230[] = { {"gtreqqless", 10, 0x02A8C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_232[] = { {"ufr", 3, 0x1D532, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_234[] = { {"cirscir", 7, 0x029C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_239[] = { {"LeftDownTeeVector", 17, 0x02961, 0}, {"duhar", 5, 0x0296F, 0}, {"nrtrie", 6, 0x022ED, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_23C[] = { {"llhard", 6, 0x0296B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_23D[] = { {"umacr", 5, 0x0016B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_23E[] = { {"lates", 5, 0x02AAD, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_240[] = { {"colon", 5, 0x0003A, 0}, {"iacute", 6, 0x000ED, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_241[] = { {"NotPrecedes", 11, 0x02280, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_242[] = { {"cirfnint", 8, 0x02A10, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_246[] = { {"barwedge", 8, 0x02305, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_249[] = { {"nleftarrow", 10, 0x0219A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_24A[] = { {"Ubrcy", 5, 0x0040E, 0}, {"leftthreetimes", 14, 0x022CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_24B[] = { {"andand", 6, 0x02A55, 0}, {"ecirc", 5, 0x000EA, 0}, {"jukcy", 5, 0x00454, 0}, {"quatint", 7, 0x02A16, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_24D[] = { {"lharul", 6, 0x0296A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_251[] = { {"smtes", 5, 0x02AAC, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_252[] = { {"UnionPlus", 9, 0x0228E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_257[] = { {"NotLeftTriangle", 15, 0x022EA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_25A[] = { {"bne", 3, 0x0003D, 0x020E5}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_25B[] = { {"gtrsim", 6, 0x02273, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_25C[] = { {"Rarr", 4, 0x021A0, 0}, {"ldquor", 6, 0x0201E, 0}, {"phiv", 4, 0x003D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_25D[] = { {"because", 7, 0x02235, 0}, {"gEl", 3, 0x02A8C, 0}, {"setminus", 8, 0x02216, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_263[] = { {"ffr", 3, 0x1D523, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_26A[] = { {"ubrcy", 5, 0x0045E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_26B[] = { {"elinters", 8, 0x023E7, 0}, {"plusb", 5, 0x0229E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_26E[] = { {"pluse", 5, 0x02A72, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_274[] = { {"CapitalDifferentialD", 20, 0x02145, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_277[] = { {"daleth", 6, 0x02138, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_278[] = { {"kscr", 4, 0x1D4C0, 0}, {"ogon", 4, 0x002DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_27C[] = { {"SHcy", 4, 0x00428, 0}, {"equest", 6, 0x0225F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_27E[] = { {"rbarr", 5, 0x0290D, 0}, {"topf", 4, 0x1D565, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_283[] = { {"tritime", 7, 0x02A3B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_28A[] = { {"bot", 3, 0x022A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_294[] = { {"Wfr", 3, 0x1D51A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_297[] = { {"HumpEqual", 9, 0x0224F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_298[] = { {"rightleftharpoons", 17, 0x021CC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_29D[] = { {"frasl", 5, 0x02044, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_29F[] = { {"UnderBracket", 12, 0x023B5, 0}, {"ovbar", 5, 0x0233D, 0}, {"upharpoonright", 14, 0x021BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2A0[] = { {"euro", 4, 0x020AC, 0}, {"nhArr", 5, 0x021CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2A9[] = { {"NotSupersetEqual", 16, 0x02289, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2AE[] = { {"cularr", 6, 0x021B6, 0}, {"scnE", 4, 0x02AB6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2B1[] = { {"napid", 5, 0x0224B, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2B2[] = { {"harr", 4, 0x02194, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2B3[] = { {"gdot", 4, 0x00121, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2B9[] = { {"Lscr", 4, 0x02112, 0}, {"zeta", 4, 0x003B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2BF[] = { {"ENG", 3, 0x0014A, 0}, {"Uopf", 4, 0x1D54C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2C4[] = { {"esdot", 5, 0x02250, 0}, {"scsim", 5, 0x0227F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2C5[] = { {"Hfr", 3, 0x0210C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2CE[] = { {"RightArrow", 10, 0x02192, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2CF[] = { {"Sqrt", 4, 0x0221A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2D3[] = { {"xodot", 5, 0x02A00, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2DA[] = { {"ycy", 3, 0x0044B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2DB[] = { {"hkswarow", 8, 0x02926, 0}, {"urtri", 5, 0x025F9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2DC[] = { {"roang", 5, 0x027ED, 0}, {"tosa", 4, 0x02929, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2E3[] = { {"CircleMinus", 11, 0x02296, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2E4[] = { {"Lcaron", 6, 0x0013D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2EB[] = { {"ShortLeftArrow", 14, 0x02190, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2EC[] = { {"Dot", 3, 0x000A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2EE[] = { {"Rightarrow", 10, 0x021D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2F0[] = { {"prsim", 5, 0x0227E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2F2[] = { {"notinE", 6, 0x022F9, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_2F8[] = { {"becaus", 6, 0x02235, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_300[] = { {"NotEqualTilde", 13, 0x02242, 0x00338}, {"nparallel", 9, 0x02226, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_301[] = { {"capcup", 6, 0x02A47, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_304[] = { {"simeq", 5, 0x02243, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_305[] = { {"forall", 6, 0x02200, 0}, {"straightepsilon", 15, 0x003F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_308[] = { {"ruluhar", 7, 0x02968, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_30B[] = { {"jcy", 3, 0x00439, 0}, {"ltcc", 4, 0x02AA6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_30F[] = { {"bscr", 4, 0x1D4B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_311[] = { {"ExponentialE", 12, 0x02147, 0}, {"weierp", 6, 0x02118, 0}, {"yen", 3, 0x000A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_313[] = { {"blacksquare", 11, 0x025AA, 0}, {"uml", 3, 0x000A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_315[] = { {"backsimeq", 9, 0x022CD, 0}, {"kopf", 4, 0x1D55C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_319[] = { {"NotPrecedesEqual", 16, 0x02AAF, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_31A[] = { {"simgE", 5, 0x02AA0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_31B[] = { {"tridot", 6, 0x025EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_326[] = { {"DoubleLongLeftArrow", 19, 0x027F8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_329[] = { {"models", 6, 0x022A7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_32A[] = { {"emptyv", 6, 0x02205, 0}, {"eqslantgtr", 10, 0x02A96, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_32D[] = { {"Gcirc", 5, 0x0011C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_330[] = { {"bernou", 6, 0x0212C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_331[] = { {"HumpDownHump", 12, 0x0224E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_336[] = { {"yfr", 3, 0x1D536, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_338[] = { {"blacktriangle", 13, 0x025B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_33B[] = { {"yacy", 4, 0x0044F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_33F[] = { {"lsime", 5, 0x02A8D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_340[] = { {"NotTildeEqual", 13, 0x02244, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_341[] = { {"lsimg", 5, 0x02A8F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_347[] = { {"ncap", 4, 0x02A43, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_34D[] = { {"DD", 2, 0x02145, 0}, {"gcirc", 5, 0x0011D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_350[] = { {"Cscr", 4, 0x1D49E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_356[] = { {"Lopf", 4, 0x1D543, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_358[] = { {"lBarr", 5, 0x0290E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_359[] = { {"Leftrightarrow", 14, 0x021D4, 0}, {"gtrdot", 6, 0x022D7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_35D[] = { {"NotSquareSubset", 15, 0x0228F, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_35F[] = { {"sqsubset", 8, 0x0228F, 0}, {"subsetneq", 9, 0x0228A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_361[] = { {"doublebarwedge", 14, 0x02306, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_363[] = { {"blacktriangleleft", 17, 0x025C2, 0}, {"hellip", 6, 0x02026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_365[] = { {"xscr", 4, 0x1D4CD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_367[] = { {"LessFullEqual", 13, 0x02266, 0}, {"jfr", 3, 0x1D527, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_369[] = { {"GreaterSlantEqual", 17, 0x02A7E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_36A[] = { {"Uring", 5, 0x0016E, 0}, {"VeryThinSpace", 13, 0x0200A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_36B[] = { {"roarr", 5, 0x021FE, 0}, {"scaron", 6, 0x00161, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_36D[] = { {"Lcy", 3, 0x0041B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_36E[] = { {"RightDownVector", 15, 0x021C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_36F[] = { {"Sub", 3, 0x022D0, 0}, {"pitchfork", 9, 0x022D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_372[] = { {"nvsim", 5, 0x0223C, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_374[] = { {"xrArr", 5, 0x027F9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_378[] = { {"CloseCurlyQuote", 15, 0x02019, 0}, {"uwangle", 7, 0x029A7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_37A[] = { {"Sum", 3, 0x02211, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_37C[] = { {"iuml", 4, 0x000EF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_37D[] = { {"Sup", 3, 0x022D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_37E[] = { {"planck", 6, 0x0210F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_37F[] = { {"Egrave", 6, 0x000C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_380[] = { {"curlywedge", 10, 0x022CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_382[] = { {"TildeFullEqual", 14, 0x02245, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_383[] = { {"searhk", 6, 0x02925, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_386[] = { {"ETH", 3, 0x000D0, 0}, {"napos", 5, 0x00149, 0}, {"upsi", 4, 0x003C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_387[] = { {"twoheadleftarrow", 16, 0x0219E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_38A[] = { {"Assign", 6, 0x02254, 0}, {"uring", 5, 0x0016F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_38D[] = { {"SquareIntersection", 18, 0x02293, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_38E[] = { {"lmidot", 6, 0x00140, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_391[] = { {"kcedil", 6, 0x00137, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_394[] = { {"curren", 6, 0x000A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_397[] = { {"acute", 5, 0x000B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_398[] = { {"curlyeqsucc", 11, 0x022DF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_39C[] = { {"Omicron", 7, 0x0039F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_39F[] = { {"uarr", 4, 0x02191, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3A0[] = { {"Hstrok", 6, 0x00126, 0}, {"UnderBrace", 10, 0x023DF, 0}, {"tdot", 4, 0x020DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3A1[] = { {"qint", 4, 0x02A0C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3A4[] = { {"sfrown", 6, 0x02322, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3A5[] = { {"trpezium", 8, 0x023E2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3A6[] = { {"Yscr", 4, 0x1D4B4, 0}, {"cedil", 5, 0x000B8, 0}, {"planckh", 7, 0x0210E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3A7[] = { {"lang", 4, 0x027E8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3AC[] = { {"bopf", 4, 0x1D553, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3B2[] = { {"lbbrk", 5, 0x02772, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3B4[] = { {"khcy", 4, 0x00445, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3BF[] = { {"Epsilon", 7, 0x00395, 0}, {"simlE", 5, 0x02A9F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3C0[] = { {"GT", 2, 0x0003E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3C4[] = { {"nap", 3, 0x02249, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3C9[] = { {"Lfr", 3, 0x1D50F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3CD[] = { {"succapprox", 10, 0x02AB8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3D0[] = { {"bsim", 4, 0x0223D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3D3[] = { {"Gg", 2, 0x022D9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3D9[] = { {"angrtvb", 7, 0x022BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3DE[] = { {"xcirc", 5, 0x025EF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3E0[] = { {"Gt", 2, 0x0226B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3E1[] = { {"LeftRightVector", 15, 0x0294E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3E3[] = { {"circledast", 10, 0x0229B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3E4[] = { {"telrec", 6, 0x02315, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3E6[] = { {"SucceedsTilde", 13, 0x0227F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3E9[] = { {"nLtv", 4, 0x0226A, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3ED[] = { {"Copf", 4, 0x02102, 0}, {"napprox", 7, 0x02249, 0}, {"nsupseteq", 9, 0x02289, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3F1[] = { {"VerticalTilde", 13, 0x02240, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3F2[] = { {"parallel", 8, 0x02225, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3F7[] = { {"precnapprox", 11, 0x02AB9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3FC[] = { {"oscr", 4, 0x02134, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_3FE[] = { {"supsetneqq", 10, 0x02ACC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_402[] = { {"xopf", 4, 0x1D569, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_405[] = { {"mumap", 5, 0x022B8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_407[] = { {"varsupsetneqq", 13, 0x02ACC, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_409[] = { {"ReverseEquilibrium", 18, 0x021CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_40E[] = { {"Ubreve", 6, 0x0016C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_40F[] = { {"YUcy", 4, 0x0042E, 0}, {"ncy", 3, 0x0043D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_413[] = { {"ltimes", 6, 0x022C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_41A[] = { {"UpperRightArrow", 15, 0x02197, 0}, {"nvap", 4, 0x0224D, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_41B[] = { {"Im", 2, 0x02111, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_421[] = { {"simne", 5, 0x02246, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_423[] = { {"ccups", 5, 0x02A4C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_424[] = { {"nlArr", 5, 0x021CD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_425[] = { {"rarrsim", 7, 0x02974, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_426[] = { {"Ncaron", 6, 0x00147, 0}, {"vsupnE", 6, 0x02ACC, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_429[] = { {"succeq", 6, 0x02AB0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_42C[] = { {"Gammad", 6, 0x003DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_42F[] = { {"Icirc", 5, 0x000CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_430[] = { {"backepsilon", 11, 0x003F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_432[] = { {"ddarr", 5, 0x021CA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_436[] = { {"larr", 4, 0x02190, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_439[] = { {"divideontimes", 13, 0x022C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_43C[] = { {"succsim", 7, 0x0227F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_43D[] = { {"Pscr", 4, 0x1D4AB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_43E[] = { {"puncsp", 6, 0x02008, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_43F[] = { {"gtreqless", 9, 0x022DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_440[] = { {"intcal", 6, 0x022BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_441[] = { {"nsime", 5, 0x02244, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_443[] = { {"Yopf", 4, 0x1D550, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_446[] = { {"angsph", 6, 0x02222, 0}, {"vsupne", 6, 0x0228B, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_447[] = { {"NotNestedLessLess", 17, 0x02AA1, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_44A[] = { {"PrecedesSlantEqual", 18, 0x0227C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_44F[] = { {"icirc", 5, 0x000EE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_450[] = { {"DownLeftVectorBar", 17, 0x02956, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_454[] = { {"Auml", 4, 0x000C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_457[] = { {"LJcy", 4, 0x00409, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_458[] = { {"sqsube", 6, 0x02291, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_45D[] = { {"nprec", 5, 0x02280, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_45F[] = { {"ngE", 3, 0x02267, 0x00338}, {"smile", 5, 0x02323, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_465[] = { {"LT", 2, 0x0003C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_466[] = { {"ldrdhar", 7, 0x02967, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_469[] = { {"utri", 4, 0x025B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_46A[] = { {"Sacute", 6, 0x0015A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_46B[] = { {"late", 4, 0x02AAD, 0}, {"nfr", 3, 0x1D52B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_46D[] = { {"NotNestedGreaterGreater", 23, 0x02AA2, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_46F[] = { {"nwarr", 5, 0x02196, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_470[] = { {"biguplus", 8, 0x02A04, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_471[] = { {"Pcy", 3, 0x0041F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_472[] = { {"bigtriangleup", 13, 0x025B3, 0}, {"rationals", 9, 0x0211A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_473[] = { {"congdot", 7, 0x02A6D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_475[] = { {"PlusMinus", 9, 0x000B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_479[] = { {"IOcy", 4, 0x00401, 0}, {"Scedil", 6, 0x0015E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_47C[] = { {"eqcirc", 6, 0x02256, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_47D[] = { {"Ll", 2, 0x022D8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_47F[] = { {"Cayleys", 7, 0x0212D, 0}, {"nge", 3, 0x02271, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_480[] = { {"NotGreater", 10, 0x0226F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_485[] = { {"Lt", 2, 0x0226A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_488[] = { {"rotimes", 7, 0x02A35, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_48C[] = { {"caps", 4, 0x02229, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_48E[] = { {"ngt", 3, 0x0226F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_48F[] = { {"Cross", 5, 0x02A2F, 0}, {"bumpeq", 6, 0x0224F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_490[] = { {"VerticalSeparator", 17, 0x02758, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_491[] = { {"plankv", 6, 0x0210F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_493[] = { {"fscr", 4, 0x1D4BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_495[] = { {"bsol", 4, 0x0005C, 0}, {"sqsubseteq", 10, 0x02291, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_496[] = { {"boxH", 4, 0x02550, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_498[] = { {"rightarrowtail", 14, 0x021A3, 0}, {"ufisht", 6, 0x0297E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_499[] = { {"oopf", 4, 0x1D560, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_49F[] = { {"lobrk", 5, 0x027E6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4A2[] = { {"Acy", 3, 0x00410, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4A4[] = { {"NotSubsetEqual", 14, 0x02288, 0}, {"boxV", 4, 0x02551, 0}, {"dHar", 4, 0x02965, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4A6[] = { {"precnsim", 8, 0x022E8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4A7[] = { {"Mu", 2, 0x0039C, 0}, {"aelig", 5, 0x000E6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4AA[] = { {"gescc", 5, 0x02AA9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4AB[] = { {"origof", 6, 0x022B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4AE[] = { {"upsih", 5, 0x003D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4AF[] = { {"cross", 5, 0x02717, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4B2[] = { {"LeftFloor", 9, 0x0230A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4B6[] = { {"boxh", 4, 0x02500, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4B8[] = { {"NotGreaterEqual", 15, 0x02271, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4BC[] = { {"profalar", 8, 0x0232E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4C0[] = { {"nsmid", 5, 0x02224, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4C2[] = { {"hbar", 4, 0x0210F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4C3[] = { {"udarr", 5, 0x021C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4C4[] = { {"boxv", 4, 0x02502, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4C5[] = { {"olarr", 5, 0x021BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4C8[] = { {"Nu", 2, 0x0039D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4CB[] = { {"NotCongruent", 12, 0x02262, 0}, {"bkarow", 6, 0x0290D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4CD[] = { {"Pfr", 3, 0x1D513, 0}, {"forkv", 5, 0x02AD9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4CF[] = { {"nis", 3, 0x022FC, 0}, {"trianglerighteq", 15, 0x022B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4D0[] = { {"ngeq", 4, 0x02271, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4D2[] = { {"cudarrl", 7, 0x02938, 0}, {"nges", 4, 0x02A7E, 0x00338}, {"niv", 3, 0x0220B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4D3[] = { {"SubsetEqual", 11, 0x02286, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4D4[] = { {"Gscr", 4, 0x1D4A2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4D5[] = { {"complexes", 9, 0x02102, 0}, {"eDDot", 5, 0x02A77, 0}, {"nvge", 4, 0x02265, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4D8[] = { {"cudarrr", 7, 0x02935, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4DA[] = { {"Popf", 4, 0x02119, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4DE[] = { {"LongRightArrow", 14, 0x027F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4DF[] = { {"supseteq", 8, 0x02287, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4E3[] = { {"dollar", 6, 0x00024, 0}, {"gnsim", 5, 0x022E7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4E4[] = { {"nvgt", 4, 0x0003E, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4E6[] = { {"Or", 2, 0x02A54, 0}, {"Vert", 4, 0x02016, 0}, {"lneqq", 5, 0x02268, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4E7[] = { {"nLeftrightarrow", 15, 0x021CE, 0}, {"nbump", 5, 0x0224E, 0x00338}, {"ntriangleright", 14, 0x022EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4E8[] = { {"ecir", 4, 0x02256, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4E9[] = { {"npolint", 7, 0x02A14, 0}, {"plus", 4, 0x0002B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4ED[] = { {"centerdot", 9, 0x000B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4F1[] = { {"zacute", 6, 0x0017A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4F7[] = { {"odiv", 4, 0x02A38, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4F9[] = { {"cap", 3, 0x02229, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4FB[] = { {"ensp", 4, 0x02002, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_4FE[] = { {"Afr", 3, 0x1D504, 0}, {"Pi", 2, 0x003A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_500[] = { {"iquest", 6, 0x000BF, 0}, {"ltri", 4, 0x025C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_504[] = { {"nlE", 3, 0x02266, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_506[] = { {"Phi", 3, 0x003A6, 0}, {"lambda", 6, 0x003BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_507[] = { {"Pr", 2, 0x02ABB, 0}, {"Vdashl", 6, 0x02AE6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_509[] = { {"SuchThat", 8, 0x0220B, 0}, {"Supset", 6, 0x022D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_50E[] = { {"Darr", 4, 0x021A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_50F[] = { {"Cdot", 4, 0x0010A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_513[] = { {"rcy", 3, 0x00440, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_516[] = { {"orderof", 7, 0x02134, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_518[] = { {"leqq", 4, 0x02266, 0}, {"precsim", 7, 0x0227E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_519[] = { {"RightTriangle", 13, 0x022B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_51B[] = { {"agrave", 6, 0x000E0, 0}, {"succnapprox", 11, 0x02ABA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_51C[] = { {"Tab", 3, 0x00009, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_524[] = { {"nle", 3, 0x02270, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_525[] = { {"spades", 6, 0x02660, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_526[] = { {"gtcc", 4, 0x02AA7, 0}, {"llcorner", 8, 0x0231E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_52F[] = { {"Oslash", 6, 0x000D8, 0}, {"Tau", 3, 0x003A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_530[] = { {"fopf", 4, 0x1D557, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_532[] = { {"Mellintrf", 9, 0x02133, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_533[] = { {"nlt", 3, 0x0226E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_534[] = { {"lparlt", 6, 0x02993, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_53B[] = { {"Ccaron", 6, 0x0010C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_53C[] = { {"Re", 2, 0x0211C, 0}, {"dstrok", 6, 0x00111, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_53F[] = { {"leftharpoondown", 15, 0x021BD, 0}, {"ssetmn", 6, 0x02216, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_542[] = { {"lrhard", 6, 0x0296D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_543[] = { {"reg", 3, 0x000AE, 0}, {"sharp", 5, 0x0266F, 0}, {"yicy", 4, 0x00457, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_545[] = { {"ShortUpArrow", 12, 0x02191, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_548[] = { {"plusacir", 8, 0x02A23, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_54F[] = { {"cent", 4, 0x000A2, 0}, {"natur", 5, 0x0266E, 0}, {"varphi", 6, 0x003D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_550[] = { {"lesg", 4, 0x022DA, 0x0FE00}, {"supnE", 5, 0x02ACC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_551[] = { {"ohbar", 5, 0x029B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_557[] = { {"NotLessGreater", 14, 0x02278, 0}, {"nleqslant", 9, 0x02A7D, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_55B[] = { {"Sc", 2, 0x02ABC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_55D[] = { {"NotSucceedsEqual", 16, 0x02AB0, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_55F[] = { {"DZcy", 4, 0x0040F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_564[] = { {"vartheta", 8, 0x003D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_565[] = { {"ltrie", 5, 0x022B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_566[] = { {"Otilde", 6, 0x000D5, 0}, {"ltrif", 5, 0x025C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_56C[] = { {"Lsh", 3, 0x021B0, 0}, {"hookleftarrow", 13, 0x021A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_56F[] = { {"rfr", 3, 0x1D52F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_570[] = { {"supne", 5, 0x0228B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_571[] = { {"Gopf", 4, 0x1D53E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_572[] = { {"UpEquilibrium", 13, 0x0296E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_575[] = { {"Tcy", 3, 0x00422, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_576[] = { {"ffilig", 6, 0x0FB03, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_577[] = { {"fork", 4, 0x022D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_578[] = { {"oplus", 5, 0x02295, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_57A[] = { {"nvle", 4, 0x02264, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_57B[] = { {"HilbertSpace", 12, 0x0210B, 0}, {"subedot", 7, 0x02AC3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_57C[] = { {"TripleDot", 9, 0x020DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_580[] = { {"sscr", 4, 0x1D4C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_582[] = { {"osol", 4, 0x02298, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_583[] = { {"plustwo", 7, 0x02A27, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_586[] = { {"LessGreater", 11, 0x02276, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_588[] = { {"lrarr", 5, 0x021C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_589[] = { {"nvlt", 4, 0x0003C, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_58D[] = { {"questeq", 7, 0x0225F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_58E[] = { {"LessTilde", 9, 0x02272, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_58F[] = { {"djcy", 4, 0x00452, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_590[] = { {"xoplus", 6, 0x02A01, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_595[] = { {"primes", 6, 0x02119, 0}, {"solb", 4, 0x029C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_596[] = { {"not", 3, 0x000AC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_59A[] = { {"angzarr", 7, 0x0237C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_59D[] = { {"nearr", 5, 0x02197, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_59F[] = { {"lowast", 6, 0x02217, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5A0[] = { {"cfr", 3, 0x1D520, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5A3[] = { {"ltcir", 5, 0x02A79, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5A6[] = { {"Ecy", 3, 0x0042D, 0}, {"gesdotol", 8, 0x02A84, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5A9[] = { {"longleftrightarrow", 18, 0x027F7, 0}, {"para", 4, 0x000B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5AC[] = { {"Uacute", 6, 0x000DA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5AD[] = { {"blank", 5, 0x02423, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5AE[] = { {"rho", 3, 0x003C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5B0[] = { {"dharl", 5, 0x021C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5B1[] = { {"rsquor", 6, 0x02019, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5B5[] = { {"NotSquareSubsetEqual", 20, 0x022E2, 0}, {"npr", 3, 0x02280, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5B6[] = { {"dharr", 5, 0x021C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5B7[] = { {"NewLine", 7, 0x0000A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5BB[] = { {"odot", 4, 0x02299, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5BC[] = { {"part", 4, 0x02202, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5BD[] = { {"cuvee", 5, 0x022CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5BF[] = { {"lesdoto", 7, 0x02A81, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5C0[] = { {"itilde", 6, 0x00129, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5C1[] = { {"Tscr", 4, 0x1D4AF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5C2[] = { {"nsubE", 5, 0x02AC5, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5C4[] = { {"ratio", 5, 0x02236, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5D0[] = { {"Conint", 6, 0x0222F, 0}, {"LeftDownVectorBar", 17, 0x02959, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5D1[] = { {"Tfr", 3, 0x1D517, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5D3[] = { {"fllig", 5, 0x0FB02, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5D5[] = { {"thksim", 6, 0x0223C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5D8[] = { {"Euml", 4, 0x000CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5D9[] = { {"chi", 3, 0x003C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5DB[] = { {"ncup", 4, 0x02A42, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5DD[] = { {"SOFTcy", 6, 0x0042C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5DF[] = { {"bnequiv", 7, 0x02261, 0x020E5}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5E2[] = { {"nsube", 5, 0x02288, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5E4[] = { {"mapstoleft", 10, 0x021A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5E7[] = { {"NotLessSlantEqual", 17, 0x02A7D, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5EA[] = { {"ldrushar", 8, 0x0294B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5ED[] = { {"Equilibrium", 11, 0x021CC, 0}, {"Uogon", 5, 0x00172, 0}, {"supsetneq", 9, 0x0228B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5F0[] = { {"Vbar", 4, 0x02AEB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5F3[] = { {"vnsub", 5, 0x02282, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5F6[] = { {"Square", 6, 0x025A1, 0}, {"lessapprox", 10, 0x02A85, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5F8[] = { {"And", 3, 0x02A53, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5FA[] = { {"gesdoto", 7, 0x02A82, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_5FD[] = { {"gap", 3, 0x02A86, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_601[] = { {"nsucc", 5, 0x02281, 0}, {"thicksim", 8, 0x0223C, 0}, {"vnsup", 5, 0x02283, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_602[] = { {"Efr", 3, 0x1D508, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_603[] = { {"Igrave", 6, 0x000CC, 0}, {"cir", 3, 0x025CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_606[] = { {"Xi", 2, 0x0039E, 0}, {"oacute", 6, 0x000F3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_609[] = { {"nsc", 3, 0x02281, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_60D[] = { {"uogon", 5, 0x00173, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_613[] = { {"rharul", 6, 0x0296C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_615[] = { {"RuleDelayed", 11, 0x029F4, 0}, {"apacir", 6, 0x02A6F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_617[] = { {"jscr", 4, 0x1D4BF, 0}, {"vcy", 3, 0x00432, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_61A[] = { {"barwed", 6, 0x02305, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_61D[] = { {"sopf", 4, 0x1D564, 0}, {"thkap", 5, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_61F[] = { {"lesseqgtr", 9, 0x022DA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_622[] = { {"rdquor", 6, 0x0201D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_624[] = { {"Lstrok", 6, 0x00141, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_626[] = { {"Product", 7, 0x0220F, 0}, {"sqsupe", 6, 0x02292, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_628[] = { {"awconint", 8, 0x02233, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_62C[] = { {"hearts", 6, 0x02665, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_630[] = { {"rlm", 3, 0x0200F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_632[] = { {"comma", 5, 0x0002C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_636[] = { {"PartialD", 8, 0x02202, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_63A[] = { {"wedbar", 6, 0x02A5F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_63C[] = { {"oline", 5, 0x0203E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_63D[] = { {"OverBracket", 11, 0x023B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_63E[] = { {"RBarr", 5, 0x02910, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_641[] = { {"uharl", 5, 0x021BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_642[] = { {"leftrightsquigarrow", 19, 0x021AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_645[] = { {"RightFloor", 10, 0x0230B, 0}, {"intprod", 7, 0x02A3C, 0}, {"vee", 3, 0x02228, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_646[] = { {"zigrarr", 7, 0x021DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_647[] = { {"uharr", 5, 0x021BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_648[] = { {"gcy", 3, 0x00433, 0}, {"varsubsetneq", 12, 0x0228A, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_649[] = { {"leqslant", 8, 0x02A7D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_64A[] = { {"Odblac", 6, 0x00150, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_651[] = { {"minus", 5, 0x02212, 0}, {"scpolint", 8, 0x02A13, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_652[] = { {"lrtri", 5, 0x022BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_653[] = { {"DiacriticalGrave", 16, 0x00060, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_655[] = { {"num", 3, 0x00023, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_657[] = { {"quest", 5, 0x0003F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_658[] = { {"Kscr", 4, 0x1D4A6, 0}, {"UnderBar", 8, 0x0005F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_659[] = { {"lsquo", 5, 0x02018, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_65C[] = { {"rArr", 4, 0x021D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_65E[] = { {"Topf", 4, 0x1D54B, 0}, {"heartsuit", 9, 0x02665, 0}, {"rBarr", 5, 0x0290F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_660[] = { {"emptyset", 8, 0x02205, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_669[] = { {"UnderParenthesis", 16, 0x023DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_670[] = { {"dotplus", 7, 0x02214, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_671[] = { {"Psi", 3, 0x003A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_672[] = { {"GJcy", 4, 0x00403, 0}, {"exist", 5, 0x02203, 0}, {"simplus", 7, 0x02A24, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_673[] = { {"vfr", 3, 0x1D533, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_676[] = { {"tprime", 6, 0x02034, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_678[] = { {"leftrightharpoons", 17, 0x021CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_679[] = { {"rbrksld", 7, 0x0298E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_67D[] = { {"Ecaron", 6, 0x0011A, 0}, {"gel", 3, 0x022DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_680[] = { {"capdot", 6, 0x02A40, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_682[] = { {"geq", 3, 0x02265, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_684[] = { {"LowerLeftArrow", 14, 0x02199, 0}, {"ges", 3, 0x02A7E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_685[] = { {"Colone", 6, 0x02A74, 0}, {"NotLessEqual", 12, 0x02270, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_68A[] = { {"nrarr", 5, 0x0219B, 0}, {"rbrkslu", 7, 0x02990, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_68C[] = { {"flat", 4, 0x0266D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_691[] = { {"there4", 6, 0x02234, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_693[] = { {"Gdot", 4, 0x00120, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_694[] = { {"ijlig", 5, 0x00133, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_696[] = { {"blacklozenge", 12, 0x029EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_699[] = { {"Zeta", 4, 0x00396, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6A3[] = { {"duarr", 5, 0x021F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6A4[] = { {"DotEqual", 8, 0x02250, 0}, {"dtdot", 5, 0x022F1, 0}, {"gfr", 3, 0x1D524, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6A8[] = { {"cirE", 4, 0x029C3, 0}, {"period", 6, 0x0002E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6A9[] = { {"lmoust", 6, 0x023B0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6AA[] = { {"Icy", 3, 0x00418, 0}, {"Rcaron", 6, 0x00158, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6AB[] = { {"LeftCeiling", 11, 0x02308, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6AE[] = { {"ascr", 4, 0x1D4B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6B0[] = { {"boxtimes", 8, 0x022A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6B4[] = { {"jopf", 4, 0x1D55B, 0}, {"ntriangleleft", 13, 0x022EA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6B6[] = { {"eqcolon", 7, 0x02255, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6B8[] = { {"rbbrk", 5, 0x02773, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6B9[] = { {"homtht", 6, 0x0223B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6BA[] = { {"ggg", 3, 0x022D9, 0}, {"seswar", 6, 0x02929, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6BC[] = { {"perp", 4, 0x022A5, 0}, {"shcy", 4, 0x00448, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6BF[] = { {"phone", 5, 0x0260E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C0[] = { {"NotDoubleVerticalBar", 20, 0x02226, 0}, {"ngtr", 4, 0x0226F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C4[] = { {"ThickSpace", 10, 0x0205F, 0x0200A}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C5[] = { {"ForAll", 6, 0x02200, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C6[] = { {"circ", 4, 0x002C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C7[] = { {"Verbar", 6, 0x02016, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C8[] = { {"cire", 4, 0x02257, 0}, {"lesges", 6, 0x02A93, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6C9[] = { {"slarr", 5, 0x02190, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6CC[] = { {"RightDownTeeVector", 18, 0x0295D, 0}, {"triangleq", 9, 0x0225C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6CE[] = { {"checkmark", 9, 0x02713, 0}, {"quot", 4, 0x00022, 0}, {"suplarr", 7, 0x0297B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6D1[] = { {"Backslash", 9, 0x02216, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6D2[] = { {"fallingdotseq", 13, 0x02252, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6D4[] = { {"swArr", 5, 0x021D9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6D5[] = { {"Xfr", 3, 0x1D51B, 0}, {"lbrke", 5, 0x0298B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6D9[] = { {"jmath", 5, 0x00237, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6DA[] = { {"lmoustache", 10, 0x023B0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6DB[] = { {"DownTee", 7, 0x022A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6DC[] = { {"reals", 5, 0x0211D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6DE[] = { {"quaternions", 11, 0x0210D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6E7[] = { {"vzigzag", 7, 0x0299A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6EB[] = { {"pound", 5, 0x000A3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6EE[] = { {"permil", 6, 0x02030, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6EF[] = { {"Bscr", 4, 0x0212C, 0}, {"lfisht", 6, 0x0297C, 0}, {"vartriangleleft", 15, 0x022B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6F5[] = { {"Kopf", 4, 0x1D542, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6F7[] = { {"Tilde", 5, 0x0223C, 0}, {"gtrarr", 6, 0x02978, 0}, {"lAarr", 5, 0x021DA, 0}, {"opar", 4, 0x029B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_6FB[] = { {"triangle", 8, 0x025B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_704[] = { {"lcaron", 6, 0x0013E, 0}, {"wscr", 4, 0x1D4CC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_705[] = { {"asympeq", 7, 0x0224D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_706[] = { {"Ifr", 3, 0x02111, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_707[] = { {"DoubleDot", 9, 0x000A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_709[] = { {"nVdash", 6, 0x022AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_70C[] = { {"hairsp", 6, 0x0200A, 0}, {"leftrightarrows", 15, 0x021C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_70E[] = { {"lbrace", 6, 0x0007B, 0}, {"rightarrow", 10, 0x02192, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_70F[] = { {"Dagger", 6, 0x02021, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_712[] = { {"rsh", 3, 0x021B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_714[] = { {"eqslantless", 11, 0x02A95, 0}, {"gnapprox", 8, 0x02A8A, 0}, {"lbrack", 6, 0x0005B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_715[] = { {"uHar", 4, 0x02963, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_717[] = { {"tilde", 5, 0x002DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_719[] = { {"complement", 10, 0x02201, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_71B[] = { {"zcy", 3, 0x00437, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_71E[] = { {"boxDL", 5, 0x02557, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_71F[] = { {"micro", 5, 0x000B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_723[] = { {"horbar", 6, 0x02015, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_724[] = { {"boxDR", 5, 0x02554, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_727[] = { {"bsolhsub", 8, 0x027C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_729[] = { {"ac", 2, 0x0223E, 0}, {"nvdash", 6, 0x022AC, 0}, {"precapprox", 10, 0x02AB7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_72C[] = { {"af", 2, 0x02061, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_72D[] = { {"bullet", 6, 0x02022, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_72E[] = { {"demptyv", 7, 0x029B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_733[] = { {"geqq", 4, 0x02267, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_734[] = { {"uuarr", 5, 0x021C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_735[] = { {"Ocirc", 5, 0x000D4, 0}, {"utdot", 5, 0x022F0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_736[] = { {"ap", 2, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_738[] = { {"bNot", 4, 0x02AED, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_73B[] = { {"CirclePlus", 10, 0x02295, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_73D[] = { {"glE", 3, 0x02A92, 0}, {"midcir", 6, 0x02AF0, 0}, {"rppolint", 8, 0x02A12, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_73E[] = { {"boxDl", 5, 0x02556, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_73F[] = { {"sdot", 4, 0x022C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_744[] = { {"boxDr", 5, 0x02553, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_745[] = { {"Xscr", 4, 0x1D4B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_749[] = { {"dlcrop", 6, 0x0230D, 0}, {"gtrless", 7, 0x02277, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_74B[] = { {"aopf", 4, 0x1D552, 0}, {"operp", 5, 0x029B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_74C[] = { {"kcy", 3, 0x0043A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_74F[] = { {"larrfs", 6, 0x0291D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_751[] = { {"rcub", 4, 0x0007D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_754[] = { {"nrtri", 5, 0x022EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_755[] = { {"nparsl", 6, 0x02AFD, 0x020E5}, {"ocirc", 5, 0x000F4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_759[] = { {"gla", 3, 0x02AA5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_75C[] = { {"Iuml", 4, 0x000CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_75F[] = { {"mcomma", 6, 0x02A29, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_762[] = { {"glj", 3, 0x02AA4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_763[] = { {"Map", 3, 0x02905, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_765[] = { {"copysr", 6, 0x02117, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_766[] = { {"DownTeeArrow", 12, 0x021A7, 0}, {"Upsi", 4, 0x003D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_768[] = { {"awint", 5, 0x02A11, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_76E[] = { {"DownRightVector", 15, 0x021C1, 0}, {"NotEqual", 8, 0x02260, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_770[] = { {"gesl", 4, 0x022DB, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_772[] = { {"NotCupCap", 9, 0x0226D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_776[] = { {"blacktriangleright", 18, 0x025B8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_777[] = { {"zfr", 3, 0x1D537, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_779[] = { {"leftrightarrow", 14, 0x02194, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_77A[] = { {"Abreve", 6, 0x00102, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_77F[] = { {"Uarr", 4, 0x0219F, 0}, {"gnE", 3, 0x02269, 0}, {"supmult", 7, 0x02AC2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_781[] = { {"supplus", 7, 0x02AC0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_783[] = { {"nabla", 5, 0x02207, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_787[] = { {"Lang", 4, 0x027EA, 0}, {"laquo", 5, 0x000AB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_789[] = { {"larrhk", 6, 0x021A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_78C[] = { {"Bopf", 4, 0x1D539, 0}, {"lowbar", 6, 0x0005F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_78D[] = { {"cup", 3, 0x0222A, 0}, {"dd", 2, 0x02146, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_78E[] = { {"nsce", 4, 0x02AB0, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_790[] = { {"nshortparallel", 14, 0x02226, 0}, {"nsupE", 5, 0x02AC6, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_794[] = { {"OpenCurlyQuote", 14, 0x02018, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_797[] = { {"bsolb", 5, 0x029C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_798[] = { {"DScy", 4, 0x00405, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_79A[] = { {"boxHD", 5, 0x02566, 0}, {"ltrPar", 6, 0x02996, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_79B[] = { {"nscr", 4, 0x1D4C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_79D[] = { {"lEg", 3, 0x02A8B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_79F[] = { {"egrave", 6, 0x000E8, 0}, {"gne", 3, 0x02A88, 0}, {"larrsim", 7, 0x02973, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7A0[] = { {"COPY", 4, 0x000A9, 0}, {"bdquo", 5, 0x0201E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7A1[] = { {"wopf", 4, 0x1D568, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7A2[] = { {"NotRightTriangleEqual", 21, 0x022ED, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7A5[] = { {"robrk", 5, 0x027E7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7A8[] = { {"kfr", 3, 0x1D528, 0}, {"nlsim", 5, 0x02274, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7AA[] = { {"xhArr", 5, 0x027FA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7AB[] = { {"boxHU", 5, 0x02569, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7AC[] = { {"lHar", 4, 0x02962, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7AE[] = { {"Mcy", 3, 0x0041C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7AF[] = { {"ee", 2, 0x02147, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7B0[] = { {"nsupe", 5, 0x02289, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7B1[] = { {"eg", 2, 0x02A9A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7B5[] = { {"trade", 5, 0x02122, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7B6[] = { {"el", 2, 0x02A99, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7B7[] = { {"nsucceq", 7, 0x02AB0, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7B8[] = { {"langle", 6, 0x027E8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7BA[] = { {"boxHd", 5, 0x02564, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7BB[] = { {"Subset", 6, 0x022D0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7BD[] = { {"DownArrowBar", 12, 0x02913, 0}, {"topbot", 6, 0x02336, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7BE[] = { {"OverBrace", 9, 0x023DE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7BF[] = { {"Eta", 3, 0x00397, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7C0[] = { {"hstrok", 6, 0x00127, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7C1[] = { {"Hacek", 5, 0x002C7, 0}, {"diamond", 7, 0x022C4, 0}, {"isinsv", 6, 0x022F3, 0}, {"rtriltri", 8, 0x029CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7C9[] = { {"nvltrie", 7, 0x022B4, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7CB[] = { {"boxHu", 5, 0x02567, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7CD[] = { {"fpartint", 8, 0x02A0D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7CE[] = { {"Proportional", 12, 0x0221D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7D1[] = { {"NotSuperset", 11, 0x02283, 0x020D2}, {"gE", 2, 0x02267, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7D2[] = { {"scnsim", 6, 0x022E9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7D5[] = { {"uparrow", 7, 0x02191, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7D6[] = { {"ltlarr", 6, 0x02976, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7D9[] = { {"rtimes", 6, 0x022CA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7DA[] = { {"ncong", 5, 0x02247, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7DC[] = { {"Oscr", 4, 0x1D4AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7E0[] = { {"vArr", 4, 0x021D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7E2[] = { {"Xopf", 4, 0x1D54F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7E4[] = { {"notinva", 7, 0x02209, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7E5[] = { {"notinvb", 7, 0x022F7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7E6[] = { {"notinvc", 7, 0x022F6, 0}, {"nsqsube", 7, 0x022E2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7EC[] = { {"Tcaron", 6, 0x00164, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7EF[] = { {"upsilon", 7, 0x003C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7F1[] = { {"ge", 2, 0x02265, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7F3[] = { {"gg", 2, 0x0226B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7F6[] = { {"KJcy", 4, 0x0040C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7F8[] = { {"gl", 2, 0x02277, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7FB[] = { {"dblac", 5, 0x002DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_7FC[] = { {"lAtail", 6, 0x0291B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_800[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_802[] = { {"lotimes", 7, 0x02A34, 0}, {"seArr", 5, 0x021D8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_803[] = { {"Lacute", 6, 0x00139, 0}, {"Laplacetrf", 10, 0x02112, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_808[] = { {"uuml", 4, 0x000FC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_809[] = { {"Amacr", 5, 0x00100, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_80A[] = { {"Mfr", 3, 0x1D510, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_810[] = { {"Int", 3, 0x0222C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_811[] = { {"Vvdash", 6, 0x022AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_812[] = { {"Lcedil", 6, 0x0013B, 0}, {"larrlp", 6, 0x021AB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_816[] = { {"Larr", 4, 0x0219E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_819[] = { {"CircleTimes", 11, 0x02297, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_81C[] = { {"NotReverseElement", 17, 0x0220C, 0}, {"latail", 6, 0x02919, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_81D[] = { {"ntrianglerighteq", 16, 0x022ED, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_821[] = { {"blk12", 5, 0x02592, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_822[] = { {"intlarhk", 8, 0x02A17, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_823[] = { {"blk14", 5, 0x02591, 0}, {"ccupssm", 7, 0x02A50, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_824[] = { {"hercon", 6, 0x022B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_828[] = { {"bigotimes", 9, 0x02A02, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_829[] = { {"amacr", 5, 0x00101, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_82D[] = { {"nrarrc", 6, 0x02933, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_82E[] = { {"ubreve", 6, 0x0016D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_830[] = { {"Yacute", 6, 0x000DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_831[] = { {"ic", 2, 0x02063, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_832[] = { {"escr", 4, 0x0212F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_837[] = { {"ii", 2, 0x02148, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_838[] = { {"DownArrowUpArrow", 16, 0x021F5, 0}, {"nopf", 4, 0x1D55F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_83C[] = { {"in", 2, 0x02208, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_83E[] = { {"bumpE", 5, 0x02AAE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_83F[] = { {"rightharpoonup", 14, 0x021C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_841[] = { {"nrarrw", 6, 0x0219D, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_842[] = { {"it", 2, 0x02062, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_846[] = { {"ncaron", 6, 0x00148, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_84A[] = { {"succnsim", 8, 0x022E9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_84C[] = { {"gammad", 6, 0x003DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_84F[] = { {"yucy", 4, 0x0044E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_850[] = { {"ocy", 3, 0x0043E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_855[] = { {"hybull", 6, 0x02043, 0}, {"rpargt", 6, 0x02994, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_857[] = { {"csube", 5, 0x02AD1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_85B[] = { {"iiota", 5, 0x02129, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_85C[] = { {"nsim", 4, 0x02241, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_85E[] = { {"LeftTriangleEqual", 17, 0x022B4, 0}, {"bumpe", 5, 0x0224F, 0}, {"nearhk", 6, 0x02924, 0}, {"nhpar", 5, 0x02AF2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_861[] = { {"risingdotseq", 12, 0x02253, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_865[] = { {"blk34", 5, 0x02593, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_866[] = { {"LeftTriangle", 12, 0x022B2, 0}, {"vBarv", 5, 0x02AE9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_867[] = { {"AElig", 5, 0x000C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_868[] = { {"DoubleUpDownArrow", 17, 0x021D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_86A[] = { {"cwint", 5, 0x02231, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_86B[] = { {"rtrie", 5, 0x022B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_86C[] = { {"rtrif", 5, 0x025B8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_873[] = { {"Fscr", 4, 0x02131, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_876[] = { {"lE", 2, 0x02266, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_879[] = { {"Oopf", 4, 0x1D546, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_87B[] = { {"spar", 4, 0x02225, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_87E[] = { {"uplus", 5, 0x0228E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_88A[] = { {"sacute", 6, 0x0015B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_88C[] = { {"fltns", 5, 0x025B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_88E[] = { {"rrarr", 5, 0x021C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_892[] = { {"larrpl", 6, 0x02939, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_895[] = { {"ultri", 5, 0x025F8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_896[] = { {"le", 2, 0x02264, 0}, {"xuplus", 6, 0x02A04, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_897[] = { {"ljcy", 4, 0x00459, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_898[] = { {"lg", 2, 0x02276, 0}, {"vsubnE", 6, 0x02ACB, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_899[] = { {"scedil", 6, 0x0015F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_89D[] = { {"ll", 2, 0x0226A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8A5[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8AC[] = { {"ofr", 3, 0x1D52C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8B3[] = { {"nexists", 7, 0x02204, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8B6[] = { {"smallsetminus", 13, 0x02216, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8B7[] = { {"InvisibleComma", 14, 0x02063, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8B8[] = { {"dotminus", 8, 0x02238, 0}, {"vsubne", 6, 0x0228A, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8B9[] = { {"iocy", 4, 0x00451, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8BA[] = { {"gsime", 5, 0x02A8E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8BC[] = { {"Rarrtl", 6, 0x02916, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8BD[] = { {"cirmid", 6, 0x02AEF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8C0[] = { {"ominus", 6, 0x02296, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8C1[] = { {"gsiml", 5, 0x02A90, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8C2[] = { {"Prime", 5, 0x02033, 0}, {"mp", 2, 0x02213, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8C4[] = { {"tint", 4, 0x0222D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8C7[] = { {"mu", 2, 0x003BC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8CF[] = { {"dbkarow", 7, 0x0290F, 0}, {"eopf", 4, 0x1D556, 0}, {"ogt", 3, 0x029C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8D0[] = { {"Precedes", 8, 0x0227A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8D3[] = { {"UpTeeArrow", 10, 0x021A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8D6[] = { {"varsupsetneq", 12, 0x0228B, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8D8[] = { {"ne", 2, 0x02260, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8DC[] = { {"ni", 2, 0x0220B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8DD[] = { {"mDDot", 5, 0x0223A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8DE[] = { {"cularrp", 7, 0x0293D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8DF[] = { {"rnmid", 5, 0x02AEE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8E0[] = { {"hardcy", 6, 0x0044A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8E2[] = { {"prime", 5, 0x02032, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8E3[] = { {"Bcy", 3, 0x00411, 0}, {"REG", 3, 0x000AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8E7[] = { {"oS", 2, 0x024C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8E8[] = { {"nu", 2, 0x003BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8E9[] = { {"ohm", 3, 0x003A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8EB[] = { {"langd", 5, 0x02991, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8F3[] = { {"backprime", 9, 0x02035, 0}, {"esim", 4, 0x02242, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8FB[] = { {"veeeq", 5, 0x0225A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8FE[] = { {"RightCeiling", 12, 0x02309, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_8FF[] = { {"crarr", 5, 0x021B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_904[] = { {"eqsim", 5, 0x02242, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_906[] = { {"or", 2, 0x02228, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_907[] = { {"OverParenthesis", 15, 0x023DC, 0}, {"UpperLeftArrow", 14, 0x02196, 0}, {"nleftrightarrow", 15, 0x021AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_909[] = { {"expectation", 11, 0x02130, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_90C[] = { {"coprod", 6, 0x02210, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_90E[] = { {"Qfr", 3, 0x1D514, 0}, {"dArr", 4, 0x021D3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_910[] = { {"Fopf", 4, 0x1D53D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_913[] = { {"Cconint", 7, 0x02230, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_916[] = { {"larrtl", 6, 0x021A2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_918[] = { {"Aacute", 6, 0x000C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_919[] = { {"DownLeftRightVector", 19, 0x02950, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_91B[] = { {"circleddash", 11, 0x0229D, 0}, {"thinsp", 6, 0x02009, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_91E[] = { {"Longrightarrow", 14, 0x027F9, 0}, {"pi", 2, 0x003C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_91F[] = { {"hookrightarrow", 14, 0x021AA, 0}, {"rscr", 4, 0x1D4C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_920[] = { {"scE", 3, 0x02AB4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_922[] = { {"pm", 2, 0x000B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_923[] = { {"ZHcy", 4, 0x00416, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_927[] = { {"pr", 2, 0x0227A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_929[] = { {"LongLeftRightArrow", 18, 0x027F7, 0}, {"supset", 6, 0x02283, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_92A[] = { {"UpArrowBar", 10, 0x02912, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_92C[] = { {"Utilde", 6, 0x00168, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_92E[] = { {"xlArr", 5, 0x027F8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_930[] = { {"DoubleUpArrow", 13, 0x021D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_936[] = { {"alefsym", 7, 0x02135, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_939[] = { {"Scirc", 5, 0x0015C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_93B[] = { {"xotime", 6, 0x02A02, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_93F[] = { {"Bfr", 3, 0x1D505, 0}, {"rdca", 4, 0x02937, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_940[] = { {"sce", 3, 0x02AB0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_945[] = { {"Nacute", 6, 0x00143, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_947[] = { {"amalg", 5, 0x02A3F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_94D[] = { {"UpDownArrow", 11, 0x02195, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_94F[] = { {"EqualTilde", 10, 0x02242, 0}, {"boxUL", 5, 0x0255D, 0}, {"oslash", 6, 0x000F8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_950[] = { {"lnap", 4, 0x02A89, 0}, {"thorn", 5, 0x000FE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_952[] = { {"ssmile", 6, 0x02323, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_953[] = { {"ndash", 5, 0x02013, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_954[] = { {"Ncedil", 6, 0x00145, 0}, {"scy", 3, 0x00441, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_955[] = { {"boxUR", 5, 0x0255A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_956[] = { {"Aring", 5, 0x000C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_959[] = { {"scirc", 5, 0x0015D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_95B[] = { {"ccaron", 6, 0x0010D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_95D[] = { {"dotsquare", 9, 0x022A1, 0}, {"nshortmid", 9, 0x02224, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_95F[] = { {"rsquo", 5, 0x02019, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_960[] = { {"Sscr", 4, 0x1D4AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_963[] = { {"bigwedge", 8, 0x022C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_964[] = { {"Bernoullis", 10, 0x0212C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_969[] = { {"harrw", 5, 0x021AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_96C[] = { {"SquareSubset", 12, 0x0228F, 0}, {"boxVH", 5, 0x0256C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_96F[] = { {"boxUl", 5, 0x0255C, 0}, {"rx", 2, 0x0211E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_970[] = { {"boxVL", 5, 0x02563, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_974[] = { {"olt", 3, 0x029C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_975[] = { {"boxUr", 5, 0x02559, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_976[] = { {"aring", 5, 0x000E5, 0}, {"boxVR", 5, 0x02560, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_97B[] = { {"sc", 2, 0x0227B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_97C[] = { {"NestedGreaterGreater", 20, 0x0226B, 0}, {"oast", 4, 0x0229B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_97F[] = { {"star", 4, 0x02606, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_981[] = { {"LeftTeeVector", 13, 0x0295A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_983[] = { {"bigsqcup", 8, 0x02A06, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_985[] = { {"dcy", 3, 0x00434, 0}, {"preceq", 6, 0x02AAF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_986[] = { {"otilde", 6, 0x000F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_988[] = { {"luruhar", 7, 0x02966, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_98C[] = { {"boxVh", 5, 0x0256B, 0}, {"capand", 6, 0x02A44, 0}, {"yuml", 4, 0x000FF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_98D[] = { {"Updownarrow", 11, 0x021D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_98F[] = { {"TildeEqual", 10, 0x02243, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_990[] = { {"boxVl", 5, 0x02562, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_996[] = { {"boxVr", 5, 0x0255F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_997[] = { {"HorizontalLine", 14, 0x02500, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_99B[] = { {"xmap", 4, 0x027FC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_99C[] = { {"sigmaf", 6, 0x003C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_99E[] = { {"EmptySmallSquare", 16, 0x025FB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_99F[] = { {"dzcy", 4, 0x0045F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9A0[] = { {"cups", 4, 0x0222A, 0x0FE00}, {"zwj", 3, 0x0200D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9A1[] = { {"beta", 4, 0x003B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9A6[] = { {"supsim", 6, 0x02AC8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9A8[] = { {"beth", 4, 0x02136, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9AA[] = { {"Iukcy", 5, 0x00406, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9AC[] = { {"eparsl", 6, 0x029E3, 0}, {"sigmav", 6, 0x003C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9B0[] = { {"lhard", 5, 0x021BD, 0}, {"sfr", 3, 0x1D530, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9B4[] = { {"nsqsupe", 7, 0x022E3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9B5[] = { {"Jsercy", 6, 0x00408, 0}, {"deg", 3, 0x000B0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9B6[] = { {"Ucy", 3, 0x00423, 0}, {"iscr", 4, 0x1D4BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9B7[] = { {"efDot", 5, 0x02252, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9BB[] = { {"uhblk", 5, 0x02580, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9BC[] = { {"ropf", 4, 0x1D563, 0}, {"vprop", 5, 0x0221D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9BD[] = { {"isinE", 5, 0x022F9, 0}, {"raemptyv", 8, 0x029B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9C1[] = { {"lharu", 5, 0x021BC, 0}, {"ncongdot", 8, 0x02A6D, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9C2[] = { {"subnE", 5, 0x02ACB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9C3[] = { {"ngsim", 5, 0x02275, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9C5[] = { {"starf", 5, 0x02605, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9C9[] = { {"Ograve", 6, 0x000D2, 0}, {"hksearow", 8, 0x02925, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9CA[] = { {"iukcy", 5, 0x00456, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9CC[] = { {"uacute", 6, 0x000FA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9CF[] = { {"asymp", 5, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9D5[] = { {"lneq", 4, 0x02A87, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9D6[] = { {"Otimes", 6, 0x02A37, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9DA[] = { {"NotTildeTilde", 13, 0x02249, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9DB[] = { {"Integral", 8, 0x0222B, 0}, {"rbrke", 5, 0x0298C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9DD[] = { {"nsub", 4, 0x02284, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9DE[] = { {"rlhar", 5, 0x021CC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9E1[] = { {"dfr", 3, 0x1D521, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9E2[] = { {"subne", 5, 0x0228A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9E5[] = { {"varnothing", 10, 0x02205, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9E7[] = { {"Fcy", 3, 0x00424, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9E9[] = { {"DoubleLeftTee", 13, 0x02AE4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9EB[] = { {"isins", 5, 0x022F4, 0}, {"nsup", 4, 0x02285, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9ED[] = { {"circlearrowleft", 15, 0x021BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9EE[] = { {"isinv", 5, 0x02208, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9EF[] = { {"IEcy", 4, 0x00415, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F0[] = { {"conint", 6, 0x0222E, 0}, {"vBar", 4, 0x02AE8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F1[] = { {"edot", 4, 0x00117, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F2[] = { {"Kappa", 5, 0x0039A, 0}, {"MediumSpace", 11, 0x0205F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F3[] = { {"lbrksld", 7, 0x0298F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F4[] = { {"sect", 4, 0x000A7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F5[] = { {"nldr", 4, 0x02025, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F7[] = { {"Jscr", 4, 0x1D4A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9F9[] = { {"shy", 3, 0x000AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9FA[] = { {"ulcrop", 6, 0x0230F, 0}, {"veebar", 6, 0x022BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_9FD[] = { {"Sopf", 4, 0x1D54A, 0}, {"cuwed", 5, 0x022CF, 0}, {"rAarr", 5, 0x021DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A01[] = { {"erarr", 5, 0x02971, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A04[] = { {"lbrkslu", 7, 0x0298D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A05[] = { {"NotSucceeds", 11, 0x02281, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A06[] = { {"nsccue", 6, 0x022E1, 0}, {"subrarr", 7, 0x02979, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A08[] = { {"looparrowright", 14, 0x021AC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A0C[] = { {"wp", 2, 0x02118, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A0D[] = { {"Emacr", 5, 0x00112, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A0E[] = { {"sim", 3, 0x0223C, 0}, {"wr", 2, 0x02240, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A10[] = { {"Udblac", 6, 0x00170, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A12[] = { {"Ufr", 3, 0x1D518, 0}, {"kappa", 5, 0x003BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A14[] = { {"notindot", 8, 0x022F5, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A15[] = { {"nleq", 4, 0x02270, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A16[] = { {"NestedLessLess", 14, 0x0226A, 0}, {"square", 6, 0x025A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A17[] = { {"nles", 4, 0x02A7D, 0x00338}, {"squarf", 6, 0x025AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A21[] = { {"order", 5, 0x02134, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A23[] = { {"igrave", 6, 0x000EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A24[] = { {"precneqq", 8, 0x02AB5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A25[] = { {"csupe", 5, 0x02AD2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A26[] = { {"xi", 2, 0x003BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A28[] = { {"NotHumpEqual", 12, 0x0224F, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A2A[] = { {"ord", 3, 0x02A5D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A2D[] = { {"emacr", 5, 0x00113, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A30[] = { {"nwnear", 6, 0x02927, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A32[] = { {"nprcue", 6, 0x022E0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A36[] = { {"NotExists", 9, 0x02204, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A37[] = { {"die", 3, 0x000A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A39[] = { {"ddotseq", 7, 0x02A77, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A3B[] = { {"Dashv", 5, 0x02AE4, 0}, {"Ucirc", 5, 0x000DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A3C[] = { {"orv", 3, 0x02A5B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A3D[] = { {"Because", 7, 0x02235, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A41[] = { {"kgreen", 6, 0x00138, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A43[] = { {"Ffr", 3, 0x1D509, 0}, {"LeftVector", 10, 0x021BC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A44[] = { {"lstrok", 6, 0x00142, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A45[] = { {"twixt", 5, 0x0226C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A48[] = { {"compfn", 6, 0x02218, 0}, {"div", 3, 0x000F7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A4F[] = { {"drcrop", 6, 0x0230C, 0}, {"shortmid", 8, 0x02223, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A53[] = { {"iopf", 4, 0x1D55A, 0}, {"triangledown", 12, 0x025BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A54[] = { {"IJlig", 5, 0x00132, 0}, {"thetasym", 8, 0x003D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A56[] = { {"Sigma", 5, 0x003A3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A57[] = { {"equivDD", 7, 0x02A78, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A5A[] = { {"Cacute", 6, 0x00106, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A5B[] = { {"dashv", 5, 0x022A3, 0}, {"ucirc", 5, 0x000FB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A61[] = { {"gneqq", 5, 0x02269, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A62[] = { {"gvertneqq", 9, 0x02269, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A63[] = { {"RightDownVectorBar", 18, 0x02955, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A64[] = { {"NotLessLess", 11, 0x0226A, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A69[] = { {"Ccedil", 6, 0x000C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A6A[] = { {"odblac", 6, 0x00151, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A6B[] = { {"mstpos", 6, 0x0223E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A6D[] = { {"cemptyv", 7, 0x029B2, 0}, {"rarrap", 6, 0x02975, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A6F[] = { {"rmoust", 6, 0x023B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A70[] = { {"elsdot", 6, 0x02A97, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A76[] = { {"sigma", 5, 0x003C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A78[] = { {"Implies", 7, 0x021D2, 0}, {"isin", 4, 0x02208, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A7A[] = { {"bottom", 6, 0x022A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A7E[] = { {"ShortRightArrow", 15, 0x02192, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A81[] = { {"cupcap", 6, 0x02A46, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A82[] = { {"NotSquareSuperset", 17, 0x02290, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A84[] = { {"LeftArrowRightArrow", 19, 0x021C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A85[] = { {"FilledVerySmallSquare", 21, 0x025AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A86[] = { {"LeftUpTeeVector", 15, 0x02960, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A89[] = { {"DoubleRightArrow", 16, 0x021D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A8D[] = { {"raquo", 5, 0x000BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A8E[] = { {"Ascr", 4, 0x1D49C, 0}, {"ReverseUpEquilibrium", 20, 0x0296F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A92[] = { {"hArr", 4, 0x021D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A94[] = { {"Jopf", 4, 0x1D541, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A96[] = { {"npar", 4, 0x02226, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A98[] = { {"SupersetEqual", 13, 0x02287, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A99[] = { {"ffllig", 6, 0x0FB04, 0}, {"smt", 3, 0x02AAA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A9A[] = { {"twoheadrightarrow", 17, 0x021A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A9D[] = { {"ecaron", 6, 0x0011B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_A9F[] = { {"NotRightTriangleBar", 19, 0x029D0, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AA3[] = { {"apid", 4, 0x0224B, 0}, {"vscr", 4, 0x1D4CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AA4[] = { {"supdot", 6, 0x02ABE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AA5[] = { {"colone", 6, 0x02254, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AA7[] = { {"dwangle", 7, 0x029A6, 0}, {"shchcy", 6, 0x00449, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AAC[] = { {"ltdot", 5, 0x022D6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AB2[] = { {"downharpoonright", 16, 0x021C2, 0}, {"gjcy", 4, 0x00453, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AB4[] = { {"wfr", 3, 0x1D534, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AB5[] = { {"rfisht", 6, 0x0297D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ABA[] = { {"Ycy", 3, 0x0042B, 0}, {"swarrow", 7, 0x02199, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AC0[] = { {"nharr", 5, 0x021AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AC4[] = { {"frac12", 6, 0x000BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AC5[] = { {"frac13", 6, 0x02153, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AC6[] = { {"frac14", 6, 0x000BC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AC7[] = { {"GreaterEqual", 12, 0x02265, 0}, {"frac15", 6, 0x02155, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AC8[] = { {"Gamma", 5, 0x00393, 0}, {"frac16", 6, 0x02159, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ACA[] = { {"dzigrarr", 8, 0x027FF, 0}, {"frac18", 6, 0x0215B, 0}, {"rcaron", 6, 0x00159, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ACC[] = { {"DownRightTeeVector", 18, 0x0295F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ACF[] = { {"nvrtrie", 7, 0x022B5, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AD2[] = { {"iota", 4, 0x003B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AD3[] = { {"sol", 3, 0x0002F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AD4[] = { {"rbrace", 6, 0x0007D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ADA[] = { {"rbrack", 6, 0x0005D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ADD[] = { {"rsqb", 4, 0x0005D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ADF[] = { {"oint", 4, 0x0222E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AE4[] = { {"Wscr", 4, 0x1D4B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AE5[] = { {"hfr", 3, 0x1D525, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AE6[] = { {"frac23", 6, 0x02154, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AE7[] = { {"dlcorn", 6, 0x0231E, 0}, {"verbar", 6, 0x0007C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AE8[] = { {"frac25", 6, 0x02156, 0}, {"gamma", 5, 0x003B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AE9[] = { {"nVDash", 6, 0x022AF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AEB[] = { {"Jcy", 3, 0x00419, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AF5[] = { {"nwarrow", 7, 0x02196, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AF6[] = { {"OverBar", 7, 0x0203E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AF7[] = { {"rightsquigarrow", 15, 0x0219D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AFA[] = { {"iexcl", 5, 0x000A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AFD[] = { {"sqcap", 5, 0x02293, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_AFE[] = { {"pertenk", 7, 0x02031, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B08[] = { {"PrecedesEqual", 13, 0x02AAF, 0}, {"frac34", 6, 0x000BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B09[] = { {"Therefore", 9, 0x02234, 0}, {"frac35", 6, 0x02157, 0}, {"nvDash", 6, 0x022AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B0A[] = { {"odsold", 6, 0x029BC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B0C[] = { {"dot", 3, 0x002D9, 0}, {"frac38", 6, 0x0215C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B10[] = { {"sqcaps", 6, 0x02293, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B11[] = { {"ZeroWidthSpace", 14, 0x0200B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B15[] = { {"rarrfs", 6, 0x0291E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B16[] = { {"Yfr", 3, 0x1D51C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B1E[] = { {"CircleDot", 9, 0x02299, 0}, {"gtcir", 5, 0x02A7A, 0}, {"squ", 3, 0x025A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B1F[] = { {"angmsd", 6, 0x02221, 0}, {"nsubseteq", 9, 0x02288, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B23[] = { {"iprod", 5, 0x02A3C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B24[] = { {"bprime", 6, 0x02035, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B27[] = { {"supsub", 6, 0x02AD4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B29[] = { {"SquareSupersetEqual", 19, 0x02292, 0}, {"therefore", 9, 0x02234, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B2A[] = { {"frac45", 6, 0x02158, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B2B[] = { {"Aopf", 4, 0x1D538, 0}, {"NotGreaterFullEqual", 19, 0x02267, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B2C[] = { {"Tstrok", 6, 0x00166, 0}, {"rightleftarrows", 15, 0x021C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B2D[] = { {"Fouriertrf", 10, 0x02131, 0}, {"epar", 4, 0x022D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B2E[] = { {"omid", 4, 0x029B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B2F[] = { {"OpenCurlyDoubleQuote", 20, 0x0201C, 0}, {"dagger", 6, 0x02020, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B33[] = { {"semi", 4, 0x0003B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B35[] = { {"supsup", 6, 0x02AD6, 0}, {"zeetrf", 6, 0x02128, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B36[] = { {"DifferentialD", 13, 0x02146, 0}, {"topcir", 6, 0x02AF1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B3A[] = { {"mscr", 4, 0x1D4C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B3D[] = { {"Wcirc", 5, 0x00174, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B3E[] = { {"boxdL", 5, 0x02555, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B40[] = { {"Gbreve", 6, 0x0011E, 0}, {"vopf", 4, 0x1D567, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B42[] = { {"lap", 3, 0x02A85, 0}, {"llarr", 5, 0x021C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B44[] = { {"boxdR", 5, 0x02552, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B46[] = { {"RightAngleBracket", 17, 0x027E9, 0}, {"lat", 3, 0x02AAB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B47[] = { {"Jfr", 3, 0x1D50D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B4C[] = { {"frac56", 6, 0x0215A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B4E[] = { {"frac58", 6, 0x0215D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B4F[] = { {"rarrhk", 6, 0x021AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B50[] = { {"lesdot", 6, 0x02A7F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B51[] = { {"ApplyFunction", 13, 0x02061, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B52[] = { {"NotGreaterTilde", 15, 0x02275, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B53[] = { {"Cedilla", 7, 0x000B8, 0}, {"curvearrowright", 15, 0x021B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B56[] = { {"rdsh", 4, 0x021B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B58[] = { {"larrb", 5, 0x021E4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B5C[] = { {"vrtri", 5, 0x022B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B5D[] = { {"nequiv", 6, 0x02262, 0}, {"wcirc", 5, 0x00175, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B5E[] = { {"boxdl", 5, 0x02510, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B63[] = { {"DoubleDownArrow", 15, 0x021D3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B64[] = { {"boxdr", 5, 0x0250C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B67[] = { {"pluscir", 7, 0x02A22, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B69[] = { {"longmapsto", 10, 0x027FC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B6B[] = { {"gnap", 4, 0x02A8A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B6D[] = { {"bigodot", 7, 0x02A00, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B72[] = { {"thickapprox", 11, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B73[] = { {"DotDot", 6, 0x020DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B77[] = { {"incare", 6, 0x02105, 0}, {"rarrbfs", 7, 0x02920, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B78[] = { {"apos", 4, 0x00027, 0}, {"tbrk", 4, 0x023B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B7A[] = { {"grave", 5, 0x00060, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B7B[] = { {"Nscr", 4, 0x1D4A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B7E[] = { {"rangle", 6, 0x027E9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B7F[] = { {"uArr", 4, 0x021D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B81[] = { {"Wopf", 4, 0x1D54E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B82[] = { {"doteq", 5, 0x02250, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B87[] = { {"times", 5, 0x000D7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B8D[] = { {"fflig", 5, 0x0FB00, 0}, {"lcy", 3, 0x0043B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B8F[] = { {"sub", 3, 0x02282, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B90[] = { {"frac78", 6, 0x0215E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B94[] = { {"xrarr", 5, 0x027F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B98[] = { {"UpArrowDownArrow", 16, 0x021C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B99[] = { {"bbrktbrk", 8, 0x023B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B9A[] = { {"abreve", 6, 0x00103, 0}, {"lsaquo", 6, 0x02039, 0}, {"sum", 3, 0x02211, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B9C[] = { {"Eacute", 6, 0x000C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_B9D[] = { {"sup", 3, 0x02283, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BA5[] = { {"ContourIntegral", 15, 0x0222E, 0}, {"DiacriticalDot", 14, 0x002D9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BA9[] = { {"trisb", 5, 0x029CD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BAE[] = { {"Hcirc", 5, 0x00124, 0}, {"lceil", 5, 0x02308, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BB2[] = { {"Zcaron", 6, 0x0017D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BB5[] = { {"looparrowleft", 13, 0x021AB, 0}, {"oelig", 5, 0x00153, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BB6[] = { {"LessSlantEqual", 14, 0x02A7D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BB7[] = { {"NegativeThinSpace", 17, 0x0200B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BBA[] = { {"boxhD", 5, 0x02565, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BBC[] = { {"omicron", 7, 0x003BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BBD[] = { {"leg", 3, 0x022DA, 0}, {"rightthreetimes", 15, 0x022CC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BBF[] = { {"NotSucceedsSlantEqual", 21, 0x022E1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC1[] = { {"angmsdaa", 8, 0x029A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC2[] = { {"angmsdab", 8, 0x029A9, 0}, {"rAtail", 6, 0x0291C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC3[] = { {"angmsdac", 8, 0x029AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC4[] = { {"angmsdad", 8, 0x029AB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC5[] = { {"angmsdae", 8, 0x029AC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC6[] = { {"angmsdaf", 8, 0x029AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC7[] = { {"angmsdag", 8, 0x029AE, 0}, {"leq", 3, 0x02264, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC8[] = { {"angmsdah", 8, 0x029AF, 0}, {"solbar", 6, 0x0233F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BC9[] = { {"Racute", 6, 0x00154, 0}, {"les", 3, 0x02A7D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BCB[] = { {"boxhU", 5, 0x02568, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BCE[] = { {"hcirc", 5, 0x00125, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BD1[] = { {"dscr", 4, 0x1D4B9, 0}, {"smashp", 6, 0x02A33, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BD7[] = { {"mopf", 4, 0x1D55E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BD8[] = { {"Rcedil", 6, 0x00156, 0}, {"dscy", 4, 0x00455, 0}, {"prap", 4, 0x02AB7, 0}, {"rarrlp", 6, 0x021AC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BD9[] = { {"Aogon", 5, 0x00104, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BDA[] = { {"boxhd", 5, 0x0252C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BDB[] = { {"subset", 6, 0x02282, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BDD[] = { {"lgE", 3, 0x02A91, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BDF[] = { {"epsilon", 7, 0x003B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BE1[] = { {"curarrm", 7, 0x0293C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BE2[] = { {"ratail", 6, 0x0291A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BE4[] = { {"DoubleLongLeftRightArrow", 24, 0x027FA, 0}, {"rhov", 4, 0x003F1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BE7[] = { {"LeftDoubleBracket", 17, 0x027E6, 0}, {"Lleftarrow", 10, 0x021DA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BE8[] = { {"Uuml", 4, 0x000DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BE9[] = { {"lfr", 3, 0x1D529, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BEA[] = { {"minusdu", 7, 0x02A2A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BEB[] = { {"boxhu", 5, 0x02534, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BEF[] = { {"Ncy", 3, 0x0041D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BF0[] = { {"gneq", 4, 0x02A88, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BF1[] = { {"rangd", 5, 0x02992, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BF2[] = { {"range", 5, 0x029A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BF3[] = { {"lfloor", 6, 0x0230A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BF7[] = { {"NotSucceedsTilde", 16, 0x0227F, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BF9[] = { {"aogon", 5, 0x00105, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BFA[] = { {"NotGreaterSlantEqual", 20, 0x02A7E, 0x00338}, {"NotSquareSupersetEqual", 22, 0x022E3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_BFC[] = { {"profsurf", 8, 0x02313, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C02[] = { {"wedgeq", 6, 0x02259, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C0B[] = { {"Alpha", 5, 0x00391, 0}, {"DiacriticalDoubleAcute", 22, 0x002DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C0C[] = { {"lltri", 5, 0x025FA, 0}, {"tcaron", 6, 0x00165, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C11[] = { {"Imacr", 5, 0x0012A, 0}, {"subseteq", 8, 0x02286, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C12[] = { {"Escr", 4, 0x02130, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C16[] = { {"lArr", 4, 0x021D0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C18[] = { {"Nopf", 4, 0x02115, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C1A[] = { {"rpar", 4, 0x00029, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C1D[] = { {"divonx", 6, 0x022C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C1E[] = { {"olcir", 5, 0x029BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C23[] = { {"lacute", 6, 0x0013A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C27[] = { {"zscr", 4, 0x1D4CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C2B[] = { {"alpha", 5, 0x003B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C31[] = { {"imacr", 5, 0x0012B, 0}, {"vellip", 6, 0x022EE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C32[] = { {"lcedil", 6, 0x0013C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C33[] = { {"sime", 4, 0x02243, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C34[] = { {"empty", 5, 0x02205, 0}, {"imped", 5, 0x001B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C35[] = { {"simg", 4, 0x02A9E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C36[] = { {"kjcy", 4, 0x0045C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C3A[] = { {"siml", 4, 0x02A9D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C3E[] = { {"LessEqualGreater", 16, 0x022DA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C3F[] = { {"Ycirc", 5, 0x00176, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C40[] = { {"RoundImplies", 12, 0x02970, 0}, {"nvrArr", 6, 0x02903, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C43[] = { {"check", 5, 0x02713, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C44[] = { {"nlarr", 5, 0x0219A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C46[] = { {"middot", 6, 0x000B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C48[] = { {"par", 3, 0x02225, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C4A[] = { {"NotGreaterGreater", 17, 0x0226B, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C4B[] = { {"Nfr", 3, 0x1D511, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C4F[] = { {"nwArr", 5, 0x021D6, 0}, {"prec", 4, 0x0227A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C50[] = { {"Barv", 4, 0x02AE7, 0}, {"yacute", 6, 0x000FD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C54[] = { {"DoubleLeftRightArrow", 20, 0x021D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C58[] = { {"Coproduct", 9, 0x02210, 0}, {"rarrpl", 6, 0x02945, 0}, {"subsim", 6, 0x02AC7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C5A[] = { {"ntgl", 4, 0x02279, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C5B[] = { {"LeftTriangleBar", 15, 0x029CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C5F[] = { {"ycirc", 5, 0x00177, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C69[] = { {"doteqdot", 8, 0x02251, 0}, {"nang", 4, 0x02220, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C6B[] = { {"bigcap", 6, 0x022C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C6C[] = { {"CHcy", 4, 0x00427, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C6E[] = { {"dopf", 4, 0x1D555, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C72[] = { {"inodot", 6, 0x00131, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C76[] = { {"nvHarr", 6, 0x02904, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C77[] = { {"laemptyv", 8, 0x029B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C78[] = { {"bigcirc", 7, 0x025EF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C7A[] = { {"scnap", 5, 0x02ABA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C7B[] = { {"DownLeftVector", 14, 0x021BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C80[] = { {"race", 4, 0x0223D, 0x00331}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C82[] = { {"vartriangleright", 16, 0x022B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C89[] = { {"napE", 4, 0x02A70, 0x00338}, {"supedot", 7, 0x02AC4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C8E[] = { {"acE", 3, 0x0223E, 0x00333}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C91[] = { {"pcy", 3, 0x0043F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C93[] = { {"qprime", 6, 0x02057, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C94[] = { {"RightTeeVector", 14, 0x0295B, 0}, {"curlyvee", 8, 0x022CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C95[] = { {"swarhk", 6, 0x02926, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_C98[] = { {"Atilde", 6, 0x000C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CA6[] = { {"bbrk", 4, 0x023B5, 0}, {"prnap", 5, 0x02AB9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CA8[] = { {"image", 5, 0x02111, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CA9[] = { {"sext", 4, 0x02736, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CAA[] = { {"ldquo", 5, 0x0201C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CAC[] = { {"NotLeftTriangleBar", 18, 0x029CF, 0x00338}, {"epsiv", 5, 0x003F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CAD[] = { {"CenterDot", 9, 0x000B7, 0}, {"acd", 3, 0x0223F, 0}, {"upuparrows", 10, 0x021C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CAF[] = { {"Eopf", 4, 0x1D53C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CB0[] = { {"Jcirc", 5, 0x00134, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CB2[] = { {"smid", 4, 0x02223, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CB4[] = { {"bull", 4, 0x02022, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CB6[] = { {"rhard", 5, 0x021C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CB7[] = { {"nsupset", 7, 0x02283, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CBA[] = { {"npre", 4, 0x02AAF, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CBE[] = { {"qscr", 4, 0x1D4C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CC2[] = { {"acy", 3, 0x00430, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CC4[] = { {"lnE", 3, 0x02268, 0}, {"zopf", 4, 0x1D56B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CC5[] = { {"Ntilde", 6, 0x000D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CC7[] = { {"rharu", 5, 0x021C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CC8[] = { {"kappav", 6, 0x003F0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CC9[] = { {"timesb", 6, 0x022A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CCB[] = { {"iiiint", 6, 0x02A0C, 0}, {"timesd", 6, 0x02A30, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CD0[] = { {"jcirc", 5, 0x00135, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CD2[] = { {"nsimeq", 6, 0x02244, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CD3[] = { {"Esim", 4, 0x02A73, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CD9[] = { {"Cap", 3, 0x022D2, 0}, {"bump", 4, 0x0224E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CDA[] = { {"lvnE", 4, 0x02268, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CDC[] = { {"rarrtl", 6, 0x021A3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CE4[] = { {"lne", 3, 0x02A87, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CE6[] = { {"commat", 6, 0x00040, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CE8[] = { {"hslash", 6, 0x0210F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CE9[] = { {"lthree", 6, 0x022CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CED[] = { {"Gcedil", 6, 0x00122, 0}, {"pfr", 3, 0x1D52D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CF1[] = { {"RightTriangleEqual", 18, 0x022B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CF2[] = { {"ngeqslant", 9, 0x02A7E, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CF3[] = { {"Rcy", 3, 0x00420, 0}, {"gimel", 5, 0x02137, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CF4[] = { {"curarr", 6, 0x021B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CFA[] = { {"ntlg", 4, 0x02278, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_CFF[] = { {"Rscr", 4, 0x0211B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D00[] = { {"urcrop", 6, 0x0230E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D06[] = { {"Poincareplane", 13, 0x0210C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D07[] = { {"NoBreak", 7, 0x02060, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D0B[] = { {"lcub", 4, 0x0007B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D0E[] = { {"nltri", 5, 0x022EA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D10[] = { {"blacktriangledown", 17, 0x025BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D11[] = { {"fjlig", 5, 0x00066, 0x0006A}, {"percnt", 6, 0x00025, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D12[] = { {"rightharpoondown", 16, 0x021C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D13[] = { {"LeftAngleBracket", 16, 0x027E8, 0}, {"npreceq", 7, 0x02AAF, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D15[] = { {"cupcup", 6, 0x02A4A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D18[] = { {"LeftVectorBar", 13, 0x02952, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D19[] = { {"NJcy", 4, 0x0040A, 0}, {"triangleright", 13, 0x025B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D1A[] = { {"Tcedil", 6, 0x00162, 0}, {"loz", 3, 0x025CA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D1E[] = { {"afr", 3, 0x1D51E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D1F[] = { {"NotLessTilde", 12, 0x02274, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D20[] = { {"NotElement", 10, 0x02209, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D22[] = { {"NotHumpDownHump", 15, 0x0224E, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D24[] = { {"SquareSubsetEqual", 17, 0x02291, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D26[] = { {"nleqq", 5, 0x02266, 0x00338}, {"phi", 3, 0x003C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D2A[] = { {"NotRightTriangle", 16, 0x022EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D32[] = { {"lhblk", 5, 0x02584, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D34[] = { {"caret", 5, 0x02041, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D35[] = { {"bsemi", 5, 0x0204F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D38[] = { {"aacute", 6, 0x000E1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D39[] = { {"mapsto", 6, 0x021A6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D3A[] = { {"Congruent", 9, 0x02261, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D3B[] = { {"Vdash", 5, 0x022A9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D3E[] = { {"longrightarrow", 14, 0x027F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D42[] = { {"iinfin", 6, 0x029DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D44[] = { {"EmptyVerySmallSquare", 20, 0x025AB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D49[] = { {"real", 4, 0x0211C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D4C[] = { {"SucceedsEqual", 13, 0x02AB0, 0}, {"utilde", 6, 0x00169, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D4F[] = { {"Rfr", 3, 0x0211C, 0}, {"tau", 3, 0x003C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D51[] = { {"Wedge", 5, 0x022C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D54[] = { {"piv", 3, 0x003D6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D55[] = { {"hscr", 4, 0x1D4BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D56[] = { {"subdot", 6, 0x02ABD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D57[] = { {"dsol", 4, 0x029F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D5A[] = { {"prnE", 4, 0x02AB5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D5B[] = { {"qopf", 4, 0x1D562, 0}, {"vdash", 5, 0x022A2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D5F[] = { {"Star", 4, 0x022C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D63[] = { {"sqsupseteq", 10, 0x02292, 0}, {"zhcy", 4, 0x00436, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D65[] = { {"nacute", 6, 0x00144, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D69[] = { {"lessgtr", 7, 0x02276, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D6A[] = { {"nless", 5, 0x0226E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D6C[] = { {"RightTeeArrow", 13, 0x021A6, 0}, {"Yuml", 4, 0x00178, 0}, {"target", 6, 0x02316, 0}, {"upharpoonleft", 13, 0x021BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D6F[] = { {"between", 7, 0x0226C, 0}, {"boxuL", 5, 0x0255B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D70[] = { {"TSHcy", 5, 0x0040B, 0}, {"lrm", 3, 0x0200E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D71[] = { {"excl", 4, 0x00021, 0}, {"hyphen", 6, 0x02010, 0}, {"mlcp", 4, 0x02ADB, 0}, {"wedge", 5, 0x02227, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D74[] = { {"ncedil", 6, 0x00146, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D75[] = { {"boxuR", 5, 0x02558, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D76[] = { {"Not", 3, 0x02AEC, 0}, {"epsi", 4, 0x003B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D7C[] = { {"disin", 5, 0x022F2, 0}, {"nRightarrow", 11, 0x021CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D7D[] = { {"cylcty", 6, 0x0232D, 0}, {"neArr", 5, 0x021D7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D7E[] = { {"prnsim", 6, 0x022E8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D80[] = { {"Cfr", 3, 0x0212D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D81[] = { {"Beta", 4, 0x00392, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D85[] = { {"leftarrowtail", 13, 0x021A2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D87[] = { {"parsl", 5, 0x02AFD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D89[] = { {"xwedge", 6, 0x022C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D8A[] = { {"olcross", 7, 0x029BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D8C[] = { {"boxvH", 5, 0x0256A, 0}, {"lsh", 3, 0x021B0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D8D[] = { {"circledR", 8, 0x000AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D8E[] = { {"Rho", 3, 0x003A1, 0}, {"circledS", 8, 0x024C8, 0}, {"cupor", 5, 0x02A45, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D8F[] = { {"Ugrave", 6, 0x000D9, 0}, {"boxul", 5, 0x02518, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D90[] = { {"boxvL", 5, 0x02561, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D91[] = { {"sqcup", 5, 0x02294, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D93[] = { {"rect", 4, 0x025AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D94[] = { {"mldr", 4, 0x02026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D95[] = { {"boxur", 5, 0x02514, 0}, {"digamma", 7, 0x003DD, 0}, {"tcy", 3, 0x00442, 0}, {"urcorner", 8, 0x0231D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D96[] = { {"DoubleLeftArrow", 15, 0x021D0, 0}, {"Iscr", 4, 0x02110, 0}, {"boxvR", 5, 0x0255E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D98[] = { {"ulcorn", 6, 0x0231C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D9A[] = { {"prod", 4, 0x0220F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_D9C[] = { {"Ropf", 4, 0x0211D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DA0[] = { {"rmoustache", 10, 0x023B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DA5[] = { {"NegativeMediumSpace", 19, 0x0200B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DA6[] = { {"prop", 4, 0x0221D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DA8[] = { {"TScy", 4, 0x00426, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DA9[] = { {"xsqcup", 6, 0x02A06, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DAC[] = { {"bemptyv", 7, 0x029B0, 0}, {"boxvh", 5, 0x0253C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DB0[] = { {"boxvl", 5, 0x02524, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DB3[] = { {"NotTildeFullEqual", 17, 0x02247, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DB4[] = { {"subE", 4, 0x02AC5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DB6[] = { {"boxvr", 5, 0x0251C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DB7[] = { {"bigvee", 6, 0x022C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DB9[] = { {"Chi", 3, 0x003A7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DBC[] = { {"circeq", 6, 0x02257, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DBE[] = { {"emsp13", 6, 0x02004, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DBF[] = { {"emsp14", 6, 0x02005, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DC2[] = { {"ouml", 4, 0x000F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DC3[] = { {"RightArrowBar", 13, 0x021E5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DC6[] = { {"ecy", 3, 0x0044D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DC8[] = { {"succneqq", 8, 0x02AB6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DCA[] = { {"npart", 5, 0x02202, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DCF[] = { {"Element", 7, 0x02208, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DD1[] = { {"Edot", 4, 0x00116, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DD3[] = { {"RightUpDownVector", 17, 0x0294F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DD4[] = { {"sube", 4, 0x02286, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DD5[] = { {"jsercy", 6, 0x00458, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DD7[] = { {"varrho", 6, 0x003F1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DD9[] = { {"subsub", 6, 0x02AD5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DDC[] = { {"Dcaron", 6, 0x0010E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DDD[] = { {"Eogon", 5, 0x00118, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DE4[] = { {"geqslant", 8, 0x02A7E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DE6[] = { {"rdldhar", 7, 0x02969, 0}, {"zdot", 4, 0x0017C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DE7[] = { {"subsup", 6, 0x02AD3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DE9[] = { {"ograve", 6, 0x000F2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DEB[] = { {"ReverseElement", 14, 0x0220B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DED[] = { {"drcorn", 6, 0x0231F, 0}, {"rang", 4, 0x027E9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DF1[] = { {"tfr", 3, 0x1D531, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DF2[] = { {"hopf", 4, 0x1D559, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DF3[] = { {"succ", 4, 0x0227B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DF6[] = { {"otimes", 6, 0x02297, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DF7[] = { {"Vcy", 3, 0x00412, 0}, {"ltquest", 7, 0x02A7B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DF9[] = { {"lozenge", 7, 0x025CA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DFB[] = { {"LeftDownVector", 14, 0x021C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_DFD[] = { {"eogon", 5, 0x00119, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E03[] = { {"amp", 3, 0x00026, 0}, {"lopar", 5, 0x02985, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E04[] = { {"loplus", 6, 0x02A2D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E08[] = { {"NotTilde", 8, 0x02241, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E09[] = { {"CounterClockwiseContourIntegral", 31, 0x02233, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E0C[] = { {"InvisibleTimes", 14, 0x02062, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E11[] = { {"lesdotor", 8, 0x02A83, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E18[] = { {"and", 3, 0x02227, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E1B[] = { {"RightUpVector", 13, 0x021BE, 0}, {"ang", 3, 0x02220, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E1C[] = { {"DoubleRightTee", 14, 0x022A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E1D[] = { {"LeftUpVectorBar", 15, 0x02958, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E1E[] = { {"smte", 4, 0x02AAC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E20[] = { {"Iacute", 6, 0x000CD, 0}, {"triminus", 8, 0x02A3A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E22[] = { {"efr", 3, 0x1D522, 0}, {"iiint", 5, 0x0222D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E23[] = { {"ctdot", 5, 0x022EF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E24[] = { {"mnplus", 6, 0x02213, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E25[] = { {"Vee", 3, 0x022C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E28[] = { {"Gcy", 3, 0x00413, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E2A[] = { {"lurdshar", 8, 0x0294A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E2C[] = { {"smeparsl", 8, 0x029E4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E2F[] = { {"DoubleVerticalBar", 17, 0x02225, 0}, {"iecy", 4, 0x00435, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E30[] = { {"udblac", 6, 0x00171, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E32[] = { {"gtquest", 7, 0x02A7C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E33[] = { {"Iopf", 4, 0x1D540, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E35[] = { {"bsime", 5, 0x022CD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E36[] = { {"RightVector", 11, 0x021C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E37[] = { {"NotGreaterLess", 14, 0x02279, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E3B[] = { {"apE", 3, 0x02A70, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E41[] = { {"CupCap", 6, 0x0224D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E42[] = { {"uscr", 4, 0x1D4CA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E43[] = { {"erDot", 5, 0x02253, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E44[] = { {"egs", 3, 0x02A96, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E48[] = { {"rlarr", 5, 0x021C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E4C[] = { {"prE", 3, 0x02AB3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E4E[] = { {"QUOT", 4, 0x00022, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E53[] = { {"Vfr", 3, 0x1D519, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E55[] = { {"cupbrcap", 8, 0x02A48, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E57[] = { {"intercal", 8, 0x022BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E58[] = { {"imath", 5, 0x00131, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E59[] = { {"RightUpTeeVector", 16, 0x0295C, 0}, {"trie", 4, 0x0225C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E5B[] = { {"ape", 3, 0x0224A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E5D[] = { {"softcy", 6, 0x0044C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E5E[] = { {"rarrb", 5, 0x021E5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E5F[] = { {"FilledSmallSquare", 17, 0x025FC, 0}, {"rarrc", 5, 0x02933, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E60[] = { {"Superset", 8, 0x02283, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E61[] = { {"hoarr", 5, 0x021FF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E63[] = { {"DownRightVectorBar", 18, 0x02957, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E64[] = { {"brvbar", 6, 0x000A6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E65[] = { {"ecolon", 6, 0x02255, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E66[] = { {"GreaterLess", 11, 0x02277, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E6A[] = { {"nrArr", 5, 0x021CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E6C[] = { {"pre", 3, 0x02AAF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E6F[] = { {"aleph", 5, 0x02135, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E70[] = { {"DiacriticalAcute", 16, 0x000B4, 0}, {"SmallCircle", 11, 0x02218, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E71[] = { {"parsim", 6, 0x02AF3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E73[] = { {"rarrw", 5, 0x0219D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E78[] = { {"caron", 5, 0x002C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E7A[] = { {"cacute", 6, 0x00107, 0}, {"lagran", 6, 0x02112, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E7C[] = { {"rarr", 4, 0x02192, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E80[] = { {"Rrightarrow", 11, 0x021DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E83[] = { {"Vscr", 4, 0x1D4B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E84[] = { {"Gfr", 3, 0x1D50A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E89[] = { {"ccedil", 6, 0x000E7, 0}, {"propto", 6, 0x0221D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E8E[] = { {"zwnj", 4, 0x0200C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E91[] = { {"psi", 3, 0x003C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E99[] = { {"infin", 5, 0x0221E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_E9C[] = { {"circledcirc", 11, 0x0229A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EA1[] = { {"Proportion", 10, 0x02237, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EA2[] = { {"subseteqq", 9, 0x02AC5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EA4[] = { {"nGtv", 4, 0x0226B, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EA8[] = { {"macr", 4, 0x000AF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EA9[] = { {"orslope", 7, 0x02A57, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EB1[] = { {"frown", 5, 0x02322, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EB2[] = { {"Iota", 4, 0x00399, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EB4[] = { {"rceil", 5, 0x02309, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EB7[] = { {"spadesuit", 9, 0x02660, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EB8[] = { {"sstarf", 6, 0x022C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ECA[] = { {"icy", 3, 0x00438, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ECD[] = { {"ast", 3, 0x0002A, 0}, {"nmid", 4, 0x02224, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ECF[] = { {"bowtie", 6, 0x022C8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ED1[] = { {"thetav", 6, 0x003D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ED7[] = { {"vangrt", 6, 0x0299C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ED8[] = { {"numsp", 5, 0x02007, 0}, {"triplus", 7, 0x02A39, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_ED9[] = { {"lscr", 4, 0x1D4C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EDA[] = { {"pointint", 8, 0x02A15, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EDB[] = { {"Theta", 5, 0x00398, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EDF[] = { {"rightrightarrows", 16, 0x021C9, 0}, {"uopf", 4, 0x1D566, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EE2[] = { {"ell", 3, 0x02113, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EE4[] = { {"cuepr", 5, 0x022DE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EE5[] = { {"NotVerticalBar", 14, 0x02224, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EE7[] = { {"xnis", 4, 0x022FB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EE9[] = { {"els", 3, 0x02A95, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EEF[] = { {"DDotrahd", 8, 0x02911, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EF1[] = { {"larrbfs", 7, 0x0291F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EF2[] = { {"Rsh", 3, 0x021B1, 0}, {"boxplus", 7, 0x0229E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EF4[] = { {"swarr", 5, 0x02199, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EF5[] = { {"gvnE", 4, 0x02269, 0x0FE00}, {"xfr", 3, 0x1D535, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EF9[] = { {"ldca", 4, 0x02936, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EFB[] = { {"NotPrecedesSlantEqual", 21, 0x022E0, 0}, {"YAcy", 4, 0x0042F, 0}, {"Zcy", 3, 0x00417, 0}, {"andslope", 8, 0x02A58, 0}, {"numero", 6, 0x02116, 0}, {"theta", 5, 0x003B8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EFE[] = { {"mapstoup", 8, 0x021A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_EFF[] = { {"bigcup", 6, 0x022C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F03[] = { {"nesear", 6, 0x02928, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F05[] = { {"lesssim", 7, 0x02272, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F08[] = { {"DownArrow", 9, 0x02193, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F0B[] = { {"orarr", 5, 0x021BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F0F[] = { {"ccaps", 5, 0x02A4D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F10[] = { {"xdtri", 5, 0x025BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F11[] = { {"xcap", 4, 0x022C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F13[] = { {"downdownarrows", 14, 0x021CA, 0}, {"nisd", 4, 0x022FA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F14[] = { {"VerticalBar", 11, 0x02223, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F15[] = { {"TRADE", 5, 0x02122, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F17[] = { {"Omacr", 5, 0x0014C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F18[] = { {"top", 3, 0x022A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F19[] = { {"LeftRightArrow", 14, 0x02194, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F1A[] = { {"Mscr", 4, 0x02133, 0}, {"iff", 3, 0x021D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F1F[] = { {"downharpoonleft", 15, 0x021C3, 0}, {"eng", 3, 0x0014B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F20[] = { {"Vopf", 4, 0x1D54D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F26[] = { {"ifr", 3, 0x1D526, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F28[] = { {"Downarrow", 9, 0x021D3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F2C[] = { {"Kcy", 3, 0x0041A, 0}, {"angle", 5, 0x02220, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F2F[] = { {"lescc", 5, 0x02AA8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F30[] = { {"lesseqqgtr", 10, 0x02A8B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F31[] = { {"bigstar", 7, 0x02605, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F33[] = { {"ddagger", 7, 0x02021, 0}, {"nltrie", 6, 0x022EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F37[] = { {"omacr", 5, 0x0014D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F38[] = { {"cuesc", 5, 0x022DF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F40[] = { {"circlearrowright", 16, 0x021BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F41[] = { {"ngeqq", 5, 0x02267, 0x00338}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F44[] = { {"squf", 4, 0x025AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F46[] = { {"rtri", 4, 0x025B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F47[] = { {"VerticalLine", 12, 0x0007C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F48[] = { {"downarrow", 9, 0x02193, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F4B[] = { {"Scaron", 6, 0x00160, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F4C[] = { {"tstrok", 6, 0x00167, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F50[] = { {"wreath", 6, 0x02240, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F51[] = { {"exponentiale", 12, 0x02147, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F55[] = { {"Idot", 4, 0x00130, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F57[] = { {"Zfr", 3, 0x02128, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F58[] = { {"bnot", 4, 0x02310, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F5B[] = { {"infintie", 8, 0x029DD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F5D[] = { {"angrtvbd", 8, 0x0299D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F5F[] = { {"prurel", 6, 0x022B0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F60[] = { {"gbreve", 6, 0x0011F, 0}, {"rsaquo", 6, 0x0203A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F62[] = { {"sung", 4, 0x0266A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F67[] = { {"lvertneqq", 9, 0x02268, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F68[] = { {"lnsim", 5, 0x022E6, 0}, {"searrow", 7, 0x02198, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F69[] = { {"nsubset", 7, 0x02282, 0x020D2}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F6D[] = { {"Cup", 3, 0x022D3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F6E[] = { {"Lmidot", 6, 0x0013F, 0}, {"sup1", 4, 0x000B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F6F[] = { {"Delta", 5, 0x00394, 0}, {"sbquo", 5, 0x0201A, 0}, {"sup2", 4, 0x000B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F70[] = { {"cscr", 4, 0x1D4B8, 0}, {"nsubseteqq", 10, 0x02AC5, 0x00338}, {"sup3", 4, 0x000B3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F71[] = { {"Kcedil", 6, 0x00136, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F72[] = { {"plussim", 7, 0x02A26, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F74[] = { {"KHcy", 4, 0x00425, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F75[] = { {"OElig", 5, 0x00152, 0}, {"simdot", 6, 0x02A6A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F76[] = { {"lopf", 4, 0x1D55D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F77[] = { {"boxbox", 6, 0x029C9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F78[] = { {"bepsi", 5, 0x003F6, 0}, {"lbarr", 5, 0x0290C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F79[] = { {"lnapprox", 8, 0x02A89, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F81[] = { {"sdotb", 5, 0x022A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F82[] = { {"measuredangle", 13, 0x02221, 0}, {"supE", 4, 0x02AC6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F83[] = { {"map", 3, 0x021A6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F84[] = { {"sdote", 5, 0x02A66, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F86[] = { {"diamondsuit", 11, 0x02666, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F88[] = { {"Kfr", 3, 0x1D50E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F8B[] = { {"imagline", 8, 0x02110, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F8F[] = { {"delta", 5, 0x003B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F91[] = { {"mapstodown", 10, 0x021A7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F93[] = { {"eqvparsl", 8, 0x029E5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F95[] = { {"UpArrow", 7, 0x02191, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F9A[] = { {"imagpart", 8, 0x02111, 0}, {"lsim", 4, 0x02272, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F9C[] = { {"trianglelefteq", 14, 0x022B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_F9F[] = { {"isindot", 7, 0x022F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FA0[] = { {"LeftUpDownVector", 16, 0x02951, 0}, {"curvearrowleft", 14, 0x021B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FA1[] = { {"Diamond", 7, 0x022C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FA2[] = { {"supe", 4, 0x02287, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FA3[] = { {"nearrow", 7, 0x02197, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FA9[] = { {"easter", 6, 0x02A6E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB0[] = { {"rdquo", 5, 0x0201D, 0}, {"subsetneqq", 10, 0x02ACB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB1[] = { {"Dscr", 4, 0x1D49F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB4[] = { {"comp", 4, 0x02201, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB5[] = { {"Uparrow", 7, 0x021D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB6[] = { {"coloneq", 7, 0x02254, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB7[] = { {"Mopf", 4, 0x1D544, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FB9[] = { {"rfloor", 6, 0x0230B, 0}, {"varsubsetneqq", 13, 0x02ACB, 0x0FE00}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FBC[] = { {"eacute", 6, 0x000E9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FC2[] = { {"shortparallel", 13, 0x02225, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FC4[] = { {"male", 4, 0x02642, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FC6[] = { {"yscr", 4, 0x1D4CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FCA[] = { {"xharr", 5, 0x027F7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FCC[] = { {"cong", 4, 0x02245, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FCE[] = { {"mcy", 3, 0x0043C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FCF[] = { {"Upsilon", 7, 0x003A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FD0[] = { {"block", 5, 0x02588, 0}, {"maltese", 7, 0x02720, 0}, {"ordf", 4, 0x000AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FD2[] = { {"zcaron", 6, 0x0017E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FD3[] = { {"malt", 4, 0x02720, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FD6[] = { {"loang", 5, 0x027EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FD7[] = { {"ordm", 4, 0x000BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FDD[] = { {"NegativeVeryThinSpace", 21, 0x0200B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FDF[] = { {"eta", 3, 0x003B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FE1[] = { {"Iogon", 5, 0x0012E, 0}, {"drbkarow", 8, 0x02910, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FE6[] = { {"eth", 3, 0x000F0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FE9[] = { {"racute", 6, 0x00155, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FEA[] = { {"cwconint", 8, 0x02232, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FEB[] = { {"egsdot", 6, 0x02A98, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FF5[] = { {"MinusPlus", 9, 0x02213, 0}, {"ring", 4, 0x002DA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FF8[] = { {"rcedil", 6, 0x00157, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FFC[] = { {"timesbar", 8, 0x02A31, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html5_FFE[] = { {"GreaterEqualLess", 16, 0x022DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map *const ht_buckets_html5[] = { ht_bucket_html5_000, ht_bucket_html5_001, ht_bucket_empty, ht_bucket_html5_003, ht_bucket_empty, ht_bucket_html5_005, ht_bucket_empty, ht_bucket_html5_007, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_00D, ht_bucket_empty, ht_bucket_html5_00F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_017, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_020, ht_bucket_empty, ht_bucket_html5_022, ht_bucket_empty, ht_bucket_html5_024, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_027, ht_bucket_html5_028, ht_bucket_html5_029, ht_bucket_html5_02A, ht_bucket_html5_02B, ht_bucket_html5_02C, ht_bucket_empty, ht_bucket_html5_02E, ht_bucket_empty, ht_bucket_html5_030, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_034, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_038, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_040, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_047, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_04C, ht_bucket_empty, ht_bucket_html5_04E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_051, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_059, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_05D, ht_bucket_empty, ht_bucket_html5_05F, ht_bucket_html5_060, ht_bucket_html5_061, ht_bucket_empty, ht_bucket_html5_063, ht_bucket_html5_064, ht_bucket_html5_065, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_069, ht_bucket_html5_06A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_06D, ht_bucket_html5_06E, ht_bucket_html5_06F, ht_bucket_empty, ht_bucket_html5_071, ht_bucket_empty, ht_bucket_html5_073, ht_bucket_html5_074, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_07A, ht_bucket_html5_07B, ht_bucket_html5_07C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_07F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_082, ht_bucket_empty, ht_bucket_html5_084, ht_bucket_html5_085, ht_bucket_html5_086, ht_bucket_empty, ht_bucket_html5_088, ht_bucket_html5_089, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_08C, ht_bucket_empty, ht_bucket_html5_08E, ht_bucket_empty, ht_bucket_html5_090, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_094, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_097, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_09E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0A4, ht_bucket_empty, ht_bucket_html5_0A6, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0AB, ht_bucket_html5_0AC, ht_bucket_html5_0AD, ht_bucket_html5_0AE, ht_bucket_html5_0AF, ht_bucket_html5_0B0, ht_bucket_empty, ht_bucket_html5_0B2, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0B8, ht_bucket_html5_0B9, ht_bucket_html5_0BA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0CE, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0D1, ht_bucket_html5_0D2, ht_bucket_html5_0D3, ht_bucket_empty, ht_bucket_html5_0D5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0DF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0E5, ht_bucket_html5_0E6, ht_bucket_empty, ht_bucket_html5_0E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0EC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0EF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0F3, ht_bucket_html5_0F4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_0FA, ht_bucket_html5_0FB, ht_bucket_empty, ht_bucket_html5_0FD, ht_bucket_html5_0FE, ht_bucket_empty, ht_bucket_html5_100, ht_bucket_html5_101, ht_bucket_empty, ht_bucket_html5_103, ht_bucket_empty, ht_bucket_html5_105, ht_bucket_html5_106, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_109, ht_bucket_html5_10A, ht_bucket_html5_10B, ht_bucket_empty, ht_bucket_html5_10D, ht_bucket_html5_10E, ht_bucket_html5_10F, ht_bucket_html5_110, ht_bucket_html5_111, ht_bucket_empty, ht_bucket_html5_113, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_116, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_11B, ht_bucket_html5_11C, ht_bucket_empty, ht_bucket_html5_11E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_121, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_124, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_129, ht_bucket_html5_12A, ht_bucket_empty, ht_bucket_html5_12C, ht_bucket_empty, ht_bucket_html5_12E, ht_bucket_html5_12F, ht_bucket_html5_130, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_134, ht_bucket_html5_135, ht_bucket_empty, ht_bucket_html5_137, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_13A, ht_bucket_html5_13B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_145, ht_bucket_empty, ht_bucket_html5_147, ht_bucket_empty, ht_bucket_html5_149, ht_bucket_empty, ht_bucket_html5_14B, ht_bucket_html5_14C, ht_bucket_empty, ht_bucket_html5_14E, ht_bucket_html5_14F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_158, ht_bucket_html5_159, ht_bucket_empty, ht_bucket_html5_15B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_15E, ht_bucket_html5_15F, ht_bucket_empty, ht_bucket_html5_161, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_164, ht_bucket_html5_165, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_168, ht_bucket_empty, ht_bucket_html5_16A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_170, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_173, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_17A, ht_bucket_html5_17B, ht_bucket_html5_17C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_17F, ht_bucket_empty, ht_bucket_html5_181, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_189, ht_bucket_empty, ht_bucket_html5_18B, ht_bucket_html5_18C, ht_bucket_empty, ht_bucket_html5_18E, ht_bucket_html5_18F, ht_bucket_html5_190, ht_bucket_html5_191, ht_bucket_empty, ht_bucket_html5_193, ht_bucket_empty, ht_bucket_html5_195, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_19A, ht_bucket_empty, ht_bucket_html5_19C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_19F, ht_bucket_html5_1A0, ht_bucket_html5_1A1, ht_bucket_html5_1A2, ht_bucket_html5_1A3, ht_bucket_html5_1A4, ht_bucket_html5_1A5, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1A8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1AB, ht_bucket_html5_1AC, ht_bucket_html5_1AD, ht_bucket_html5_1AE, ht_bucket_html5_1AF, ht_bucket_html5_1B0, ht_bucket_empty, ht_bucket_html5_1B2, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1B5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1B9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1BD, ht_bucket_html5_1BE, ht_bucket_empty, ht_bucket_html5_1C0, ht_bucket_html5_1C1, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1C4, ht_bucket_empty, ht_bucket_html5_1C6, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1C9, ht_bucket_html5_1CA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1CD, ht_bucket_html5_1CE, ht_bucket_empty, ht_bucket_html5_1D0, ht_bucket_html5_1D1, ht_bucket_html5_1D2, ht_bucket_empty, ht_bucket_html5_1D4, ht_bucket_html5_1D5, ht_bucket_html5_1D6, ht_bucket_empty, ht_bucket_html5_1D8, ht_bucket_html5_1D9, ht_bucket_html5_1DA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1DF, ht_bucket_html5_1E0, ht_bucket_html5_1E1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1E5, ht_bucket_html5_1E6, ht_bucket_html5_1E7, ht_bucket_html5_1E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1EB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1EF, ht_bucket_html5_1F0, ht_bucket_empty, ht_bucket_html5_1F2, ht_bucket_empty, ht_bucket_html5_1F4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_1F8, ht_bucket_html5_1F9, ht_bucket_html5_1FA, ht_bucket_empty, ht_bucket_html5_1FC, ht_bucket_empty, ht_bucket_html5_1FE, ht_bucket_html5_1FF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_205, ht_bucket_empty, ht_bucket_html5_207, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_20E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_212, ht_bucket_html5_213, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_219, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_21D, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_220, ht_bucket_empty, ht_bucket_html5_222, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_227, ht_bucket_empty, ht_bucket_html5_229, ht_bucket_empty, ht_bucket_html5_22B, ht_bucket_html5_22C, ht_bucket_html5_22D, ht_bucket_empty, ht_bucket_html5_22F, ht_bucket_html5_230, ht_bucket_empty, ht_bucket_html5_232, ht_bucket_empty, ht_bucket_html5_234, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_239, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_23C, ht_bucket_html5_23D, ht_bucket_html5_23E, ht_bucket_empty, ht_bucket_html5_240, ht_bucket_html5_241, ht_bucket_html5_242, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_246, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_249, ht_bucket_html5_24A, ht_bucket_html5_24B, ht_bucket_empty, ht_bucket_html5_24D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_251, ht_bucket_html5_252, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_257, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_25A, ht_bucket_html5_25B, ht_bucket_html5_25C, ht_bucket_html5_25D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_263, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_26A, ht_bucket_html5_26B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_26E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_274, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_277, ht_bucket_html5_278, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_27C, ht_bucket_empty, ht_bucket_html5_27E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_283, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_28A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_294, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_297, ht_bucket_html5_298, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_29D, ht_bucket_empty, ht_bucket_html5_29F, ht_bucket_html5_2A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2A9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2AE, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2B1, ht_bucket_html5_2B2, ht_bucket_html5_2B3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2B9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2BF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2C4, ht_bucket_html5_2C5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2CE, ht_bucket_html5_2CF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2D3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2DA, ht_bucket_html5_2DB, ht_bucket_html5_2DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2E3, ht_bucket_html5_2E4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2EB, ht_bucket_html5_2EC, ht_bucket_empty, ht_bucket_html5_2EE, ht_bucket_empty, ht_bucket_html5_2F0, ht_bucket_empty, ht_bucket_html5_2F2, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_2F8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_300, ht_bucket_html5_301, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_304, ht_bucket_html5_305, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_308, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_30B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_30F, ht_bucket_empty, ht_bucket_html5_311, ht_bucket_empty, ht_bucket_html5_313, ht_bucket_empty, ht_bucket_html5_315, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_319, ht_bucket_html5_31A, ht_bucket_html5_31B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_326, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_329, ht_bucket_html5_32A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_32D, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_330, ht_bucket_html5_331, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_336, ht_bucket_empty, ht_bucket_html5_338, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_33B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_33F, ht_bucket_html5_340, ht_bucket_html5_341, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_347, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_34D, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_350, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_356, ht_bucket_empty, ht_bucket_html5_358, ht_bucket_html5_359, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_35D, ht_bucket_empty, ht_bucket_html5_35F, ht_bucket_empty, ht_bucket_html5_361, ht_bucket_empty, ht_bucket_html5_363, ht_bucket_empty, ht_bucket_html5_365, ht_bucket_empty, ht_bucket_html5_367, ht_bucket_empty, ht_bucket_html5_369, ht_bucket_html5_36A, ht_bucket_html5_36B, ht_bucket_empty, ht_bucket_html5_36D, ht_bucket_html5_36E, ht_bucket_html5_36F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_372, ht_bucket_empty, ht_bucket_html5_374, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_378, ht_bucket_empty, ht_bucket_html5_37A, ht_bucket_empty, ht_bucket_html5_37C, ht_bucket_html5_37D, ht_bucket_html5_37E, ht_bucket_html5_37F, ht_bucket_html5_380, ht_bucket_empty, ht_bucket_html5_382, ht_bucket_html5_383, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_386, ht_bucket_html5_387, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_38A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_38D, ht_bucket_html5_38E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_391, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_394, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_397, ht_bucket_html5_398, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_39C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_39F, ht_bucket_html5_3A0, ht_bucket_html5_3A1, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3A4, ht_bucket_html5_3A5, ht_bucket_html5_3A6, ht_bucket_html5_3A7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3B2, ht_bucket_empty, ht_bucket_html5_3B4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3BF, ht_bucket_html5_3C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3C9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3CD, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3D3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3D9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3DE, ht_bucket_empty, ht_bucket_html5_3E0, ht_bucket_html5_3E1, ht_bucket_empty, ht_bucket_html5_3E3, ht_bucket_html5_3E4, ht_bucket_empty, ht_bucket_html5_3E6, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3E9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3ED, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3F1, ht_bucket_html5_3F2, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3F7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_3FC, ht_bucket_empty, ht_bucket_html5_3FE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_402, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_405, ht_bucket_empty, ht_bucket_html5_407, ht_bucket_empty, ht_bucket_html5_409, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_40E, ht_bucket_html5_40F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_413, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_41A, ht_bucket_html5_41B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_421, ht_bucket_empty, ht_bucket_html5_423, ht_bucket_html5_424, ht_bucket_html5_425, ht_bucket_html5_426, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_429, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_42C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_42F, ht_bucket_html5_430, ht_bucket_empty, ht_bucket_html5_432, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_436, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_439, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_43C, ht_bucket_html5_43D, ht_bucket_html5_43E, ht_bucket_html5_43F, ht_bucket_html5_440, ht_bucket_html5_441, ht_bucket_empty, ht_bucket_html5_443, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_446, ht_bucket_html5_447, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_44A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_44F, ht_bucket_html5_450, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_454, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_457, ht_bucket_html5_458, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_45D, ht_bucket_empty, ht_bucket_html5_45F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_465, ht_bucket_html5_466, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_469, ht_bucket_html5_46A, ht_bucket_html5_46B, ht_bucket_empty, ht_bucket_html5_46D, ht_bucket_empty, ht_bucket_html5_46F, ht_bucket_html5_470, ht_bucket_html5_471, ht_bucket_html5_472, ht_bucket_html5_473, ht_bucket_empty, ht_bucket_html5_475, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_479, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_47C, ht_bucket_html5_47D, ht_bucket_empty, ht_bucket_html5_47F, ht_bucket_html5_480, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_485, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_488, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_48C, ht_bucket_empty, ht_bucket_html5_48E, ht_bucket_html5_48F, ht_bucket_html5_490, ht_bucket_html5_491, ht_bucket_empty, ht_bucket_html5_493, ht_bucket_empty, ht_bucket_html5_495, ht_bucket_html5_496, ht_bucket_empty, ht_bucket_html5_498, ht_bucket_html5_499, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_49F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4A2, ht_bucket_empty, ht_bucket_html5_4A4, ht_bucket_empty, ht_bucket_html5_4A6, ht_bucket_html5_4A7, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4AA, ht_bucket_html5_4AB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4AE, ht_bucket_html5_4AF, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4B2, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4B6, ht_bucket_empty, ht_bucket_html5_4B8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4C0, ht_bucket_empty, ht_bucket_html5_4C2, ht_bucket_html5_4C3, ht_bucket_html5_4C4, ht_bucket_html5_4C5, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4C8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4CB, ht_bucket_empty, ht_bucket_html5_4CD, ht_bucket_empty, ht_bucket_html5_4CF, ht_bucket_html5_4D0, ht_bucket_empty, ht_bucket_html5_4D2, ht_bucket_html5_4D3, ht_bucket_html5_4D4, ht_bucket_html5_4D5, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4D8, ht_bucket_empty, ht_bucket_html5_4DA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4DE, ht_bucket_html5_4DF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4E3, ht_bucket_html5_4E4, ht_bucket_empty, ht_bucket_html5_4E6, ht_bucket_html5_4E7, ht_bucket_html5_4E8, ht_bucket_html5_4E9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4ED, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4F1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4F7, ht_bucket_empty, ht_bucket_html5_4F9, ht_bucket_empty, ht_bucket_html5_4FB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_4FE, ht_bucket_empty, ht_bucket_html5_500, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_504, ht_bucket_empty, ht_bucket_html5_506, ht_bucket_html5_507, ht_bucket_empty, ht_bucket_html5_509, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_50E, ht_bucket_html5_50F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_513, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_516, ht_bucket_empty, ht_bucket_html5_518, ht_bucket_html5_519, ht_bucket_empty, ht_bucket_html5_51B, ht_bucket_html5_51C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_524, ht_bucket_html5_525, ht_bucket_html5_526, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_52F, ht_bucket_html5_530, ht_bucket_empty, ht_bucket_html5_532, ht_bucket_html5_533, ht_bucket_html5_534, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_53B, ht_bucket_html5_53C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_53F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_542, ht_bucket_html5_543, ht_bucket_empty, ht_bucket_html5_545, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_548, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_54F, ht_bucket_html5_550, ht_bucket_html5_551, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_557, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_55B, ht_bucket_empty, ht_bucket_html5_55D, ht_bucket_empty, ht_bucket_html5_55F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_564, ht_bucket_html5_565, ht_bucket_html5_566, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_56C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_56F, ht_bucket_html5_570, ht_bucket_html5_571, ht_bucket_html5_572, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_575, ht_bucket_html5_576, ht_bucket_html5_577, ht_bucket_html5_578, ht_bucket_empty, ht_bucket_html5_57A, ht_bucket_html5_57B, ht_bucket_html5_57C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_580, ht_bucket_empty, ht_bucket_html5_582, ht_bucket_html5_583, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_586, ht_bucket_empty, ht_bucket_html5_588, ht_bucket_html5_589, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_58D, ht_bucket_html5_58E, ht_bucket_html5_58F, ht_bucket_html5_590, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_595, ht_bucket_html5_596, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_59A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_59D, ht_bucket_empty, ht_bucket_html5_59F, ht_bucket_html5_5A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A6, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5A9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5AC, ht_bucket_html5_5AD, ht_bucket_html5_5AE, ht_bucket_empty, ht_bucket_html5_5B0, ht_bucket_html5_5B1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5B5, ht_bucket_html5_5B6, ht_bucket_html5_5B7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5BB, ht_bucket_html5_5BC, ht_bucket_html5_5BD, ht_bucket_empty, ht_bucket_html5_5BF, ht_bucket_html5_5C0, ht_bucket_html5_5C1, ht_bucket_html5_5C2, ht_bucket_empty, ht_bucket_html5_5C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5D0, ht_bucket_html5_5D1, ht_bucket_empty, ht_bucket_html5_5D3, ht_bucket_empty, ht_bucket_html5_5D5, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5D8, ht_bucket_html5_5D9, ht_bucket_empty, ht_bucket_html5_5DB, ht_bucket_empty, ht_bucket_html5_5DD, ht_bucket_empty, ht_bucket_html5_5DF, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5E2, ht_bucket_empty, ht_bucket_html5_5E4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5E7, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5EA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5ED, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5F6, ht_bucket_empty, ht_bucket_html5_5F8, ht_bucket_empty, ht_bucket_html5_5FA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_5FD, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_601, ht_bucket_html5_602, ht_bucket_html5_603, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_606, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_609, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_60D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_613, ht_bucket_empty, ht_bucket_html5_615, ht_bucket_empty, ht_bucket_html5_617, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_61A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_61D, ht_bucket_empty, ht_bucket_html5_61F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_622, ht_bucket_empty, ht_bucket_html5_624, ht_bucket_empty, ht_bucket_html5_626, ht_bucket_empty, ht_bucket_html5_628, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_62C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_630, ht_bucket_empty, ht_bucket_html5_632, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_636, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_63A, ht_bucket_empty, ht_bucket_html5_63C, ht_bucket_html5_63D, ht_bucket_html5_63E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_641, ht_bucket_html5_642, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_645, ht_bucket_html5_646, ht_bucket_html5_647, ht_bucket_html5_648, ht_bucket_html5_649, ht_bucket_html5_64A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_651, ht_bucket_html5_652, ht_bucket_html5_653, ht_bucket_empty, ht_bucket_html5_655, ht_bucket_empty, ht_bucket_html5_657, ht_bucket_html5_658, ht_bucket_html5_659, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_65C, ht_bucket_empty, ht_bucket_html5_65E, ht_bucket_empty, ht_bucket_html5_660, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_669, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_670, ht_bucket_html5_671, ht_bucket_html5_672, ht_bucket_html5_673, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_676, ht_bucket_empty, ht_bucket_html5_678, ht_bucket_html5_679, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_67D, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_680, ht_bucket_empty, ht_bucket_html5_682, ht_bucket_empty, ht_bucket_html5_684, ht_bucket_html5_685, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_68A, ht_bucket_empty, ht_bucket_html5_68C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_691, ht_bucket_empty, ht_bucket_html5_693, ht_bucket_html5_694, ht_bucket_empty, ht_bucket_html5_696, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_699, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6A3, ht_bucket_html5_6A4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6A8, ht_bucket_html5_6A9, ht_bucket_html5_6AA, ht_bucket_html5_6AB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6AE, ht_bucket_empty, ht_bucket_html5_6B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6B4, ht_bucket_empty, ht_bucket_html5_6B6, ht_bucket_empty, ht_bucket_html5_6B8, ht_bucket_html5_6B9, ht_bucket_html5_6BA, ht_bucket_empty, ht_bucket_html5_6BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6BF, ht_bucket_html5_6C0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6C4, ht_bucket_html5_6C5, ht_bucket_html5_6C6, ht_bucket_html5_6C7, ht_bucket_html5_6C8, ht_bucket_html5_6C9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6CC, ht_bucket_empty, ht_bucket_html5_6CE, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6D1, ht_bucket_html5_6D2, ht_bucket_empty, ht_bucket_html5_6D4, ht_bucket_html5_6D5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6D9, ht_bucket_html5_6DA, ht_bucket_html5_6DB, ht_bucket_html5_6DC, ht_bucket_empty, ht_bucket_html5_6DE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6E7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6EB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6EE, ht_bucket_html5_6EF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6F5, ht_bucket_empty, ht_bucket_html5_6F7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_6FB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_704, ht_bucket_html5_705, ht_bucket_html5_706, ht_bucket_html5_707, ht_bucket_empty, ht_bucket_html5_709, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_70C, ht_bucket_empty, ht_bucket_html5_70E, ht_bucket_html5_70F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_712, ht_bucket_empty, ht_bucket_html5_714, ht_bucket_html5_715, ht_bucket_empty, ht_bucket_html5_717, ht_bucket_empty, ht_bucket_html5_719, ht_bucket_empty, ht_bucket_html5_71B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_71E, ht_bucket_html5_71F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_723, ht_bucket_html5_724, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_727, ht_bucket_empty, ht_bucket_html5_729, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_72C, ht_bucket_html5_72D, ht_bucket_html5_72E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_733, ht_bucket_html5_734, ht_bucket_html5_735, ht_bucket_html5_736, ht_bucket_empty, ht_bucket_html5_738, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_73B, ht_bucket_empty, ht_bucket_html5_73D, ht_bucket_html5_73E, ht_bucket_html5_73F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_744, ht_bucket_html5_745, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_749, ht_bucket_empty, ht_bucket_html5_74B, ht_bucket_html5_74C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_74F, ht_bucket_empty, ht_bucket_html5_751, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_754, ht_bucket_html5_755, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_759, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_75C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_75F, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_762, ht_bucket_html5_763, ht_bucket_empty, ht_bucket_html5_765, ht_bucket_html5_766, ht_bucket_empty, ht_bucket_html5_768, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_76E, ht_bucket_empty, ht_bucket_html5_770, ht_bucket_empty, ht_bucket_html5_772, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_776, ht_bucket_html5_777, ht_bucket_empty, ht_bucket_html5_779, ht_bucket_html5_77A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_77F, ht_bucket_empty, ht_bucket_html5_781, ht_bucket_empty, ht_bucket_html5_783, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_787, ht_bucket_empty, ht_bucket_html5_789, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_78C, ht_bucket_html5_78D, ht_bucket_html5_78E, ht_bucket_empty, ht_bucket_html5_790, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_794, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_797, ht_bucket_html5_798, ht_bucket_empty, ht_bucket_html5_79A, ht_bucket_html5_79B, ht_bucket_empty, ht_bucket_html5_79D, ht_bucket_empty, ht_bucket_html5_79F, ht_bucket_html5_7A0, ht_bucket_html5_7A1, ht_bucket_html5_7A2, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7A5, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7A8, ht_bucket_empty, ht_bucket_html5_7AA, ht_bucket_html5_7AB, ht_bucket_html5_7AC, ht_bucket_empty, ht_bucket_html5_7AE, ht_bucket_html5_7AF, ht_bucket_html5_7B0, ht_bucket_html5_7B1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7B5, ht_bucket_html5_7B6, ht_bucket_html5_7B7, ht_bucket_html5_7B8, ht_bucket_empty, ht_bucket_html5_7BA, ht_bucket_html5_7BB, ht_bucket_empty, ht_bucket_html5_7BD, ht_bucket_html5_7BE, ht_bucket_html5_7BF, ht_bucket_html5_7C0, ht_bucket_html5_7C1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7C9, ht_bucket_empty, ht_bucket_html5_7CB, ht_bucket_empty, ht_bucket_html5_7CD, ht_bucket_html5_7CE, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7D1, ht_bucket_html5_7D2, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7D5, ht_bucket_html5_7D6, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7D9, ht_bucket_html5_7DA, ht_bucket_empty, ht_bucket_html5_7DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7E0, ht_bucket_empty, ht_bucket_html5_7E2, ht_bucket_empty, ht_bucket_html5_7E4, ht_bucket_html5_7E5, ht_bucket_html5_7E6, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7EC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7EF, ht_bucket_empty, ht_bucket_html5_7F1, ht_bucket_empty, ht_bucket_html5_7F3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7F6, ht_bucket_empty, ht_bucket_html5_7F8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_7FB, ht_bucket_html5_7FC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_800, ht_bucket_empty, ht_bucket_html5_802, ht_bucket_html5_803, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_808, ht_bucket_html5_809, ht_bucket_html5_80A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_810, ht_bucket_html5_811, ht_bucket_html5_812, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_816, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_819, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_81C, ht_bucket_html5_81D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_821, ht_bucket_html5_822, ht_bucket_html5_823, ht_bucket_html5_824, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_828, ht_bucket_html5_829, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_82D, ht_bucket_html5_82E, ht_bucket_empty, ht_bucket_html5_830, ht_bucket_html5_831, ht_bucket_html5_832, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_837, ht_bucket_html5_838, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_83C, ht_bucket_empty, ht_bucket_html5_83E, ht_bucket_html5_83F, ht_bucket_empty, ht_bucket_html5_841, ht_bucket_html5_842, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_846, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_84A, ht_bucket_empty, ht_bucket_html5_84C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_84F, ht_bucket_html5_850, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_855, ht_bucket_empty, ht_bucket_html5_857, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_85B, ht_bucket_html5_85C, ht_bucket_empty, ht_bucket_html5_85E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_861, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_865, ht_bucket_html5_866, ht_bucket_html5_867, ht_bucket_html5_868, ht_bucket_empty, ht_bucket_html5_86A, ht_bucket_html5_86B, ht_bucket_html5_86C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_873, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_876, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_879, ht_bucket_empty, ht_bucket_html5_87B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_87E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_88A, ht_bucket_empty, ht_bucket_html5_88C, ht_bucket_empty, ht_bucket_html5_88E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_892, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_895, ht_bucket_html5_896, ht_bucket_html5_897, ht_bucket_html5_898, ht_bucket_html5_899, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_89D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8A5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8B3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8B6, ht_bucket_html5_8B7, ht_bucket_html5_8B8, ht_bucket_html5_8B9, ht_bucket_html5_8BA, ht_bucket_empty, ht_bucket_html5_8BC, ht_bucket_html5_8BD, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8C0, ht_bucket_html5_8C1, ht_bucket_html5_8C2, ht_bucket_empty, ht_bucket_html5_8C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8C7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8CF, ht_bucket_html5_8D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8D3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8D6, ht_bucket_empty, ht_bucket_html5_8D8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8DC, ht_bucket_html5_8DD, ht_bucket_html5_8DE, ht_bucket_html5_8DF, ht_bucket_html5_8E0, ht_bucket_empty, ht_bucket_html5_8E2, ht_bucket_html5_8E3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8E7, ht_bucket_html5_8E8, ht_bucket_html5_8E9, ht_bucket_empty, ht_bucket_html5_8EB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8F3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8FB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_8FE, ht_bucket_html5_8FF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_904, ht_bucket_empty, ht_bucket_html5_906, ht_bucket_html5_907, ht_bucket_empty, ht_bucket_html5_909, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_90C, ht_bucket_empty, ht_bucket_html5_90E, ht_bucket_empty, ht_bucket_html5_910, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_913, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_916, ht_bucket_empty, ht_bucket_html5_918, ht_bucket_html5_919, ht_bucket_empty, ht_bucket_html5_91B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_91E, ht_bucket_html5_91F, ht_bucket_html5_920, ht_bucket_empty, ht_bucket_html5_922, ht_bucket_html5_923, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_927, ht_bucket_empty, ht_bucket_html5_929, ht_bucket_html5_92A, ht_bucket_empty, ht_bucket_html5_92C, ht_bucket_empty, ht_bucket_html5_92E, ht_bucket_empty, ht_bucket_html5_930, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_936, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_939, ht_bucket_empty, ht_bucket_html5_93B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_93F, ht_bucket_html5_940, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_945, ht_bucket_empty, ht_bucket_html5_947, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_94D, ht_bucket_empty, ht_bucket_html5_94F, ht_bucket_html5_950, ht_bucket_empty, ht_bucket_html5_952, ht_bucket_html5_953, ht_bucket_html5_954, ht_bucket_html5_955, ht_bucket_html5_956, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_959, ht_bucket_empty, ht_bucket_html5_95B, ht_bucket_empty, ht_bucket_html5_95D, ht_bucket_empty, ht_bucket_html5_95F, ht_bucket_html5_960, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_963, ht_bucket_html5_964, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_969, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_96C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_96F, ht_bucket_html5_970, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_974, ht_bucket_html5_975, ht_bucket_html5_976, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_97B, ht_bucket_html5_97C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_97F, ht_bucket_empty, ht_bucket_html5_981, ht_bucket_empty, ht_bucket_html5_983, ht_bucket_empty, ht_bucket_html5_985, ht_bucket_html5_986, ht_bucket_empty, ht_bucket_html5_988, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_98C, ht_bucket_html5_98D, ht_bucket_empty, ht_bucket_html5_98F, ht_bucket_html5_990, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_996, ht_bucket_html5_997, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_99B, ht_bucket_html5_99C, ht_bucket_empty, ht_bucket_html5_99E, ht_bucket_html5_99F, ht_bucket_html5_9A0, ht_bucket_html5_9A1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9A6, ht_bucket_empty, ht_bucket_html5_9A8, ht_bucket_empty, ht_bucket_html5_9AA, ht_bucket_empty, ht_bucket_html5_9AC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9B4, ht_bucket_html5_9B5, ht_bucket_html5_9B6, ht_bucket_html5_9B7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9BB, ht_bucket_html5_9BC, ht_bucket_html5_9BD, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9C1, ht_bucket_html5_9C2, ht_bucket_html5_9C3, ht_bucket_empty, ht_bucket_html5_9C5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9C9, ht_bucket_html5_9CA, ht_bucket_empty, ht_bucket_html5_9CC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9CF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9D5, ht_bucket_html5_9D6, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9DA, ht_bucket_html5_9DB, ht_bucket_empty, ht_bucket_html5_9DD, ht_bucket_html5_9DE, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9E1, ht_bucket_html5_9E2, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9E5, ht_bucket_empty, ht_bucket_html5_9E7, ht_bucket_empty, ht_bucket_html5_9E9, ht_bucket_empty, ht_bucket_html5_9EB, ht_bucket_empty, ht_bucket_html5_9ED, ht_bucket_html5_9EE, ht_bucket_html5_9EF, ht_bucket_html5_9F0, ht_bucket_html5_9F1, ht_bucket_html5_9F2, ht_bucket_html5_9F3, ht_bucket_html5_9F4, ht_bucket_html5_9F5, ht_bucket_empty, ht_bucket_html5_9F7, ht_bucket_empty, ht_bucket_html5_9F9, ht_bucket_html5_9FA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_9FD, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A01, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A04, ht_bucket_html5_A05, ht_bucket_html5_A06, ht_bucket_empty, ht_bucket_html5_A08, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A0C, ht_bucket_html5_A0D, ht_bucket_html5_A0E, ht_bucket_empty, ht_bucket_html5_A10, ht_bucket_empty, ht_bucket_html5_A12, ht_bucket_empty, ht_bucket_html5_A14, ht_bucket_html5_A15, ht_bucket_html5_A16, ht_bucket_html5_A17, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A21, ht_bucket_empty, ht_bucket_html5_A23, ht_bucket_html5_A24, ht_bucket_html5_A25, ht_bucket_html5_A26, ht_bucket_empty, ht_bucket_html5_A28, ht_bucket_empty, ht_bucket_html5_A2A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A2D, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A30, ht_bucket_empty, ht_bucket_html5_A32, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A36, ht_bucket_html5_A37, ht_bucket_empty, ht_bucket_html5_A39, ht_bucket_empty, ht_bucket_html5_A3B, ht_bucket_html5_A3C, ht_bucket_html5_A3D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A41, ht_bucket_empty, ht_bucket_html5_A43, ht_bucket_html5_A44, ht_bucket_html5_A45, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A48, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A4F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A53, ht_bucket_html5_A54, ht_bucket_empty, ht_bucket_html5_A56, ht_bucket_html5_A57, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A5A, ht_bucket_html5_A5B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A61, ht_bucket_html5_A62, ht_bucket_html5_A63, ht_bucket_html5_A64, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A69, ht_bucket_html5_A6A, ht_bucket_html5_A6B, ht_bucket_empty, ht_bucket_html5_A6D, ht_bucket_empty, ht_bucket_html5_A6F, ht_bucket_html5_A70, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A76, ht_bucket_empty, ht_bucket_html5_A78, ht_bucket_empty, ht_bucket_html5_A7A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A7E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A81, ht_bucket_html5_A82, ht_bucket_empty, ht_bucket_html5_A84, ht_bucket_html5_A85, ht_bucket_html5_A86, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A89, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A8D, ht_bucket_html5_A8E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A92, ht_bucket_empty, ht_bucket_html5_A94, ht_bucket_empty, ht_bucket_html5_A96, ht_bucket_empty, ht_bucket_html5_A98, ht_bucket_html5_A99, ht_bucket_html5_A9A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_A9D, ht_bucket_empty, ht_bucket_html5_A9F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AA3, ht_bucket_html5_AA4, ht_bucket_html5_AA5, ht_bucket_empty, ht_bucket_html5_AA7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AAC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AB2, ht_bucket_empty, ht_bucket_html5_AB4, ht_bucket_html5_AB5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ABA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AC0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AC4, ht_bucket_html5_AC5, ht_bucket_html5_AC6, ht_bucket_html5_AC7, ht_bucket_html5_AC8, ht_bucket_empty, ht_bucket_html5_ACA, ht_bucket_empty, ht_bucket_html5_ACC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ACF, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AD2, ht_bucket_html5_AD3, ht_bucket_html5_AD4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ADA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ADD, ht_bucket_empty, ht_bucket_html5_ADF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AE4, ht_bucket_html5_AE5, ht_bucket_html5_AE6, ht_bucket_html5_AE7, ht_bucket_html5_AE8, ht_bucket_html5_AE9, ht_bucket_empty, ht_bucket_html5_AEB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AF5, ht_bucket_html5_AF6, ht_bucket_html5_AF7, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AFA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_AFD, ht_bucket_html5_AFE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B08, ht_bucket_html5_B09, ht_bucket_html5_B0A, ht_bucket_empty, ht_bucket_html5_B0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B10, ht_bucket_html5_B11, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B15, ht_bucket_html5_B16, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B1E, ht_bucket_html5_B1F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B23, ht_bucket_html5_B24, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B27, ht_bucket_empty, ht_bucket_html5_B29, ht_bucket_html5_B2A, ht_bucket_html5_B2B, ht_bucket_html5_B2C, ht_bucket_html5_B2D, ht_bucket_html5_B2E, ht_bucket_html5_B2F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B33, ht_bucket_empty, ht_bucket_html5_B35, ht_bucket_html5_B36, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B3A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B3D, ht_bucket_html5_B3E, ht_bucket_empty, ht_bucket_html5_B40, ht_bucket_empty, ht_bucket_html5_B42, ht_bucket_empty, ht_bucket_html5_B44, ht_bucket_empty, ht_bucket_html5_B46, ht_bucket_html5_B47, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B4C, ht_bucket_empty, ht_bucket_html5_B4E, ht_bucket_html5_B4F, ht_bucket_html5_B50, ht_bucket_html5_B51, ht_bucket_html5_B52, ht_bucket_html5_B53, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B56, ht_bucket_empty, ht_bucket_html5_B58, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B5C, ht_bucket_html5_B5D, ht_bucket_html5_B5E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B63, ht_bucket_html5_B64, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B67, ht_bucket_empty, ht_bucket_html5_B69, ht_bucket_empty, ht_bucket_html5_B6B, ht_bucket_empty, ht_bucket_html5_B6D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B72, ht_bucket_html5_B73, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B77, ht_bucket_html5_B78, ht_bucket_empty, ht_bucket_html5_B7A, ht_bucket_html5_B7B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B7E, ht_bucket_html5_B7F, ht_bucket_empty, ht_bucket_html5_B81, ht_bucket_html5_B82, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B87, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B8D, ht_bucket_empty, ht_bucket_html5_B8F, ht_bucket_html5_B90, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B94, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_B98, ht_bucket_html5_B99, ht_bucket_html5_B9A, ht_bucket_empty, ht_bucket_html5_B9C, ht_bucket_html5_B9D, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BA5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BA9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BAE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BB2, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BB5, ht_bucket_html5_BB6, ht_bucket_html5_BB7, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BBA, ht_bucket_empty, ht_bucket_html5_BBC, ht_bucket_html5_BBD, ht_bucket_empty, ht_bucket_html5_BBF, ht_bucket_empty, ht_bucket_html5_BC1, ht_bucket_html5_BC2, ht_bucket_html5_BC3, ht_bucket_html5_BC4, ht_bucket_html5_BC5, ht_bucket_html5_BC6, ht_bucket_html5_BC7, ht_bucket_html5_BC8, ht_bucket_html5_BC9, ht_bucket_empty, ht_bucket_html5_BCB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BCE, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BD1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BD7, ht_bucket_html5_BD8, ht_bucket_html5_BD9, ht_bucket_html5_BDA, ht_bucket_html5_BDB, ht_bucket_empty, ht_bucket_html5_BDD, ht_bucket_empty, ht_bucket_html5_BDF, ht_bucket_empty, ht_bucket_html5_BE1, ht_bucket_html5_BE2, ht_bucket_empty, ht_bucket_html5_BE4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BE7, ht_bucket_html5_BE8, ht_bucket_html5_BE9, ht_bucket_html5_BEA, ht_bucket_html5_BEB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BEF, ht_bucket_html5_BF0, ht_bucket_html5_BF1, ht_bucket_html5_BF2, ht_bucket_html5_BF3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_BF7, ht_bucket_empty, ht_bucket_html5_BF9, ht_bucket_html5_BFA, ht_bucket_empty, ht_bucket_html5_BFC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C02, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C0B, ht_bucket_html5_C0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C11, ht_bucket_html5_C12, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C16, ht_bucket_empty, ht_bucket_html5_C18, ht_bucket_empty, ht_bucket_html5_C1A, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C1D, ht_bucket_html5_C1E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C23, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C27, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C2B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C31, ht_bucket_html5_C32, ht_bucket_html5_C33, ht_bucket_html5_C34, ht_bucket_html5_C35, ht_bucket_html5_C36, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C3A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C3E, ht_bucket_html5_C3F, ht_bucket_html5_C40, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C43, ht_bucket_html5_C44, ht_bucket_empty, ht_bucket_html5_C46, ht_bucket_empty, ht_bucket_html5_C48, ht_bucket_empty, ht_bucket_html5_C4A, ht_bucket_html5_C4B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C4F, ht_bucket_html5_C50, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C54, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C58, ht_bucket_empty, ht_bucket_html5_C5A, ht_bucket_html5_C5B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C5F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C69, ht_bucket_empty, ht_bucket_html5_C6B, ht_bucket_html5_C6C, ht_bucket_empty, ht_bucket_html5_C6E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C72, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C76, ht_bucket_html5_C77, ht_bucket_html5_C78, ht_bucket_empty, ht_bucket_html5_C7A, ht_bucket_html5_C7B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C80, ht_bucket_empty, ht_bucket_html5_C82, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C89, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C8E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C91, ht_bucket_empty, ht_bucket_html5_C93, ht_bucket_html5_C94, ht_bucket_html5_C95, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_C98, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CA6, ht_bucket_empty, ht_bucket_html5_CA8, ht_bucket_html5_CA9, ht_bucket_html5_CAA, ht_bucket_empty, ht_bucket_html5_CAC, ht_bucket_html5_CAD, ht_bucket_empty, ht_bucket_html5_CAF, ht_bucket_html5_CB0, ht_bucket_empty, ht_bucket_html5_CB2, ht_bucket_empty, ht_bucket_html5_CB4, ht_bucket_empty, ht_bucket_html5_CB6, ht_bucket_html5_CB7, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CBA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CBE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CC2, ht_bucket_empty, ht_bucket_html5_CC4, ht_bucket_html5_CC5, ht_bucket_empty, ht_bucket_html5_CC7, ht_bucket_html5_CC8, ht_bucket_html5_CC9, ht_bucket_empty, ht_bucket_html5_CCB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CD0, ht_bucket_empty, ht_bucket_html5_CD2, ht_bucket_html5_CD3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CD9, ht_bucket_html5_CDA, ht_bucket_empty, ht_bucket_html5_CDC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CE4, ht_bucket_empty, ht_bucket_html5_CE6, ht_bucket_empty, ht_bucket_html5_CE8, ht_bucket_html5_CE9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CED, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CF1, ht_bucket_html5_CF2, ht_bucket_html5_CF3, ht_bucket_html5_CF4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CFA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_CFF, ht_bucket_html5_D00, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D06, ht_bucket_html5_D07, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D0B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D0E, ht_bucket_empty, ht_bucket_html5_D10, ht_bucket_html5_D11, ht_bucket_html5_D12, ht_bucket_html5_D13, ht_bucket_empty, ht_bucket_html5_D15, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D18, ht_bucket_html5_D19, ht_bucket_html5_D1A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D1E, ht_bucket_html5_D1F, ht_bucket_html5_D20, ht_bucket_empty, ht_bucket_html5_D22, ht_bucket_empty, ht_bucket_html5_D24, ht_bucket_empty, ht_bucket_html5_D26, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D2A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D32, ht_bucket_empty, ht_bucket_html5_D34, ht_bucket_html5_D35, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D38, ht_bucket_html5_D39, ht_bucket_html5_D3A, ht_bucket_html5_D3B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D3E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D42, ht_bucket_empty, ht_bucket_html5_D44, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D49, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D4C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D4F, ht_bucket_empty, ht_bucket_html5_D51, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D54, ht_bucket_html5_D55, ht_bucket_html5_D56, ht_bucket_html5_D57, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D5A, ht_bucket_html5_D5B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D5F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D63, ht_bucket_empty, ht_bucket_html5_D65, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D69, ht_bucket_html5_D6A, ht_bucket_empty, ht_bucket_html5_D6C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D6F, ht_bucket_html5_D70, ht_bucket_html5_D71, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D74, ht_bucket_html5_D75, ht_bucket_html5_D76, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D7C, ht_bucket_html5_D7D, ht_bucket_html5_D7E, ht_bucket_empty, ht_bucket_html5_D80, ht_bucket_html5_D81, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_D85, ht_bucket_empty, ht_bucket_html5_D87, ht_bucket_empty, ht_bucket_html5_D89, ht_bucket_html5_D8A, ht_bucket_empty, ht_bucket_html5_D8C, ht_bucket_html5_D8D, ht_bucket_html5_D8E, ht_bucket_html5_D8F, ht_bucket_html5_D90, ht_bucket_html5_D91, ht_bucket_empty, ht_bucket_html5_D93, ht_bucket_html5_D94, ht_bucket_html5_D95, ht_bucket_html5_D96, ht_bucket_empty, ht_bucket_html5_D98, ht_bucket_empty, ht_bucket_html5_D9A, ht_bucket_empty, ht_bucket_html5_D9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DA0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DA5, ht_bucket_html5_DA6, ht_bucket_empty, ht_bucket_html5_DA8, ht_bucket_html5_DA9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DAC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DB0, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DB3, ht_bucket_html5_DB4, ht_bucket_empty, ht_bucket_html5_DB6, ht_bucket_html5_DB7, ht_bucket_empty, ht_bucket_html5_DB9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DBC, ht_bucket_empty, ht_bucket_html5_DBE, ht_bucket_html5_DBF, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DC2, ht_bucket_html5_DC3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DC6, ht_bucket_empty, ht_bucket_html5_DC8, ht_bucket_empty, ht_bucket_html5_DCA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DCF, ht_bucket_empty, ht_bucket_html5_DD1, ht_bucket_empty, ht_bucket_html5_DD3, ht_bucket_html5_DD4, ht_bucket_html5_DD5, ht_bucket_empty, ht_bucket_html5_DD7, ht_bucket_empty, ht_bucket_html5_DD9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DDC, ht_bucket_html5_DDD, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DE4, ht_bucket_empty, ht_bucket_html5_DE6, ht_bucket_html5_DE7, ht_bucket_empty, ht_bucket_html5_DE9, ht_bucket_empty, ht_bucket_html5_DEB, ht_bucket_empty, ht_bucket_html5_DED, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DF1, ht_bucket_html5_DF2, ht_bucket_html5_DF3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_DF6, ht_bucket_html5_DF7, ht_bucket_empty, ht_bucket_html5_DF9, ht_bucket_empty, ht_bucket_html5_DFB, ht_bucket_empty, ht_bucket_html5_DFD, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E03, ht_bucket_html5_E04, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E08, ht_bucket_html5_E09, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E0C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E11, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E18, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E1B, ht_bucket_html5_E1C, ht_bucket_html5_E1D, ht_bucket_html5_E1E, ht_bucket_empty, ht_bucket_html5_E20, ht_bucket_empty, ht_bucket_html5_E22, ht_bucket_html5_E23, ht_bucket_html5_E24, ht_bucket_html5_E25, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E28, ht_bucket_empty, ht_bucket_html5_E2A, ht_bucket_empty, ht_bucket_html5_E2C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E2F, ht_bucket_html5_E30, ht_bucket_empty, ht_bucket_html5_E32, ht_bucket_html5_E33, ht_bucket_empty, ht_bucket_html5_E35, ht_bucket_html5_E36, ht_bucket_html5_E37, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E3B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E41, ht_bucket_html5_E42, ht_bucket_html5_E43, ht_bucket_html5_E44, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E48, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E4C, ht_bucket_empty, ht_bucket_html5_E4E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E53, ht_bucket_empty, ht_bucket_html5_E55, ht_bucket_empty, ht_bucket_html5_E57, ht_bucket_html5_E58, ht_bucket_html5_E59, ht_bucket_empty, ht_bucket_html5_E5B, ht_bucket_empty, ht_bucket_html5_E5D, ht_bucket_html5_E5E, ht_bucket_html5_E5F, ht_bucket_html5_E60, ht_bucket_html5_E61, ht_bucket_empty, ht_bucket_html5_E63, ht_bucket_html5_E64, ht_bucket_html5_E65, ht_bucket_html5_E66, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E6A, ht_bucket_empty, ht_bucket_html5_E6C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E6F, ht_bucket_html5_E70, ht_bucket_html5_E71, ht_bucket_empty, ht_bucket_html5_E73, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E78, ht_bucket_empty, ht_bucket_html5_E7A, ht_bucket_empty, ht_bucket_html5_E7C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E80, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E83, ht_bucket_html5_E84, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E89, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E8E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E91, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E99, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_E9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EA1, ht_bucket_html5_EA2, ht_bucket_empty, ht_bucket_html5_EA4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EA8, ht_bucket_html5_EA9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EB1, ht_bucket_html5_EB2, ht_bucket_empty, ht_bucket_html5_EB4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EB7, ht_bucket_html5_EB8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ECA, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ECD, ht_bucket_empty, ht_bucket_html5_ECF, ht_bucket_empty, ht_bucket_html5_ED1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_ED7, ht_bucket_html5_ED8, ht_bucket_html5_ED9, ht_bucket_html5_EDA, ht_bucket_html5_EDB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EDF, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EE2, ht_bucket_empty, ht_bucket_html5_EE4, ht_bucket_html5_EE5, ht_bucket_empty, ht_bucket_html5_EE7, ht_bucket_empty, ht_bucket_html5_EE9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EEF, ht_bucket_empty, ht_bucket_html5_EF1, ht_bucket_html5_EF2, ht_bucket_empty, ht_bucket_html5_EF4, ht_bucket_html5_EF5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EF9, ht_bucket_empty, ht_bucket_html5_EFB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_EFE, ht_bucket_html5_EFF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F03, ht_bucket_empty, ht_bucket_html5_F05, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F08, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F0B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F0F, ht_bucket_html5_F10, ht_bucket_html5_F11, ht_bucket_empty, ht_bucket_html5_F13, ht_bucket_html5_F14, ht_bucket_html5_F15, ht_bucket_empty, ht_bucket_html5_F17, ht_bucket_html5_F18, ht_bucket_html5_F19, ht_bucket_html5_F1A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F1F, ht_bucket_html5_F20, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F26, ht_bucket_empty, ht_bucket_html5_F28, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F2C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F2F, ht_bucket_html5_F30, ht_bucket_html5_F31, ht_bucket_empty, ht_bucket_html5_F33, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F37, ht_bucket_html5_F38, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F40, ht_bucket_html5_F41, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F44, ht_bucket_empty, ht_bucket_html5_F46, ht_bucket_html5_F47, ht_bucket_html5_F48, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F4B, ht_bucket_html5_F4C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F50, ht_bucket_html5_F51, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F55, ht_bucket_empty, ht_bucket_html5_F57, ht_bucket_html5_F58, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F5B, ht_bucket_empty, ht_bucket_html5_F5D, ht_bucket_empty, ht_bucket_html5_F5F, ht_bucket_html5_F60, ht_bucket_empty, ht_bucket_html5_F62, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F67, ht_bucket_html5_F68, ht_bucket_html5_F69, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F6D, ht_bucket_html5_F6E, ht_bucket_html5_F6F, ht_bucket_html5_F70, ht_bucket_html5_F71, ht_bucket_html5_F72, ht_bucket_empty, ht_bucket_html5_F74, ht_bucket_html5_F75, ht_bucket_html5_F76, ht_bucket_html5_F77, ht_bucket_html5_F78, ht_bucket_html5_F79, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F81, ht_bucket_html5_F82, ht_bucket_html5_F83, ht_bucket_html5_F84, ht_bucket_empty, ht_bucket_html5_F86, ht_bucket_empty, ht_bucket_html5_F88, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F8B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F8F, ht_bucket_empty, ht_bucket_html5_F91, ht_bucket_empty, ht_bucket_html5_F93, ht_bucket_empty, ht_bucket_html5_F95, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F9A, ht_bucket_empty, ht_bucket_html5_F9C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_F9F, ht_bucket_html5_FA0, ht_bucket_html5_FA1, ht_bucket_html5_FA2, ht_bucket_html5_FA3, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FA9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FB0, ht_bucket_html5_FB1, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FB4, ht_bucket_html5_FB5, ht_bucket_html5_FB6, ht_bucket_html5_FB7, ht_bucket_empty, ht_bucket_html5_FB9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FBC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FC2, ht_bucket_empty, ht_bucket_html5_FC4, ht_bucket_empty, ht_bucket_html5_FC6, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FCA, ht_bucket_empty, ht_bucket_html5_FCC, ht_bucket_empty, ht_bucket_html5_FCE, ht_bucket_html5_FCF, ht_bucket_html5_FD0, ht_bucket_empty, ht_bucket_html5_FD2, ht_bucket_html5_FD3, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FD6, ht_bucket_html5_FD7, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FDD, ht_bucket_empty, ht_bucket_html5_FDF, ht_bucket_empty, ht_bucket_html5_FE1, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FE6, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FE9, ht_bucket_html5_FEA, ht_bucket_html5_FEB, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FF5, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FF8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html5_FFC, ht_bucket_empty, ht_bucket_html5_FFE, ht_bucket_empty, }; static const entity_ht ent_ht_html5 = { 0x1000, ht_buckets_html5 }; /* end of HTML5 hash table for entity -> codepoint }}} */ /* {{{ Start of HTML 4.01 multi-stage table for codepoint -> entity */ /* {{{ Stage 3 Tables for HTML 4.01 */ static const entity_stage3_row stage3_table_html4_00000[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"quot", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amp", 3} } }, {0, { {"#039", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lt", 2} } }, {0, { {NULL, 0} } }, {0, { {"gt", 2} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_00080[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"nbsp", 4} } }, {0, { {"iexcl", 5} } }, {0, { {"cent", 4} } }, {0, { {"pound", 5} } }, {0, { {"curren", 6} } }, {0, { {"yen", 3} } }, {0, { {"brvbar", 6} } }, {0, { {"sect", 4} } }, {0, { {"uml", 3} } }, {0, { {"copy", 4} } }, {0, { {"ordf", 4} } }, {0, { {"laquo", 5} } }, {0, { {"not", 3} } }, {0, { {"shy", 3} } }, {0, { {"reg", 3} } }, {0, { {"macr", 4} } }, {0, { {"deg", 3} } }, {0, { {"plusmn", 6} } }, {0, { {"sup2", 4} } }, {0, { {"sup3", 4} } }, {0, { {"acute", 5} } }, {0, { {"micro", 5} } }, {0, { {"para", 4} } }, {0, { {"middot", 6} } }, {0, { {"cedil", 5} } }, {0, { {"sup1", 4} } }, {0, { {"ordm", 4} } }, {0, { {"raquo", 5} } }, {0, { {"frac14", 6} } }, {0, { {"frac12", 6} } }, {0, { {"frac34", 6} } }, {0, { {"iquest", 6} } }, }; static const entity_stage3_row stage3_table_html4_000C0[] = { {0, { {"Agrave", 6} } }, {0, { {"Aacute", 6} } }, {0, { {"Acirc", 5} } }, {0, { {"Atilde", 6} } }, {0, { {"Auml", 4} } }, {0, { {"Aring", 5} } }, {0, { {"AElig", 5} } }, {0, { {"Ccedil", 6} } }, {0, { {"Egrave", 6} } }, {0, { {"Eacute", 6} } }, {0, { {"Ecirc", 5} } }, {0, { {"Euml", 4} } }, {0, { {"Igrave", 6} } }, {0, { {"Iacute", 6} } }, {0, { {"Icirc", 5} } }, {0, { {"Iuml", 4} } }, {0, { {"ETH", 3} } }, {0, { {"Ntilde", 6} } }, {0, { {"Ograve", 6} } }, {0, { {"Oacute", 6} } }, {0, { {"Ocirc", 5} } }, {0, { {"Otilde", 6} } }, {0, { {"Ouml", 4} } }, {0, { {"times", 5} } }, {0, { {"Oslash", 6} } }, {0, { {"Ugrave", 6} } }, {0, { {"Uacute", 6} } }, {0, { {"Ucirc", 5} } }, {0, { {"Uuml", 4} } }, {0, { {"Yacute", 6} } }, {0, { {"THORN", 5} } }, {0, { {"szlig", 5} } }, {0, { {"agrave", 6} } }, {0, { {"aacute", 6} } }, {0, { {"acirc", 5} } }, {0, { {"atilde", 6} } }, {0, { {"auml", 4} } }, {0, { {"aring", 5} } }, {0, { {"aelig", 5} } }, {0, { {"ccedil", 6} } }, {0, { {"egrave", 6} } }, {0, { {"eacute", 6} } }, {0, { {"ecirc", 5} } }, {0, { {"euml", 4} } }, {0, { {"igrave", 6} } }, {0, { {"iacute", 6} } }, {0, { {"icirc", 5} } }, {0, { {"iuml", 4} } }, {0, { {"eth", 3} } }, {0, { {"ntilde", 6} } }, {0, { {"ograve", 6} } }, {0, { {"oacute", 6} } }, {0, { {"ocirc", 5} } }, {0, { {"otilde", 6} } }, {0, { {"ouml", 4} } }, {0, { {"divide", 6} } }, {0, { {"oslash", 6} } }, {0, { {"ugrave", 6} } }, {0, { {"uacute", 6} } }, {0, { {"ucirc", 5} } }, {0, { {"uuml", 4} } }, {0, { {"yacute", 6} } }, {0, { {"thorn", 5} } }, {0, { {"yuml", 4} } }, }; static const entity_stage3_row stage3_table_html4_00140[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"OElig", 5} } }, {0, { {"oelig", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Scaron", 6} } }, {0, { {"scaron", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Yuml", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_00180[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"fnof", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_002C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"circ", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"tilde", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_00380[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"Alpha", 5} } }, {0, { {"Beta", 4} } }, {0, { {"Gamma", 5} } }, {0, { {"Delta", 5} } }, {0, { {"Epsilon", 7} } }, {0, { {"Zeta", 4} } }, {0, { {"Eta", 3} } }, {0, { {"Theta", 5} } }, {0, { {"Iota", 4} } }, {0, { {"Kappa", 5} } }, {0, { {"Lambda", 6} } }, {0, { {"Mu", 2} } }, {0, { {"Nu", 2} } }, {0, { {"Xi", 2} } }, {0, { {"Omicron", 7} } }, {0, { {"Pi", 2} } }, {0, { {"Rho", 3} } }, {0, { {NULL, 0} } }, {0, { {"Sigma", 5} } }, {0, { {"Tau", 3} } }, {0, { {"Upsilon", 7} } }, {0, { {"Phi", 3} } }, {0, { {"Chi", 3} } }, {0, { {"Psi", 3} } }, {0, { {"Omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"alpha", 5} } }, {0, { {"beta", 4} } }, {0, { {"gamma", 5} } }, {0, { {"delta", 5} } }, {0, { {"epsilon", 7} } }, {0, { {"zeta", 4} } }, {0, { {"eta", 3} } }, {0, { {"theta", 5} } }, {0, { {"iota", 4} } }, {0, { {"kappa", 5} } }, {0, { {"lambda", 6} } }, {0, { {"mu", 2} } }, {0, { {"nu", 2} } }, {0, { {"xi", 2} } }, {0, { {"omicron", 7} } }, }; static const entity_stage3_row stage3_table_html4_003C0[] = { {0, { {"pi", 2} } }, {0, { {"rho", 3} } }, {0, { {"sigmaf", 6} } }, {0, { {"sigma", 5} } }, {0, { {"tau", 3} } }, {0, { {"upsilon", 7} } }, {0, { {"phi", 3} } }, {0, { {"chi", 3} } }, {0, { {"psi", 3} } }, {0, { {"omega", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"thetasym", 8} } }, {0, { {"upsih", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"piv", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02000[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ensp", 4} } }, {0, { {"emsp", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"thinsp", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"zwnj", 4} } }, {0, { {"zwj", 3} } }, {0, { {"lrm", 3} } }, {0, { {"rlm", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ndash", 5} } }, {0, { {"mdash", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lsquo", 5} } }, {0, { {"rsquo", 5} } }, {0, { {"sbquo", 5} } }, {0, { {NULL, 0} } }, {0, { {"ldquo", 5} } }, {0, { {"rdquo", 5} } }, {0, { {"bdquo", 5} } }, {0, { {NULL, 0} } }, {0, { {"dagger", 6} } }, {0, { {"Dagger", 6} } }, {0, { {"bull", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"hellip", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"permil", 6} } }, {0, { {NULL, 0} } }, {0, { {"prime", 5} } }, {0, { {"Prime", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lsaquo", 6} } }, {0, { {"rsaquo", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"oline", 5} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02040[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"frasl", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02080[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"euro", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02100[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"image", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"weierp", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"real", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"trade", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"alefsym", 7} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02180[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"larr", 4} } }, {0, { {"uarr", 4} } }, {0, { {"rarr", 4} } }, {0, { {"darr", 4} } }, {0, { {"harr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"crarr", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_021C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lArr", 4} } }, {0, { {"uArr", 4} } }, {0, { {"rArr", 4} } }, {0, { {"dArr", 4} } }, {0, { {"hArr", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02200[] = { {0, { {"forall", 6} } }, {0, { {NULL, 0} } }, {0, { {"part", 4} } }, {0, { {"exist", 5} } }, {0, { {NULL, 0} } }, {0, { {"empty", 5} } }, {0, { {NULL, 0} } }, {0, { {"nabla", 5} } }, {0, { {"isin", 4} } }, {0, { {"notin", 5} } }, {0, { {NULL, 0} } }, {0, { {"ni", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prod", 4} } }, {0, { {NULL, 0} } }, {0, { {"sum", 3} } }, {0, { {"minus", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lowast", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"radic", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"prop", 4} } }, {0, { {"infin", 5} } }, {0, { {NULL, 0} } }, {0, { {"ang", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"and", 3} } }, {0, { {"or", 2} } }, {0, { {"cap", 3} } }, {0, { {"cup", 3} } }, {0, { {"int", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"there4", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sim", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02240[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"cong", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"asymp", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"ne", 2} } }, {0, { {"equiv", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"le", 2} } }, {0, { {"ge", 2} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02280[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sub", 3} } }, {0, { {"sup", 3} } }, {0, { {"nsub", 4} } }, {0, { {NULL, 0} } }, {0, { {"sube", 4} } }, {0, { {"supe", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"oplus", 5} } }, {0, { {NULL, 0} } }, {0, { {"otimes", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"perp", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_022C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"sdot", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02300[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lceil", 5} } }, {0, { {"rceil", 5} } }, {0, { {"lfloor", 6} } }, {0, { {"rfloor", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lang", 4} } }, {0, { {"rang", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_025C0[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"loz", 3} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; static const entity_stage3_row stage3_table_html4_02640[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"spades", 6} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"clubs", 5} } }, {0, { {NULL, 0} } }, {0, { {"hearts", 6} } }, {0, { {"diams", 5} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, }; /* end of stage 3 Tables for HTML 4.01 }}} */ /* {{{ Stage 2 Tables for HTML 4.01 */ static const entity_stage2_row stage2_table_html4_00000[] = { stage3_table_html4_00000, empty_stage3_table, stage3_table_html4_00080, stage3_table_html4_000C0, empty_stage3_table, stage3_table_html4_00140, stage3_table_html4_00180, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html4_002C0, empty_stage3_table, empty_stage3_table, stage3_table_html4_00380, stage3_table_html4_003C0, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; static const entity_stage2_row stage2_table_html4_02000[] = { stage3_table_html4_02000, stage3_table_html4_02040, stage3_table_html4_02080, empty_stage3_table, stage3_table_html4_02100, empty_stage3_table, stage3_table_html4_02180, stage3_table_html4_021C0, stage3_table_html4_02200, stage3_table_html4_02240, stage3_table_html4_02280, stage3_table_html4_022C0, stage3_table_html4_02300, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, stage3_table_html4_025C0, empty_stage3_table, stage3_table_html4_02640, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, empty_stage3_table, }; /* end of stage 2 tables for HTML 4.01 }}} */ static const entity_stage1_row entity_ms_table_html4[] = { stage2_table_html4_00000, empty_stage2_table, stage2_table_html4_02000, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, empty_stage2_table, }; /* end of HTML 4.01 multi-stage table for codepoint -> entity }}} */ /* {{{ HTML 4.01 hash table for entity -> codepoint */ static const entity_cp_map ht_bucket_html4_000[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_003[] = { {"Igrave", 6, 0x000CC, 0}, {"amp", 3, 0x00026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_006[] = { {"oacute", 6, 0x000F3, 0}, {"Xi", 2, 0x0039E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_008[] = { {"uuml", 4, 0x000FC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_00B[] = { {"Alpha", 5, 0x00391, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_00E[] = { {"sim", 3, 0x0223C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_012[] = { {"kappa", 5, 0x003BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_016[] = { {"lArr", 4, 0x021D0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_018[] = { {"and", 3, 0x02227, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_01B[] = { {"ang", 3, 0x02220, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_020[] = { {"copy", 4, 0x000A9, 0}, {"Iacute", 6, 0x000CD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_023[] = { {"igrave", 6, 0x000EC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_026[] = { {"xi", 2, 0x003BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_027[] = { {"Acirc", 5, 0x000C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_02B[] = { {"Ecirc", 5, 0x000CA, 0}, {"alpha", 5, 0x003B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_02C[] = { {"hearts", 6, 0x02665, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_02F[] = { {"Icirc", 5, 0x000CE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_030[] = { {"Yacute", 6, 0x000DD, 0}, {"int", 3, 0x0222B, 0}, {"rlm", 3, 0x0200F, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_034[] = { {"empty", 5, 0x02205, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_036[] = { {"larr", 4, 0x02190, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_03B[] = { {"Ucirc", 5, 0x000DB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_03C[] = { {"oline", 5, 0x0203E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_040[] = { {"iacute", 6, 0x000ED, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_046[] = { {"middot", 6, 0x000B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_047[] = { {"acirc", 5, 0x000E2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_04B[] = { {"ecirc", 5, 0x000EA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_04F[] = { {"icirc", 5, 0x000EE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_050[] = { {"yacute", 6, 0x000FD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_051[] = { {"minus", 5, 0x02212, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_054[] = { {"Auml", 4, 0x000C4, 0}, {"thetasym", 8, 0x003D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_056[] = { {"Sigma", 5, 0x003A3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_059[] = { {"lsquo", 5, 0x02018, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_05B[] = { {"ucirc", 5, 0x000FB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_05C[] = { {"rArr", 4, 0x021D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_064[] = { {"brvbar", 6, 0x000A6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_067[] = { {"AElig", 5, 0x000C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_069[] = { {"Ccedil", 6, 0x000C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_071[] = { {"Psi", 3, 0x003A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_072[] = { {"exist", 5, 0x02203, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_074[] = { {"auml", 4, 0x000E4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_076[] = { {"sigma", 5, 0x003C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_078[] = { {"isin", 4, 0x02208, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_07C[] = { {"rarr", 4, 0x02192, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_089[] = { {"ccedil", 6, 0x000E7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_08D[] = { {"raquo", 5, 0x000BB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_08E[] = { {"Omega", 5, 0x003A9, 0}, {"zwnj", 4, 0x0200C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_091[] = { {"psi", 3, 0x003C8, 0}, {"there4", 6, 0x02234, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_092[] = { {"hArr", 4, 0x021D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_096[] = { {"le", 2, 0x02264, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_098[] = { {"Atilde", 6, 0x000C3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_099[] = { {"Zeta", 4, 0x00396, 0}, {"infin", 5, 0x0221E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_09D[] = { {"frasl", 5, 0x02044, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0A0[] = { {"euro", 4, 0x020AC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0A5[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0A7[] = { {"aelig", 5, 0x000E6, 0}, {"Mu", 2, 0x0039C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0A8[] = { {"macr", 4, 0x000AF, 0}, {"image", 5, 0x02111, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0AA[] = { {"ldquo", 5, 0x0201C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0AE[] = { {"omega", 5, 0x003C9, 0}, {"upsih", 5, 0x003D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0B0[] = { {"THORN", 5, 0x000DE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0B2[] = { {"Iota", 4, 0x00399, 0}, {"harr", 4, 0x02194, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0B4[] = { {"bull", 4, 0x02022, 0}, {"rceil", 5, 0x02309, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0B8[] = { {"atilde", 6, 0x000E3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0B9[] = { {"zeta", 4, 0x003B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0BA[] = { {"emsp", 4, 0x02003, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0BC[] = { {"perp", 4, 0x022A5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0C2[] = { {"Prime", 5, 0x02033, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0C4[] = { {"frac12", 6, 0x000BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0C5[] = { {"Ntilde", 6, 0x000D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0C6[] = { {"frac14", 6, 0x000BC, 0}, {"circ", 4, 0x002C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0C7[] = { {"mu", 2, 0x003BC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0C8[] = { {"Gamma", 5, 0x00393, 0}, {"Nu", 2, 0x0039D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0CE[] = { {"fnof", 4, 0x00192, 0}, {"quot", 4, 0x00022, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0D2[] = { {"iota", 4, 0x003B9, 0}, {"mdash", 5, 0x02014, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0D8[] = { {"ne", 2, 0x02260, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0DB[] = { {"Theta", 5, 0x00398, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0DC[] = { {"ni", 2, 0x0220B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0E2[] = { {"prime", 5, 0x02032, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0E5[] = { {"ntilde", 6, 0x000F1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0E6[] = { {"Lambda", 6, 0x0039B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0E8[] = { {"gamma", 5, 0x003B3, 0}, {"nu", 2, 0x003BD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0EB[] = { {"pound", 5, 0x000A3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0EE[] = { {"permil", 6, 0x02030, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0F9[] = { {"cap", 3, 0x02229, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0FA[] = { {"iexcl", 5, 0x000A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0FB[] = { {"Agrave", 6, 0x000C0, 0}, {"theta", 5, 0x003B8, 0}, {"ensp", 4, 0x02002, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0FE[] = { {"Pi", 2, 0x003A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_0FF[] = { {"crarr", 5, 0x021B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_100[] = { {"iquest", 6, 0x000BF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_105[] = { {"forall", 6, 0x02200, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_106[] = { {"Phi", 3, 0x003A6, 0}, {"lambda", 6, 0x003BB, 0}, {"or", 2, 0x02228, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_108[] = { {"frac34", 6, 0x000BE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_10D[] = { {"notin", 5, 0x02209, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_10E[] = { {"dArr", 4, 0x021D3, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_10F[] = { {"Dagger", 6, 0x02021, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_111[] = { {"yen", 3, 0x000A5, 0}, {"weierp", 6, 0x02118, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_113[] = { {"uml", 3, 0x000A8, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_117[] = { {"tilde", 5, 0x002DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_118[] = { {"Aacute", 6, 0x000C1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_11A[] = { {"loz", 3, 0x025CA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_11B[] = { {"agrave", 6, 0x000E0, 0}, {"thinsp", 6, 0x02009, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_11E[] = { {"pi", 2, 0x003C0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_11F[] = { {"micro", 5, 0x000B5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_125[] = { {"spades", 6, 0x02660, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_126[] = { {"phi", 3, 0x003C6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_12E[] = { {"darr", 4, 0x02193, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_12F[] = { {"Oslash", 6, 0x000D8, 0}, {"Tau", 3, 0x003A4, 0}, {"dagger", 6, 0x02020, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_135[] = { {"Ocirc", 5, 0x000D4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_136[] = { {"alefsym", 7, 0x02135, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_138[] = { {"aacute", 6, 0x000E1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_13A[] = { {"divide", 6, 0x000F7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_13F[] = { {"sdot", 4, 0x022C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_143[] = { {"reg", 3, 0x000AE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_149[] = { {"real", 4, 0x0211C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_14B[] = { {"Scaron", 6, 0x00160, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_14F[] = { {"cent", 4, 0x000A2, 0}, {"oslash", 6, 0x000F8, 0}, {"tau", 3, 0x003C4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_150[] = { {"thorn", 5, 0x000FE, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_153[] = { {"ndash", 5, 0x02013, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_154[] = { {"piv", 3, 0x003D6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_155[] = { {"ocirc", 5, 0x000F4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_156[] = { {"Aring", 5, 0x000C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_158[] = { {"nbsp", 4, 0x000A0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_15C[] = { {"Iuml", 4, 0x000CF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_15F[] = { {"rsquo", 5, 0x02019, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_160[] = { {"rsaquo", 6, 0x0203A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_163[] = { {"hellip", 6, 0x02026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_166[] = { {"Otilde", 6, 0x000D5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_16B[] = { {"scaron", 6, 0x00161, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_16C[] = { {"Yuml", 4, 0x00178, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_16E[] = { {"sup1", 4, 0x000B9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_16F[] = { {"sup2", 4, 0x000B2, 0}, {"Delta", 5, 0x00394, 0}, {"sbquo", 5, 0x0201A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_170[] = { {"sup3", 4, 0x000B3, 0}, {"lrm", 3, 0x0200E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_173[] = { {"diams", 5, 0x02666, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_175[] = { {"OElig", 5, 0x00152, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_176[] = { {"aring", 5, 0x000E5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_178[] = { {"oplus", 5, 0x02295, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_17C[] = { {"iuml", 4, 0x000EF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_17F[] = { {"Egrave", 6, 0x000C8, 0}, {"uArr", 4, 0x021D1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_181[] = { {"Beta", 4, 0x00392, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_183[] = { {"nabla", 5, 0x02207, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_186[] = { {"ETH", 3, 0x000D0, 0}, {"otilde", 6, 0x000F5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_187[] = { {"laquo", 5, 0x000AB, 0}, {"times", 5, 0x000D7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_18C[] = { {"yuml", 4, 0x000FF, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_18D[] = { {"cup", 3, 0x0222A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_18E[] = { {"Rho", 3, 0x003A1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_18F[] = { {"Ugrave", 6, 0x000D9, 0}, {"delta", 5, 0x003B4, 0}, {"equiv", 5, 0x02261, 0}, {"sub", 3, 0x02282, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_194[] = { {"curren", 6, 0x000A4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_196[] = { {"not", 3, 0x000AC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_197[] = { {"acute", 5, 0x000B4, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_19A[] = { {"prod", 4, 0x0220F, 0}, {"sum", 3, 0x02211, 0}, {"lsaquo", 6, 0x02039, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_19C[] = { {"Eacute", 6, 0x000C9, 0}, {"Omicron", 7, 0x0039F, 0}, {"sigmaf", 6, 0x003C2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_19D[] = { {"sup", 3, 0x02283, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_19F[] = { {"egrave", 6, 0x000E8, 0}, {"uarr", 4, 0x02191, 0}, {"lowast", 6, 0x02217, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A0[] = { {"zwj", 3, 0x0200D, 0}, {"bdquo", 5, 0x0201E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A1[] = { {"beta", 4, 0x003B2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A2[] = { {"Ouml", 4, 0x000D6, 0}, {"supe", 4, 0x02287, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A4[] = { {"plusmn", 6, 0x000B1, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A6[] = { {"cedil", 5, 0x000B8, 0}, {"prop", 4, 0x0221D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A7[] = { {"lang", 4, 0x02329, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A8[] = { {"radic", 5, 0x0221A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1A9[] = { {"para", 4, 0x000B6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1AC[] = { {"Uacute", 6, 0x000DA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1AE[] = { {"szlig", 5, 0x000DF, 0}, {"rho", 3, 0x003C1, 0}, {"lceil", 5, 0x02308, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1AF[] = { {"ugrave", 6, 0x000F9, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1B0[] = { {"rdquo", 5, 0x0201D, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1B5[] = { {"deg", 3, 0x000B0, 0}, {"trade", 5, 0x02122, 0}, {"oelig", 5, 0x00153, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1B9[] = { {"Chi", 3, 0x003A7, 0}, {"rfloor", 6, 0x0230B, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1BC[] = { {"eacute", 6, 0x000E9, 0}, {"omicron", 7, 0x003BF, 0}, {"part", 4, 0x02202, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1BE[] = { {"clubs", 5, 0x02663, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1BF[] = { {"Epsilon", 7, 0x00395, 0}, {"Eta", 3, 0x00397, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1C2[] = { {"ouml", 4, 0x000F6, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1C4[] = { {"#039", 4, 0x00027, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1C9[] = { {"Ograve", 6, 0x000D2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1CC[] = { {"uacute", 6, 0x000FA, 0}, {"cong", 4, 0x02245, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1CF[] = { {"Upsilon", 7, 0x003A5, 0}, {"asymp", 5, 0x02248, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1D0[] = { {"ordf", 4, 0x000AA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1D4[] = { {"sube", 4, 0x02286, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1D7[] = { {"ordm", 4, 0x000BA, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1D8[] = { {"Euml", 4, 0x000CB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1D9[] = { {"chi", 3, 0x003C7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1DD[] = { {"nsub", 4, 0x02284, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1DF[] = { {"epsilon", 7, 0x003B5, 0}, {"eta", 3, 0x003B7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1E6[] = { {"Oacute", 6, 0x000D3, 0}, {"eth", 3, 0x000F0, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1E8[] = { {"Uuml", 4, 0x000DC, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1E9[] = { {"ograve", 6, 0x000F2, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1ED[] = { {"rang", 4, 0x0232A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1EF[] = { {"upsilon", 7, 0x003C5, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F1[] = { {"ge", 2, 0x02265, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F2[] = { {"Kappa", 5, 0x0039A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F3[] = { {"lfloor", 6, 0x0230A, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F4[] = { {"sect", 4, 0x000A7, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F6[] = { {"otimes", 6, 0x02297, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F8[] = { {"euml", 4, 0x000EB, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_html4_1F9[] = { {"shy", 3, 0x000AD, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map *const ht_buckets_html4[] = { ht_bucket_html4_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_003, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_006, ht_bucket_empty, ht_bucket_html4_008, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_00B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_00E, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_012, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_016, ht_bucket_empty, ht_bucket_html4_018, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_01B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_020, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_023, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_026, ht_bucket_html4_027, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_02B, ht_bucket_html4_02C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_02F, ht_bucket_html4_030, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_034, ht_bucket_empty, ht_bucket_html4_036, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_03B, ht_bucket_html4_03C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_040, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_046, ht_bucket_html4_047, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_04B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_04F, ht_bucket_html4_050, ht_bucket_html4_051, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_054, ht_bucket_empty, ht_bucket_html4_056, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_059, ht_bucket_empty, ht_bucket_html4_05B, ht_bucket_html4_05C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_064, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_067, ht_bucket_empty, ht_bucket_html4_069, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_071, ht_bucket_html4_072, ht_bucket_empty, ht_bucket_html4_074, ht_bucket_empty, ht_bucket_html4_076, ht_bucket_empty, ht_bucket_html4_078, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_07C, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_089, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_08D, ht_bucket_html4_08E, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_091, ht_bucket_html4_092, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_096, ht_bucket_empty, ht_bucket_html4_098, ht_bucket_html4_099, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_09D, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0A0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0A5, ht_bucket_empty, ht_bucket_html4_0A7, ht_bucket_html4_0A8, ht_bucket_empty, ht_bucket_html4_0AA, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0AE, ht_bucket_empty, ht_bucket_html4_0B0, ht_bucket_empty, ht_bucket_html4_0B2, ht_bucket_empty, ht_bucket_html4_0B4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0B8, ht_bucket_html4_0B9, ht_bucket_html4_0BA, ht_bucket_empty, ht_bucket_html4_0BC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0C2, ht_bucket_empty, ht_bucket_html4_0C4, ht_bucket_html4_0C5, ht_bucket_html4_0C6, ht_bucket_html4_0C7, ht_bucket_html4_0C8, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0CE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0D2, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0D8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0DB, ht_bucket_html4_0DC, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0E2, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0E5, ht_bucket_html4_0E6, ht_bucket_empty, ht_bucket_html4_0E8, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0EB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0EE, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0F9, ht_bucket_html4_0FA, ht_bucket_html4_0FB, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_0FE, ht_bucket_html4_0FF, ht_bucket_html4_100, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_105, ht_bucket_html4_106, ht_bucket_empty, ht_bucket_html4_108, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_10D, ht_bucket_html4_10E, ht_bucket_html4_10F, ht_bucket_empty, ht_bucket_html4_111, ht_bucket_empty, ht_bucket_html4_113, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_117, ht_bucket_html4_118, ht_bucket_empty, ht_bucket_html4_11A, ht_bucket_html4_11B, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_11E, ht_bucket_html4_11F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_125, ht_bucket_html4_126, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_12E, ht_bucket_html4_12F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_135, ht_bucket_html4_136, ht_bucket_empty, ht_bucket_html4_138, ht_bucket_empty, ht_bucket_html4_13A, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_13F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_143, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_149, ht_bucket_empty, ht_bucket_html4_14B, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_14F, ht_bucket_html4_150, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_153, ht_bucket_html4_154, ht_bucket_html4_155, ht_bucket_html4_156, ht_bucket_empty, ht_bucket_html4_158, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_15C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_15F, ht_bucket_html4_160, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_163, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_166, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_16B, ht_bucket_html4_16C, ht_bucket_empty, ht_bucket_html4_16E, ht_bucket_html4_16F, ht_bucket_html4_170, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_173, ht_bucket_empty, ht_bucket_html4_175, ht_bucket_html4_176, ht_bucket_empty, ht_bucket_html4_178, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_17C, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_17F, ht_bucket_empty, ht_bucket_html4_181, ht_bucket_empty, ht_bucket_html4_183, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_186, ht_bucket_html4_187, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_18C, ht_bucket_html4_18D, ht_bucket_html4_18E, ht_bucket_html4_18F, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_194, ht_bucket_empty, ht_bucket_html4_196, ht_bucket_html4_197, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_19A, ht_bucket_empty, ht_bucket_html4_19C, ht_bucket_html4_19D, ht_bucket_empty, ht_bucket_html4_19F, ht_bucket_html4_1A0, ht_bucket_html4_1A1, ht_bucket_html4_1A2, ht_bucket_empty, ht_bucket_html4_1A4, ht_bucket_empty, ht_bucket_html4_1A6, ht_bucket_html4_1A7, ht_bucket_html4_1A8, ht_bucket_html4_1A9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1AC, ht_bucket_empty, ht_bucket_html4_1AE, ht_bucket_html4_1AF, ht_bucket_html4_1B0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1B5, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1B9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1BC, ht_bucket_empty, ht_bucket_html4_1BE, ht_bucket_html4_1BF, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1C2, ht_bucket_empty, ht_bucket_html4_1C4, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1C9, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1CC, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1CF, ht_bucket_html4_1D0, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1D4, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1D7, ht_bucket_html4_1D8, ht_bucket_html4_1D9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1DD, ht_bucket_empty, ht_bucket_html4_1DF, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1E6, ht_bucket_empty, ht_bucket_html4_1E8, ht_bucket_html4_1E9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_html4_1ED, ht_bucket_empty, ht_bucket_html4_1EF, ht_bucket_empty, ht_bucket_html4_1F1, ht_bucket_html4_1F2, ht_bucket_html4_1F3, ht_bucket_html4_1F4, ht_bucket_empty, ht_bucket_html4_1F6, ht_bucket_empty, ht_bucket_html4_1F8, ht_bucket_html4_1F9, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, }; static const entity_ht ent_ht_html4 = { 0x200, ht_buckets_html4 }; /* end of HTML 4.01 hash table for entity -> codepoint }}} */ /* {{{ Start of Basic entities (no apos) table for codepoint -> entity */ static const entity_stage3_row stage3_table_be_noapos_00000[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"quot", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amp", 3} } }, {0, { {"#039", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lt", 2} } }, {0, { {NULL, 0} } }, {0, { {"gt", 2} } }, {0, { {NULL, 0} } }, }; /* {{{ Basic entities (no apos) hash table for entity -> codepoint */ static const entity_cp_map ht_bucket_be_noapos_000[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_noapos_003[] = { {"amp", 3, 0x00026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_noapos_004[] = { {"#039", 4, 0x00027, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_noapos_005[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_noapos_00E[] = { {"quot", 4, 0x00022, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map *const ht_buckets_be_noapos[] = { ht_bucket_be_noapos_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_noapos_003, ht_bucket_be_noapos_004, ht_bucket_be_noapos_005, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_noapos_00E, ht_bucket_empty, }; static const entity_ht ent_ht_be_noapos = { 0x10, ht_buckets_be_noapos }; /* end of Basic entities (no apos) hash table for entity -> codepoint }}} */ /* {{{ Start of Basic entities (with apos) table for codepoint -> entity */ static const entity_stage3_row stage3_table_be_apos_00000[] = { {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"quot", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"amp", 3} } }, {0, { {"apos", 4} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {NULL, 0} } }, {0, { {"lt", 2} } }, {0, { {NULL, 0} } }, {0, { {"gt", 2} } }, {0, { {NULL, 0} } }, }; /* {{{ Basic entities (with apos) hash table for entity -> codepoint */ static const entity_cp_map ht_bucket_be_apos_000[] = { {"gt", 2, 0x0003E, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_apos_003[] = { {"amp", 3, 0x00026, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_apos_005[] = { {"lt", 2, 0x0003C, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_apos_008[] = { {"apos", 4, 0x00027, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map ht_bucket_be_apos_00E[] = { {"quot", 4, 0x00022, 0}, {NULL, 0, 0, 0} }; static const entity_cp_map *const ht_buckets_be_apos[] = { ht_bucket_be_apos_000, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_003, ht_bucket_empty, ht_bucket_be_apos_005, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_008, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_empty, ht_bucket_be_apos_00E, ht_bucket_empty, }; static const entity_ht ent_ht_be_apos = { 0x10, ht_buckets_be_apos }; /* end of Basic entities (with apos) hash table for entity -> codepoint }}} */ #endif /* HTML_TABLES_H */ PK!9a0ext/standard/php_assert.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Thies C. Arntzen | +----------------------------------------------------------------------+ */ #ifndef PHP_ASSERT_H #define PHP_ASSERT_H PHP_MINIT_FUNCTION(assert); PHP_MSHUTDOWN_FUNCTION(assert); PHP_RINIT_FUNCTION(assert); PHP_RSHUTDOWN_FUNCTION(assert); PHP_MINFO_FUNCTION(assert); PHP_FUNCTION(assert); PHP_FUNCTION(assert_options); #endif /* PHP_ASSERT_H */ PK!?+?ZZext/standard/basic_functions.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef BASIC_FUNCTIONS_H #define BASIC_FUNCTIONS_H #include #ifdef HAVE_WCHAR_H #include #endif #include "php_filestat.h" #include "zend_highlight.h" #include "url_scanner_ex.h" #if defined(_WIN32) && !defined(__clang__) #include #endif extern zend_module_entry basic_functions_module; #define basic_functions_module_ptr &basic_functions_module PHP_MINIT_FUNCTION(basic); PHP_MSHUTDOWN_FUNCTION(basic); PHP_RINIT_FUNCTION(basic); PHP_RSHUTDOWN_FUNCTION(basic); PHP_MINFO_FUNCTION(basic); PHP_FUNCTION(constant); PHP_FUNCTION(sleep); PHP_FUNCTION(usleep); #if HAVE_NANOSLEEP PHP_FUNCTION(time_nanosleep); PHP_FUNCTION(time_sleep_until); #endif PHP_FUNCTION(flush); #ifdef HAVE_INET_NTOP PHP_NAMED_FUNCTION(zif_inet_ntop); #endif #ifdef HAVE_INET_PTON PHP_NAMED_FUNCTION(php_inet_pton); #endif PHP_FUNCTION(ip2long); PHP_FUNCTION(long2ip); /* system functions */ PHP_FUNCTION(getenv); PHP_FUNCTION(putenv); PHP_FUNCTION(getopt); PHP_FUNCTION(get_current_user); PHP_FUNCTION(set_time_limit); PHP_FUNCTION(header_register_callback); PHP_FUNCTION(get_cfg_var); PHP_FUNCTION(get_magic_quotes_runtime); PHP_FUNCTION(get_magic_quotes_gpc); PHP_FUNCTION(error_log); PHP_FUNCTION(error_get_last); PHP_FUNCTION(error_clear_last); PHP_FUNCTION(call_user_func); PHP_FUNCTION(call_user_func_array); PHP_FUNCTION(forward_static_call); PHP_FUNCTION(forward_static_call_array); PHP_FUNCTION(register_shutdown_function); PHP_FUNCTION(highlight_file); PHP_FUNCTION(highlight_string); PHP_FUNCTION(php_strip_whitespace); ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highlighter_ini); PHP_FUNCTION(ini_get); PHP_FUNCTION(ini_get_all); PHP_FUNCTION(ini_set); PHP_FUNCTION(ini_restore); PHP_FUNCTION(get_include_path); PHP_FUNCTION(set_include_path); PHP_FUNCTION(restore_include_path); PHP_FUNCTION(print_r); PHP_FUNCTION(fprintf); PHP_FUNCTION(vfprintf); PHP_FUNCTION(connection_aborted); PHP_FUNCTION(connection_status); PHP_FUNCTION(ignore_user_abort); PHP_FUNCTION(getservbyname); PHP_FUNCTION(getservbyport); PHP_FUNCTION(getprotobyname); PHP_FUNCTION(getprotobynumber); PHP_NAMED_FUNCTION(php_if_crc32); PHP_FUNCTION(register_tick_function); PHP_FUNCTION(unregister_tick_function); #ifdef HAVE_GETLOADAVG PHP_FUNCTION(sys_getloadavg); #endif PHP_FUNCTION(is_uploaded_file); PHP_FUNCTION(move_uploaded_file); PHP_FUNCTION(net_get_interfaces); /* From the INI parser */ PHP_FUNCTION(parse_ini_file); PHP_FUNCTION(parse_ini_string); #if ZEND_DEBUG PHP_FUNCTION(config_get_hash); #endif #if defined(PHP_WIN32) PHP_FUNCTION(sapi_windows_cp_set); PHP_FUNCTION(sapi_windows_cp_get); PHP_FUNCTION(sapi_windows_cp_is_utf8); PHP_FUNCTION(sapi_windows_cp_conv); #endif PHP_FUNCTION(str_rot13); PHP_FUNCTION(stream_get_filters); PHP_FUNCTION(stream_filter_register); PHP_FUNCTION(stream_bucket_make_writeable); PHP_FUNCTION(stream_bucket_prepend); PHP_FUNCTION(stream_bucket_append); PHP_FUNCTION(stream_bucket_new); PHP_MINIT_FUNCTION(user_filters); PHP_RSHUTDOWN_FUNCTION(user_filters); PHP_RSHUTDOWN_FUNCTION(browscap); /* Left for BC (not binary safe!) */ PHPAPI int _php_error_log(int opt_err, char *message, char *opt, char *headers); PHPAPI int _php_error_log_ex(int opt_err, char *message, size_t message_len, char *opt, char *headers); PHPAPI int php_prefix_varname(zval *result, const zval *prefix, const char *var_name, size_t var_name_len, zend_bool add_underscore); #define MT_N (624) /* Deprecated type aliases -- use the standard types instead */ typedef uint32_t php_uint32; typedef int32_t php_int32; typedef struct _php_basic_globals { HashTable *user_shutdown_function_names; HashTable putenv_ht; zval strtok_zval; char *strtok_string; zend_string *locale_string; /* current LC_CTYPE locale (or NULL for 'C') */ zend_bool locale_changed; /* locale was changed and has to be restored */ char *strtok_last; char strtok_table[256]; zend_ulong strtok_len; char str_ebuf[40]; zend_fcall_info array_walk_fci; zend_fcall_info_cache array_walk_fci_cache; zend_fcall_info user_compare_fci; zend_fcall_info_cache user_compare_fci_cache; zend_llist *user_tick_functions; zval active_ini_file_section; /* pageinfo.c */ zend_long page_uid; zend_long page_gid; zend_long page_inode; time_t page_mtime; /* filestat.c && main/streams/streams.c */ char *CurrentStatFile, *CurrentLStatFile; php_stream_statbuf ssb, lssb; /* mt_rand.c */ uint32_t state[MT_N+1]; /* state vector + 1 extra to not violate ANSI C */ uint32_t *next; /* next random value is computed from here */ int left; /* can *next++ this many times before reloading */ zend_bool mt_rand_is_seeded; /* Whether mt_rand() has been seeded */ zend_long mt_rand_mode; /* syslog.c */ char *syslog_device; /* var.c */ zend_class_entry *incomplete_class; unsigned serialize_lock; /* whether to use the locally supplied var_hash instead (__sleep/__wakeup) */ struct { struct php_serialize_data *data; unsigned level; } serialize; struct { struct php_unserialize_data *data; unsigned level; } unserialize; /* url_scanner_ex.re */ url_adapt_state_ex_t url_adapt_session_ex; HashTable url_adapt_session_hosts_ht; url_adapt_state_ex_t url_adapt_output_ex; HashTable url_adapt_output_hosts_ht; #ifdef HAVE_MMAP void *mmap_file; size_t mmap_len; #endif HashTable *user_filter_map; /* file.c */ #if defined(_REENTRANT) && defined(HAVE_MBRLEN) && defined(HAVE_MBSTATE_T) mbstate_t mblen_state; #endif int umask; } php_basic_globals; #ifdef ZTS #define BG(v) ZEND_TSRMG(basic_globals_id, php_basic_globals *, v) PHPAPI extern int basic_globals_id; #else #define BG(v) (basic_globals.v) PHPAPI extern php_basic_globals basic_globals; #endif #if HAVE_PUTENV typedef struct { char *putenv_string; char *previous_value; char *key; size_t key_len; } putenv_entry; #endif PHPAPI double php_get_nan(void); PHPAPI double php_get_inf(void); typedef struct _php_shutdown_function_entry { zval *arguments; int arg_count; } php_shutdown_function_entry; PHPAPI extern zend_bool register_user_shutdown_function(char *function_name, size_t function_len, php_shutdown_function_entry *shutdown_function_entry); PHPAPI extern zend_bool remove_user_shutdown_function(char *function_name, size_t function_len); PHPAPI extern zend_bool append_user_shutdown_function(php_shutdown_function_entry shutdown_function_entry); PHPAPI void php_call_shutdown_functions(void); PHPAPI void php_free_shutdown_functions(void); #endif /* BASIC_FUNCTIONS_H */ PK!H+ext/standard/php_array.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | | Rasmus Lerdorf | | Andrei Zmievski | +----------------------------------------------------------------------+ */ #ifndef PHP_ARRAY_H #define PHP_ARRAY_H PHP_MINIT_FUNCTION(array); PHP_MSHUTDOWN_FUNCTION(array); PHP_FUNCTION(ksort); PHP_FUNCTION(krsort); PHP_FUNCTION(natsort); PHP_FUNCTION(natcasesort); PHP_FUNCTION(asort); PHP_FUNCTION(arsort); PHP_FUNCTION(sort); PHP_FUNCTION(rsort); PHP_FUNCTION(usort); PHP_FUNCTION(uasort); PHP_FUNCTION(uksort); PHP_FUNCTION(array_walk); PHP_FUNCTION(array_walk_recursive); PHP_FUNCTION(count); PHP_FUNCTION(end); PHP_FUNCTION(prev); PHP_FUNCTION(next); PHP_FUNCTION(reset); PHP_FUNCTION(current); PHP_FUNCTION(key); PHP_FUNCTION(min); PHP_FUNCTION(max); PHP_FUNCTION(in_array); PHP_FUNCTION(array_search); PHP_FUNCTION(extract); PHP_FUNCTION(compact); PHP_FUNCTION(array_fill); PHP_FUNCTION(array_fill_keys); PHP_FUNCTION(range); PHP_FUNCTION(shuffle); PHP_FUNCTION(array_multisort); PHP_FUNCTION(array_push); PHP_FUNCTION(array_pop); PHP_FUNCTION(array_shift); PHP_FUNCTION(array_unshift); PHP_FUNCTION(array_splice); PHP_FUNCTION(array_slice); PHP_FUNCTION(array_merge); PHP_FUNCTION(array_merge_recursive); PHP_FUNCTION(array_replace); PHP_FUNCTION(array_replace_recursive); PHP_FUNCTION(array_keys); PHP_FUNCTION(array_key_first); PHP_FUNCTION(array_key_last); PHP_FUNCTION(array_values); PHP_FUNCTION(array_count_values); PHP_FUNCTION(array_column); PHP_FUNCTION(array_reverse); PHP_FUNCTION(array_reduce); PHP_FUNCTION(array_pad); PHP_FUNCTION(array_flip); PHP_FUNCTION(array_change_key_case); PHP_FUNCTION(array_rand); PHP_FUNCTION(array_unique); PHP_FUNCTION(array_intersect); PHP_FUNCTION(array_intersect_key); PHP_FUNCTION(array_intersect_ukey); PHP_FUNCTION(array_uintersect); PHP_FUNCTION(array_intersect_assoc); PHP_FUNCTION(array_uintersect_assoc); PHP_FUNCTION(array_intersect_uassoc); PHP_FUNCTION(array_uintersect_uassoc); PHP_FUNCTION(array_diff); PHP_FUNCTION(array_diff_key); PHP_FUNCTION(array_diff_ukey); PHP_FUNCTION(array_udiff); PHP_FUNCTION(array_diff_assoc); PHP_FUNCTION(array_udiff_assoc); PHP_FUNCTION(array_diff_uassoc); PHP_FUNCTION(array_udiff_uassoc); PHP_FUNCTION(array_sum); PHP_FUNCTION(array_product); PHP_FUNCTION(array_filter); PHP_FUNCTION(array_map); PHP_FUNCTION(array_key_exists); PHP_FUNCTION(array_chunk); PHP_FUNCTION(array_combine); PHPAPI int php_array_merge(HashTable *dest, HashTable *src); PHPAPI int php_array_merge_recursive(HashTable *dest, HashTable *src); PHPAPI int php_array_replace_recursive(HashTable *dest, HashTable *src); PHPAPI int php_multisort_compare(const void *a, const void *b); PHPAPI zend_long php_count_recursive(HashTable *ht); #define PHP_SORT_REGULAR 0 #define PHP_SORT_NUMERIC 1 #define PHP_SORT_STRING 2 #define PHP_SORT_DESC 3 #define PHP_SORT_ASC 4 #define PHP_SORT_LOCALE_STRING 5 #define PHP_SORT_NATURAL 6 #define PHP_SORT_FLAG_CASE 8 #define COUNT_NORMAL 0 #define COUNT_RECURSIVE 1 #define ARRAY_FILTER_USE_BOTH 1 #define ARRAY_FILTER_USE_KEY 2 ZEND_BEGIN_MODULE_GLOBALS(array) compare_func_t *multisort_func; ZEND_END_MODULE_GLOBALS(array) #define ARRAYG(v) ZEND_MODULE_GLOBALS_ACCESSOR(array, v) #endif /* PHP_ARRAY_H */ PK!~sDqqext/standard/php_crypt.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Stig Bakken | | Zeev Suraski | | Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef PHP_CRYPT_H #define PHP_CRYPT_H PHPAPI zend_string *php_crypt(const char *password, const int pass_len, const char *salt, int salt_len, zend_bool quiet); PHP_FUNCTION(crypt); PHP_MINIT_FUNCTION(crypt); PHP_MSHUTDOWN_FUNCTION(crypt); PHP_RINIT_FUNCTION(crypt); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!jo((&ext/standard/php_smart_string_public.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | | Xinchen Hui | +----------------------------------------------------------------------+ */ /* Header moved to Zend. This file is retained for BC. */ #include "zend_smart_string_public.h" PK!kl~ ~ ext/standard/html.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef HTML_H #define HTML_H #define ENT_HTML_QUOTE_NONE 0 #define ENT_HTML_QUOTE_SINGLE 1 #define ENT_HTML_QUOTE_DOUBLE 2 #define ENT_HTML_IGNORE_ERRORS 4 #define ENT_HTML_SUBSTITUTE_ERRORS 8 #define ENT_HTML_DOC_TYPE_MASK (16|32) #define ENT_HTML_DOC_HTML401 0 #define ENT_HTML_DOC_XML1 16 #define ENT_HTML_DOC_XHTML 32 #define ENT_HTML_DOC_HTML5 (16|32) /* reserve bit 6 */ #define ENT_HTML_SUBSTITUTE_DISALLOWED_CHARS 128 #define ENT_COMPAT ENT_HTML_QUOTE_DOUBLE #define ENT_QUOTES (ENT_HTML_QUOTE_DOUBLE | ENT_HTML_QUOTE_SINGLE) #define ENT_NOQUOTES ENT_HTML_QUOTE_NONE #define ENT_IGNORE ENT_HTML_IGNORE_ERRORS #define ENT_SUBSTITUTE ENT_HTML_SUBSTITUTE_ERRORS #define ENT_HTML401 0 #define ENT_XML1 16 #define ENT_XHTML 32 #define ENT_HTML5 (16|32) #define ENT_DISALLOWED 128 void register_html_constants(INIT_FUNC_ARGS); PHP_FUNCTION(htmlspecialchars); PHP_FUNCTION(htmlentities); PHP_FUNCTION(htmlspecialchars_decode); PHP_FUNCTION(html_entity_decode); PHP_FUNCTION(get_html_translation_table); PHPAPI zend_string *php_escape_html_entities(unsigned char *old, size_t oldlen, int all, int flags, char *hint_charset); PHPAPI zend_string *php_escape_html_entities_ex(unsigned char *old, size_t oldlen, int all, int flags, char *hint_charset, zend_bool double_encode); PHPAPI zend_string *php_unescape_html_entities(zend_string *str, int all, int flags, char *hint_charset); PHPAPI unsigned int php_next_utf8_char(const unsigned char *str, size_t str_len, size_t *cursor, int *status); #endif /* HTML_H */ PK!Į ext/standard/php_var.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jani Lehtimäki | +----------------------------------------------------------------------+ */ #ifndef PHP_VAR_H #define PHP_VAR_H #include "ext/standard/basic_functions.h" #include "zend_smart_str_public.h" PHP_FUNCTION(var_dump); PHP_FUNCTION(var_export); PHP_FUNCTION(debug_zval_dump); PHP_FUNCTION(serialize); PHP_FUNCTION(unserialize); PHP_FUNCTION(memory_get_usage); PHP_FUNCTION(memory_get_peak_usage); PHPAPI void php_var_dump(zval *struc, int level); PHPAPI void php_var_export(zval *struc, int level); PHPAPI void php_var_export_ex(zval *struc, int level, smart_str *buf); PHPAPI void php_debug_zval_dump(zval *struc, int level); typedef struct php_serialize_data *php_serialize_data_t; typedef struct php_unserialize_data *php_unserialize_data_t; PHPAPI void php_var_serialize(smart_str *buf, zval *struc, php_serialize_data_t *data); PHPAPI int php_var_unserialize(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash); PHPAPI int php_var_unserialize_ref(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash); PHPAPI int php_var_unserialize_intern(zval *rval, const unsigned char **p, const unsigned char *max, php_unserialize_data_t *var_hash); PHPAPI php_serialize_data_t php_var_serialize_init(void); PHPAPI void php_var_serialize_destroy(php_serialize_data_t d); PHPAPI php_unserialize_data_t php_var_unserialize_init(void); PHPAPI void php_var_unserialize_destroy(php_unserialize_data_t d); PHPAPI HashTable *php_var_unserialize_get_allowed_classes(php_unserialize_data_t d); PHPAPI void php_var_unserialize_set_allowed_classes(php_unserialize_data_t d, HashTable *classes); #define PHP_VAR_SERIALIZE_INIT(d) \ (d) = php_var_serialize_init() #define PHP_VAR_SERIALIZE_DESTROY(d) \ php_var_serialize_destroy(d) #define PHP_VAR_UNSERIALIZE_INIT(d) \ (d) = php_var_unserialize_init() #define PHP_VAR_UNSERIALIZE_DESTROY(d) \ php_var_unserialize_destroy(d) PHPAPI void var_replace(php_unserialize_data_t *var_hash, zval *ozval, zval *nzval); PHPAPI void var_push_dtor(php_unserialize_data_t *var_hash, zval *val); PHPAPI zval *var_tmp_var(php_unserialize_data_t *var_hashx); PHPAPI void var_destroy(php_unserialize_data_t *var_hash); #endif /* PHP_VAR_H */ PK!##ext/standard/php_browscap.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_BROWSCAP_H #define PHP_BROWSCAP_H PHP_MINIT_FUNCTION(browscap); PHP_MSHUTDOWN_FUNCTION(browscap); PHP_FUNCTION(get_browser); #endif /* PHP_BROWSCAP_H */ PK!Kjjext/standard/head.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef HEAD_H #define HEAD_H #define COOKIE_EXPIRES "; expires=" #define COOKIE_MAX_AGE "; Max-Age=" #define COOKIE_DOMAIN "; domain=" #define COOKIE_PATH "; path=" #define COOKIE_SECURE "; secure" #define COOKIE_HTTPONLY "; HttpOnly" #define COOKIE_SAMESITE "; SameSite=" extern PHP_RINIT_FUNCTION(head); PHP_FUNCTION(header); PHP_FUNCTION(header_remove); PHP_FUNCTION(setcookie); PHP_FUNCTION(setrawcookie); PHP_FUNCTION(headers_sent); PHP_FUNCTION(headers_list); PHP_FUNCTION(http_response_code); PHPAPI int php_header(void); PHPAPI int php_setcookie(zend_string *name, zend_string *value, time_t expires, zend_string *path, zend_string *domain, int secure, int httponly, zend_string *samesite, int url_encode); #endif PK!3hext/standard/pack.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef PACK_H #define PACK_H PHP_MINIT_FUNCTION(pack); PHP_FUNCTION(pack); PHP_FUNCTION(unpack); #endif /* PACK_H */ PK!zext/standard/php_password.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Anthony Ferrara | | Charles R. Portwood II | +----------------------------------------------------------------------+ */ #ifndef PHP_PASSWORD_H #define PHP_PASSWORD_H PHP_FUNCTION(password_hash); PHP_FUNCTION(password_verify); PHP_FUNCTION(password_needs_rehash); PHP_FUNCTION(password_get_info); PHP_MINIT_FUNCTION(password); #define PHP_PASSWORD_DEFAULT PHP_PASSWORD_BCRYPT #define PHP_PASSWORD_BCRYPT_COST 10 #if HAVE_ARGON2LIB #define PHP_PASSWORD_ARGON2_MEMORY_COST (64 << 10) #define PHP_PASSWORD_ARGON2_TIME_COST 4 #define PHP_PASSWORD_ARGON2_THREADS 1 #endif typedef enum { PHP_PASSWORD_UNKNOWN, PHP_PASSWORD_BCRYPT, #if HAVE_ARGON2LIB PHP_PASSWORD_ARGON2I, PHP_PASSWORD_ARGON2ID, #endif } php_password_algo; #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!y~!ext/standard/php_fopen_wrappers.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Jim Winstead | | Hartmut Holzgraefe | +----------------------------------------------------------------------+ */ #ifndef PHP_FOPEN_WRAPPERS_H #define PHP_FOPEN_WRAPPERS_H php_stream *php_stream_url_wrap_http(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); php_stream *php_stream_url_wrap_ftp(php_stream_wrapper *wrapper, const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); extern PHPAPI const php_stream_wrapper php_stream_http_wrapper; extern PHPAPI const php_stream_wrapper php_stream_ftp_wrapper; extern PHPAPI const php_stream_wrapper php_stream_php_wrapper; extern PHPAPI /*const*/ php_stream_wrapper php_plain_files_wrapper; #endif PK!3MMext/standard/credits_sapi.hnu[/* DO NOT EDIT THIS FILE! it has been automaticaly created by php7/scripts/credits from the information found in the various php7/ext/.../CREDITS and php7/sapi/.../CREDITS files if you want to change an entry you have to edit the appropriate CREDITS file instead */ CREDIT_LINE("Apache 2.0 Handler", "Ian Holsman, Justin Erenkrantz (based on Apache 2.0 Filter code)"); CREDIT_LINE("CGI / FastCGI", "Rasmus Lerdorf, Stig Bakken, Shane Caraveo, Dmitry Stogov"); CREDIT_LINE("CLI", "Edin Kadribasic, Marcus Boerger, Johannes Schlueter, Moriyoshi Koizumi, Xinchen Hui"); CREDIT_LINE("Embed", "Edin Kadribasic"); CREDIT_LINE("FastCGI Process Manager", "Andrei Nigmatulin, dreamcat4, Antony Dovgal, Jerome Loyet"); CREDIT_LINE("litespeed", "George Wang"); CREDIT_LINE("phpdbg", "Felipe Pena, Joe Watkins, Bob Weinand"); PK!Sz'rrext/standard/php_versioning.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Sæther Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_VERSIONING_H #define PHP_VERSIONING_H #include "ext/standard/basic_functions.h" PHPAPI char *php_canonicalize_version(const char *); PHPAPI int php_version_compare(const char *, const char *); PHP_FUNCTION(version_compare); #endif PK!d\Vext/standard/php_dir.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Thies C. Arntzen | +----------------------------------------------------------------------+ */ #ifndef PHP_DIR_H #define PHP_DIR_H /* directory functions */ PHP_MINIT_FUNCTION(dir); PHP_RINIT_FUNCTION(dir); PHP_FUNCTION(opendir); PHP_FUNCTION(closedir); PHP_FUNCTION(chdir); #if defined(HAVE_CHROOT) && !defined(ZTS) && ENABLE_CHROOT_FUNC PHP_FUNCTION(chroot); #endif PHP_FUNCTION(getcwd); PHP_FUNCTION(rewinddir); PHP_NAMED_FUNCTION(php_if_readdir); PHP_FUNCTION(getdir); PHP_FUNCTION(glob); PHP_FUNCTION(scandir); #define PHP_SCANDIR_SORT_ASCENDING 0 #define PHP_SCANDIR_SORT_DESCENDING 1 #define PHP_SCANDIR_SORT_NONE 2 #endif /* PHP_DIR_H */ PK!fZfZext/standard/info.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Zeev Suraski | | Colin Viebrock | +----------------------------------------------------------------------+ */ #ifndef INFO_H #define INFO_H #define PHP_ENTRY_NAME_COLOR "#ccf" #define PHP_CONTENTS_COLOR "#ccc" #define PHP_HEADER_COLOR "#99c" #define PHP_INFO_GENERAL (1<<0) #define PHP_INFO_CREDITS (1<<1) #define PHP_INFO_CONFIGURATION (1<<2) #define PHP_INFO_MODULES (1<<3) #define PHP_INFO_ENVIRONMENT (1<<4) #define PHP_INFO_VARIABLES (1<<5) #define PHP_INFO_LICENSE (1<<6) #define PHP_INFO_ALL 0xFFFFFFFF #ifndef HAVE_CREDITS_DEFS #define HAVE_CREDITS_DEFS #define PHP_CREDITS_GROUP (1<<0) #define PHP_CREDITS_GENERAL (1<<1) #define PHP_CREDITS_SAPI (1<<2) #define PHP_CREDITS_MODULES (1<<3) #define PHP_CREDITS_DOCS (1<<4) #define PHP_CREDITS_FULLPAGE (1<<5) #define PHP_CREDITS_QA (1<<6) #define PHP_CREDITS_WEB (1<<7) #define PHP_CREDITS_ALL 0xFFFFFFFF #endif /* HAVE_CREDITS_DEFS */ #define PHP_LOGO_DATA_URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHkAAABACAYAAAA+j9gsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAD4BJREFUeNrsnXtwXFUdx8/dBGihmE21QCrQDY6oZZykon/gY5qizjgM2KQMfzFAOioOA5KEh+j4R9oZH7zT6MAMKrNphZFSQreKHRgZmspLHSCJ2Co6tBtJk7Zps7tJs5t95F5/33PvWU4293F29ybdlPzaM3df2XPv+Zzf4/zOuWc1tkjl+T0HQ3SQC6SBSlD6WKN4rusGm9F1ps/o5mPriOf8dd0YoNfi0nt4ntB1PT4zYwzQkf3kR9/sW4xtpS0CmE0SyPUFUJXFMIxZcM0jAZ4xrKMudQT7963HBF0n6EaUjkP0vI9K9OEHWqJLkNW1s8mC2WgVTwGAqWTafJzTWTKZmQuZ/k1MpAi2+eys6mpWfVaAPzcILu8EVKoCAaYFtPxrAXo8qyNwzZc7gSgzgN9Hx0Ecn3j8xr4lyHOhNrlpaJIgptM5DjCdzrJ0Jmce6bWFkOpqs0MErA4gXIBuAmY53gFmOPCcdaTXCbq+n16PPLXjewMfGcgEttECeouTpk5MplhyKsPBTiXNYyULtwIW7Cx1vlwuJyDLR9L0mQiVPb27fhA54yBbGttMpc1OWwF1cmKaH2FSF7vAjGezOZZJZ9j0dIZlMhnuRiToMO0c+N4X7oksasgEt9XS2KZCHzoem2Ixq5zpAuDTqTR14FMslZyepeEI4Ogj26n0vLj33uiigExgMWRpt+CGCsEePZqoePM738BPTaJzT7CpU0nu1yXpAXCC3VeRkCW4bfJYFZo6dmJyQTW2tvZc1nb719iyZWc5fmZ6Osu6H3uVzit52oBnMll2YizGxk8muFZLAshb/YKtzQdcaO3Y2CQ7eiy+YNGvLN+4+nJetm3bxhKJxJz316xZw1pbW9kLew+w1944XBEaPj6eYCeOx1gqNe07bK1MwIDbKcOFOR49GuePT5fcfOMX2drPXcQ0zf7y2tvbWVdXF/v1k2+yQ4dPVpQ5P0Um/NjoCX6UBMFZR6k+u7qMYVBYDIEqBW7eXAfPZX19zp2/oaGBHysNMGTFinPZik9fWggbI5Omb13zUDeB3lLsdwaK/YPeyAFU0i8Aw9/2Dwyx4SPjFQEYUlf3MTYw4Jx7CIVCbHR0oqIDNMD+FMG+ZE0dO/tsHlvAWnYS6H4qjfMC+Zld/wg92/tuv2WeeYT87j+H2aFDxysGLuSy+o/z49DQkONnmpqa2MjRyoYsZOXKGnb5Z+vZqlUrxUsAvI9At/oK+elnBpoNw+Dai9TekSMxDrgSh0KrSYshTprc2NhoRf1JtlikqirAVl98AddsSavDBDrsC+QdT7/TSoB344tzOZ39+70RbporVerqasyw1MEnC8iV6I9VTDi0uqbmfPFSq2W+gyUHXuEdb3WR5rab5jnD3i/BNMN8ChNaqsTiKa55KmBWX+Tuj0XQdQVF307nhTH0CPls+O0UPbaT5TQG/8qX68u6LpV67LQ6dNknaYgaYyPDx2TzvYGCsnhRkH8b/rsF2GDj1MCInkvxvRjOuCUlipWD/zrKx7ZOwBF0vfSSM2ShyaqAAOC1Nw+zt9/5YNbrN1zfwIdpfgnqebv/A6pnWAn4qlW1HPgHQ6OeoG3N9RO/+StMdDtmV2LxJPfBpQCGfwTgrVu38jFrKaW2tpZt2LCBdXR0sEgkwhv21u9cxQsyW3ZB1+DgoOM54btU6tu8eTPr6elhy5fr7IZNDey+e76e9/fCLcAllHpdKKinpaUlX8+111xB9VzNrYxqUAY/XVVVJYMOekLu2fFGM8VWYQRYiYkU9bD4vPlHFYnH4/zvkb1CgwACHgMoUpdyw3sFXcXUh4YHaNSHDqaxdL5jwVTXBpeXVY9oF3RcUQ+O09NT7Cayfld+4RJlP42gTIq8w66Qf/X4a6FTSSMMDcaE/NhYecMM+MdyG90OAhodWoAGkTUaSZByO5WdiA4GqwStrrM6k5vFKEXQserr63l7oR5V0NBojKctaSZtbneErOtGmFxwkGewjk0UzpCUlJSIRqMcjN8CkHLDqyRByq0PEGBBhDmdj7rQVujAaLfrrlk7xyW5gUaxpEtOmOQDr0e799NYmDVBi0+OT7FcbsaXxEQk8qprEBQMBm0vVKUBRcNjskFE8W71lSt79uzhda1d6w4ZGTUUp3NWAQ3TvW/fPvbVq+rZH/ceULOcF1/I06CY3QJohCCzNJnYdgEwwvpUKuNbUsLNpO3evZtfSGHp7+/nS2pw3LLFPVWLoA5yHQUtXvXFYjH+vU4F5yOibzsRUL38MTqC3XWh8GCWziMcDjt2BNEZUIfoUOpJkwvziT3S5ua8Jj/4yD5E0yERbPkhKv4RF4mhkN1wCMHN2rWfYZ2dnWz9+vXchNkJzBoaQ8Bxqg91wWo41YdO2dzczD+3bt06Rw0rBG4nOF8oi9M0Jsw9OgLqQ124BifLgeuHyVbN0NXUrODBmDWxgRR0pNrUYqMNgDOZGZbNzvgCuc4j0kX+GPJ2//CcMagQmKkbrm/knwVEp++SIXulM1+nhj9AY207QRDnpsnye24WA59DkuPlV/5j+z5eB2hE0W1tbTyQdNJmDpksRzFp2E9csFJAboRvDvz8gZdJgw2ek55KZphfAv+Inu8UdKnmkEUHQK93EjEZ4Rbkifq8JiactEpYAy9Nli2Gm6CjIZPn1qlKFWizleOG3BIwdKNZ+KRMxr9VHKvr1NKLXo2BhlAVFRPq1qlWW6MBr3NWyY2rTGXO5ySJlN9uDuiGsV7XTVPtl8CHYGizf/9+V5Om0hAwVV4ahuU8qia03HP26kyqFkMOTudDzjs/P/QKBUiBYa5ZNucfZJUkCG/0IhpCxYyqBF3lnLOII8q1GKqdStQ3rTh5MStwXX5O/nE1metGQzPHUH6JatA1OppQ8u1eUbpX44tO4GY5vM5Z9sduFgOfG1GwUOK6VFzaSAmrWCSfzGCuuT/O+bi6QwRdTtqXN2keJ4/ejgkJ5HedRARkbkGe6ARulgMWQ+Wc3cDAWohhoZdcue7ifJ7crfP6Me8dELd0Mv8U2begC2k9SHd3t+NnNm7cqKwRbiYUkykqvlZlmOYVLIq5bHRep46JzotOc9BhuFc0ZHGLph+CJIaXr1FZSIfxsdBiN1+LpALEK2By61Aqs0rwtV7DNBU3BMCYixYTLU6C8bM5hBwum0k1mesBpmPtlj+qXFenFsAgCVLon9DYeIxUnmh05HCdBIkCVRP6ussiepVZJZXIutCHwt2I0YGY2Kiz3AIyeG5aLNooVULQBbHy1/nAK2oEtEanheil+GO3aFg0FnwSilNC4q6OrXzywc0XCy1WMaFu/tgrCBLRuWpHuP+n1zqmRXFN0GAnwKgHeW1E1C/86UDJHFKptATZMPZTafbLXHtN3OPixKRC4ev4GwB2Gy6JxhQNEYul+KoKp79RMaGqKzy9ovzt27c7pidVZtYAGJMYOP7u6bdK1mLI1GQ+/ogSZBahwKuLO2jSZt0odw65xrUhAMNrZskLsGiIXz72F3bTjV+ixvtbWcMQr3NWCbog5VyXAIy63PLrqpJITIqHkcD9P7suSiYbG53wvTLKDbr8WBbjZqIF4F3PD3ItRn1eQd5CBF3lCM5RAIYfVp0/dgZ8SvbJ2/l8MmlvNw+8qJTjm+drWQwaAXO9KMuWncc1GBMXKkGeV/pU5ZxFIsTvzovOCu3HvDnOE7NTu3rLr+PE8fy6+IEX9947YM4n/+LbPT/88R8QqoYAuVSDrZLFKcYso2AcLBIeGDPu6h3M+yqvIE/4Y6w4LdUfi+jcr86L75KvC9+PcbVfd1hCi6U7Innwk1/+Q5rcoetsdyBg3s9aCmivBsNFifGfG9zCJUFiztmpEXAbqhMgr6SLWBPu9R1enRfm1ktrC6cVYWH+/Mqg43x6sYK1edaCex7vkRZHZkF+6P6NkXvvi/TpLNBUaqTtdcsoLtIrVTcem2EHDh7m2uq0ikMINBvafOmazzt+BkGMW9CF70DndPsOaJqb38Y1oXjdCYHOiqwbPofrKid6thMAlnxxPtMy6w4K0ubNhq73U5wd5PtVleCTd+50D2CEafLloqixyv0ufMcOGq64CVaMYN2119gfAdPpuscKOxWgCMDwxfm0pvzBhx9siRLoFt3ca7Ikf+x2yygaYzHdTSi7IT9y8fMJ2Lpdhg+ZCPA2+f05d1A88mBLHzQaoA1dL6ohVLJGi+1uQj8XQMyHIMgaGT6eDxuozMkD294LRaB7CPI27DLHQSskSFRvGa30O/zndF4fF0DMhwa//9//iZ2DcILqN7xBHn1oUweNn7eJ3WO9QHvdMlrMsphKEj8XQPgpuHVVMtGOgF0hC9CGTqbb2kHOzXx73aKiuiymEv2x22ICMYYeWSALBQ7RQ0fkoZIr4DnRtS3ohzf1dNzTG9d0PcwMLahZO8UyKTMm38wteratSVtkplq4oWj0PcfrEinPhYg14H+hvdIwCVs1bvb6O+UBMYFGl90d0LRGLRDgoHEUwYnXDniQStocTVUwfPLaKQGA/RoWOmkvtnsaG8unK+PWMKlH5e+Lznp03N27RdO0TkxmYNZKszYBlyfI3RpjsQkmMOo8ls4Wsx1EKcEVAEvayyNoeRzsO2RI+93PNRLesGYtNpBhL4l/prlgZz5ob0mbtZVFhWC301d0EuQgAHPgS7D9hssTHKyMbRfLptF213NBDRuoaqxNA2yh2VUBDnxJ1M1yRW6gOgt2x64gqXK7ht1yOWyW1+wl7bYXvhUygQXgit4KuVDuBGzSbA2bmmtayNzpRgJOGu7XosHFChZzvrGTiUKt5UMiVsmbmtsCb3+2lZmwm3hFNsA/CiYdKyfhYx3Aws8urp8nsJM72naGCG8zYwZMecjk/WHVVRbsMwU6tBVQsWJS2sNDlrgVTO0RE/vzKQtuN2+/85k5PxlUaL75D3BZwKss+JUqSFRAO/F7Eqlkmj+2gbrgYE8rZFluu+P3pOGsyWCG/Y9/GR8exC+vYfc5flxgzRdDGsDEz/8AJsxwQcBUKPCtmKOMFJO8OKMgF8r3b3sKkAm69TN+2OZCAm5ID/g9XPypwX29ufWgudq0urrKes/8nPkxgy1bdg6z/or/SFc2mzV/xs+6HwySTmdYJp2dpaWKEregYrVfn9/B0xkD2U6+e+sOaHqImTfLrycUOIZM1hJwC3oemPXbi/y5PnsrJ136bUa8pxu69BklmANWwDRkgR1wmwVaglyi3Nz6JLQ+ZG5NxQsgNdAhmIfJN7wxgoWg9fxzPQ+c/g9YAIXgeUKCyipJO4uR/wswAOIwB/5IgxvbAAAAAElFTkSuQmCC" #define PHP_EGG_LOGO_DATA_URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHkAAABACAMAAAAJUSgeAAAC+lBMVEUAAACtsdVsooH18+vP0Mfr5tahp3G3toS4wricto5JTIuoq9BZXJlgY55cXptQUouqp3ZkZ6OanciBk19RakXw69tISotzc0dJS4yfpHB7frOusdZ6fbSprs5qbKfv6djv59T07t/t6NWNkMF7qY6ssIa/5Na9y6K0v8+mvJZ3e7NISow5aEZGdU9Qqpc7b0lRr51QjGg3b1F7frRatqRYimZPhFtHakVRfFU/c085fV9z1sWY2chwx7Q5p5ig28p52clWsp5yzbxnxrRjwK5Gb01fknBXiWBGopNbj2hQh2FKfFNCaUOm381OppFHg2JQgmIyakovZEbD69yU18NQknKJzblku6hQn4lCellSSjZyonxYj29Lflo4ZD7G4dI8saJYnYBpl3E6hGjM6Nq05taB3MyFyLFLiWxDb0i75th80cFfWkRUUD+p5NU3m4eC1cOAg7dbu6o4dVZBYTy53s9nm3xHRjHR4NWL3s9LtaVrrZFPk3tDknhimHNBeFKv4NCa4NDp4s54qINmnnVZlnNNeEva5d2L1cO1xaxucat2t5xYmHpokWZagls2Xj0tTy7e7eGGirs5oJBhkGphimNGdEmTzLmAr41FoIpFl4FCinGWmsWk1L9bgFNabko/Y0NMZD9DOyrT7uHK7uCV3MyL2cnK1sds08JlzLxxvqiMuZZZqJNco4k1k39SbELu7OCh49Ss2sm22MaOj3h7zLl8xKpui11lhVcvWzg7VzZfsJhiqYmhlHyBfGZvZ1MlYkidoI5Cf11We06Okr5laaRCq5s0iXKDmmdRc08mVzqhpc2yu8xxm3M0Mx6dpcPPyrWlxqOktZuMsIZIi2RpdV3c2sunqZqPhmnF09S7xdEweV2AdVjc1by40LiWnKzJwKi3tKRyfXFTwrRnuZ2YwZpwlGgiQimHi69Dua1sr5tUVpTEzLuZwKytuK54faKyqI4qcFdIXDagpbR5govMuJaSnYF9n4CkyblBRz3+/v/DqYZwXD8UFA2nO9FlAAAAKnRSTlMA/v79Iv70aP781IEnRv6VSXBf/Ovbt0rv5NG8r9jMxa+KTc/CjsSj2soo+frGAAAUlUlEQVRYw6zUbWgScRwH8BxBM9uiXkTQw4te9HDZg9mkdY0uVw6LimY641ZyzodhcGhReKws8Y5KjUrGlFIIfOjU+cLJBsN7NfRNGrbpG33hiBwMRnvTm172u0PoRTXWw1fxDoT73Pf+9/tvWDMHxB4cp/2jN26q1Vxr6A5L7d8ukeyCiMrP5pfS6Rmr7ukZs+GgRLK9q2vD/8vGQ1Wcpl0g9w70cPnWuX4sKxICsDhdDYV8qb5pe9xtKxUKgYDDsXv3tq4t/0PeBJVdLubB6NyJSwqayx89z1INUalUCodXxeB6OsZa/f1KC2VugMzTcgRBvMD/a+UDVbzDpRrWvhm5e+KRipu8cjKJVRA+iwvVkMeDd3D5oX4lhrnvhRFEDhFkr7dY3LvtX7rvE8Miq4Zlo29GTl+TXuT0r4dYNMhffHlBXMXhTzrDtfqUKEqRZQewbZqXi93d3Vu7/rKxpFOM0y61rHa1Vhu5O/joPkMMKe1nw3K5YxFgGu+g/ZlM/nwSZS1ZWwNShlTChYAD8fL0ysrOv8C37xKJVqseXpbNzdVGZT10Oh2cemw2OcvlToCNrvs0zRCT50DGYKWjryBRU9TkdNYb5UpA7vUCffjw5q1/9Ngle0SQhRDuYhjtqMwV+hLJ3TMYbBqISWNoejxGtYoG2Q+d+1AMo0ibJhaNRmMam8Zk0mgMdQEvrhyGrL+4hGdLgWWQaYbpENjHU5DLEJIkI2n8Q89NhZGXiXyqD0VRS5bMmuG2bGY+JGk22wTc4e3m7R1d63bDDgQRZE86kstFIsFgUKfTXb9+Jh6Pn/3iMY4rjhwx0owWOqeUtzGQLyfiWbirLB83FY+7SVv0Sb0BF4LivL0+V96enPRSJDcFrs5qtep08AXafT1kHB+4JJWOgwyd4d22oFiWfJpIUBRlsVDCLxzdZnj+TiiOeAV7zfXeuKftQuRf5581IwI70w7409O69Af1gKJXKlXBqDMEl7rNQmcSZDsGgdcNPiicWdy2WDQWM9VL4QBv79y6ZuG2Cyl0NpvgWq0zqVTL10r5fL6xMU6v5/DnA5ceHRscBFnNZCZPJlmUxchsIpGww4pjQoQjzFosBr1fPalXHEWovXnL7wuXHG3X8RXgb0GoC25rDMJxHOF/OHJaNt6jmDg2ODuoUqnVDKE/3q9Ek1jWbYfnDKIlYb89jbIo2BaK1Ag02OUC0g21t/1ygktQGGlnebX5bH7eOuODtq1JLsP5/QRBaGuwmfUOKE5N3Jp9/0Klksm0D/THz6MA/ZDNJkMuqAQazt38sEFg2OsVuZefsF/BpVKg7coXO8FdSvuErpkMQfiv9g4zWthF7167dWFiQnpr9uVb1zDID/XHPyfZJMiYILMW08dP795ZlSwEo7IwXhoI2M6KHOF3lp+W+DvZ9RLTRBSFAVhNTNSoCxcujDu3lFqkFbANQktNWx5teWinLRNrMdbOGB5ppwstqCHDGLRiCL4w6iQyPhYqHTRqpmMJmoAWEaUtBpFqjJtCiEbQwMJz+1CjdzHbL/+595x7B+DsDp/7BvBnBIMJajvktdUXwBgtAvlRoDynPvAoUKCVGY1pufTWzeM33HCe3UgWMII5rwJ6124IDasB2Wn6GdD/wX+O1lwq8B24BPfXaq2Li4vezk5b+U4ZwEV5JvPIo0AgMHw64pAbjYeOXXz+6dYt9a77fW63W6UqLT3oDGPk+PkBkFP08fv3G6DiELvLB5v5L72p98XQ35WGwOCu8mojvCAI/IJVJrsWMA5CZCSfPRs4E4lEtHIFkrc331Kr3UfQkIORUzdQnSCx8HTdgLuxsTHV1rDZIKOCT8J2ngL6b7j3N/yNScMXVnm9jodxYen796U4L5cFHtstRS0teeaRkZGzww6vwwFdrT90tLJEo27WNLbNhRfCsViCC3oSGBamcc+Vmpo+tG4ch9BOWHDIXzalUm/+3U69vVDqLIwq/QZufb9W+3FqKg7y93joTJU0x97a0mIygRywd/v9WpALFFVHK/M1qu2avv4JlqIwkgxxXTMYSfDhRJLD+2uUSmVKxseTnA+aayU4QGeba9sf+APKC5W2Wr1+3RkCY9nlJcg8UWCB1ZKXh+RHdptOa9M6us8U2KuO5jarVfnqvv4FPh7n40BHZygMI0EPMT4PDtmLK0AOiyLP+OCUgQKNvT5d66He7Pz4wCAXAnu9Xr/8KjvKYpiwJCxPSCBvC5LNZrNdC+0kg8wKg6HqaIlGpckvvYHTPhz30TyGJWYoSpwXQiJBxGg6meQ4n7PaycV4KCBDv0NUtt7bhoay8NzrOxcAPrnK29kuM5Kjo6PssiCIxHCKBfjpU7Pd77fpFQqtQ243tFZdys1X7W12V+DBuo7GDmeMwgTIzNO0jwuRYnR1iBBD4aTPiTvp6Pv5+PQkWKjeG1KRh3ZkB9f4HeTCG8hmk1XZH4OMTU0tE8OStGsC2QKPUZtMoXdo5Xa7ZRBkdbO6ry14Xg2vUE+MZePzFBbGa4rpMIaNnRBh7zEoPN4AHR3lGRyVGybKulTkzOhqiq3NwlBPxaCl/AuqNnb9bk8hcqHST5/mab3ttTaZUe7tVhgslsFjuSX5+aobV2brNBlZQLJnoNEpgBwVscTYvDAlMh4YpNPiOP4SUc/QTq8/N9SUuSPgJWu1rrJ64fGlk+ktrZLyx4+/Xr/rkoKbkU1yr7czJTvkCmizomOVJSUlpcWzsyqNWjUwKbDsvEBhsaCqw8djRPQ9QXA03RWd4vG2hsNzxFrnu5SGBvimc5nI3xjUSw44W3AH7ZHr7a2FhRJXmaRHKjXlSeGDNlkOBemsra09pNfpFTBZDlzKLcnNd1fM/tir0QxcSYqj1EycwsavqDt8U2Ro9RhJBCuOVHcJItdw2Bkmx52TKW4jlHsryOlNXot6SeuHPt4j37NHATB4hfDNMZmQbIbTZYU3YUqWwXak5Mrtlbc7+tf4Zmd/BJM8yxJjIoXNnVcrfSLJ30tgE0FlRQMtEMm2w3iIYJz0q0y5V2w515T9a4g4HFBnnVxvhGWXSKUuqTQn/UXLbC50LEbaZbWwZHq93ZKVVcofieiaWIwX2VFKeE+wJPNA3cYRVPiewPLBmuI2X4iYbjvMkBPB6q5U6FMgN4GMIiO4W6eDsGgV2C2tPT0SF5jSsrIyVz3IgRy5NeKQvX0LNpxAQ2FL0YHLlypz99VV3CFIjEWLXODGMJZYc1uFJ0gqsTpEjfcriz2cSDL9QZ7iPfBAeoloJDeln3trFyPdOmABNRgMEkNrocvlKiuT5pTDtwcuxvp6RSTi0OmrkNxug3MA8rFLFyufKPs/kj9//iSJj2GGo6MijNDbbqdAkVyUEKNcMOiLYSLnYQjyNRyzavzFjqycifyrDXuPabMKwwCOsKnxbtQYjfeof5BSC6MUsKUWyii1tynQkkC5altwA1kL2ot06Fi1tGWBwkqVtibzgmUgCmPdxAwUVi8TL0wdYxc0zJEpG845lyzxeb+y6XRnrFm2ZL8+7/nOe853XPlcwKWAISclZRh4MsSVyXi8XINMpvW0VlZWrk1WjivRwUqSpWkkA/b1Cc/NXItxGMfj7m7TlgPTB14Q8NHOxlqONn08PX3y5PfPNZ0te/vDpvkP7Dgp2E2fMPIayLHI3jypVAU5qSspKTc3CRxkloyHgS+hNXgrKzsReWMx3rNwShgvRmSNQuET2LfNv03H8WF0s+yiN4ZMpu6cTYMtR6cH9775HI2mN2dOvoDIv9qRuYYvx5ZFT9gayL98/+2XnXl5eLDQl5AXMsG8gQEGpg+Zm4HTilMyiGZkf48mrFEUDc3Mn0s1N5jNk5OTDbSshwU59fbqrYNbxtYfO/bhoefWz7z6wsmxpvkh+QZEdmw3fUXyPZDX/P7Nn5XePJQak9xMMAYvGAyFBgYGQkZGjroAc1WlxSmgS5XjzcUbM/2a3eGenwt+/Wu+O9VsNmdlZXVwRBxOakNDg1hQK9/69nMzb1MHP3y47IVj6z/+Gi9Hz9QMDb+14eDzkG8lGZG97rQn05kpxiDYGAQN2dgeCUH2Vq7N53JVyuIU0M3NzRnNMTlcNPQlZDMG4A5OKoeDfpoqashxVB9r+nMIKWtMQtPW1dOHTYxcMOzYVPPFTdfF3ZAIee++BbebQVdcVBey0RgKBELL+9uDvChqzeVK09DZ0FUM1GFI7tf0CU17z/6mM5eXM7KEw2ZzOGy01BxH2dj6r4XvyzH4BabqrdV2uVBYY9KNOLY/U/07jr93J6755ey+Ba87Pb0VLDqmAVNslMkAGyk0tqx23ujCWtpGsEs0ZyQ9SXpzsd6qqegvkttNpqGcE5Ans+rqYjJ+OGLsVh9+QK+Am4T8ArSTZyDLn/7A2VfE31Dz4/VxcbcyssudHsVDTaOri2QPRV5eHhhY3t8UikRdLsAqpYpWXSlqjr6q1LdV2BYL+OKffvrpREzuqFOI2Ao2cJG5wYGDrhAnUpzEIPOFckS2V5+zOHUFOBQ+Gkehj5xdcLnd6aQacknm8YKRiJHkEOCBaK7X5erkSqmtYslLVUpl82PNSn2hvkInFGSVl5efMDOypE7ClkgkbHZqKp4xh1xej4Mw6Jgs5AvLfvzV6dQ5+JgAyDcm7o0VG+Xuoo6FyEFPpD0SCYWWmwAHoojsQj8HqlQqpVJszMUodluJ3tJdwMEjXX6iPCvLzJFIOiQKkjmparU4J7s2W5AjyAaNYmPw+fayr4685xyhl2FHHIXei2JDxiPWhUmmRunx7NrVHnj1+7GmSGggwItSS0fmNKn0u2Rp8nhGCp5t1WZ9G0W+JJslEh9+EFkEWS0QCMRicUymxAX8obKDzz9/ZNuIrrugnpFv2btvJ8H0fD1mkLFYsFnBYNP3CYlnAqFQiKfN7exU0dYphYzeiaW1LiOjObnQ+QafIk+i3pBT2b4eDRIzMg0m+bvZ9Tj8InGB0ERHzyPbtqHgw9mMfNe+nb0k02a8siUGjZELCVsSl2Ygo3O6IHdyyU7G0CvHM8eLM5L36N7o6+iADBqyGHKPRMEOY0GrUzFEmG1cHdU7kBm4vewgtqmlPxvj9zhHBCRfc/VtkFFqsBfhoHH//vMHExPnA4EATyvDA+bqRCvBwNacrC+06jeWNjrf0Pnq/pEb2D4bOnl49+7dIvQyDBG6WU52PdEFfHkNIuPm4kxjYYXF2bcij/ZOdAHGSS8ma4PLF9af/zwR5SZZO7qw4OrspNT5+QxsLVQmO7uL2HV1HZJYuSfNDZyeKVuPhmRS2WymkYqzayFTZDqD0Rvdw41W0Jfk3tZWHOdT6LxF8xxsunDmPNVmJhAY0HrcC6BdXsw1RgldkukLLd06wERPTqJ3chrEHNuUTaMBrFCQjA+UXCwYdjiwquxlP77OwHGrHomvqLBcrPYoZBxuceii1wiW1rj/wrXnEzHOQDZ6DAsLO12uvLx8wPmbN5colW0W3YgErg+yhGM2Y07VYb/fpgkv7g5rNCIRZ1LBxl9CxiMWq/XFN/dV1zwc/3BM3rdz1D3RinpjmgFDXl7/Fx4wjKV5KnfQi8iUWcrloo1Kx62YKd8Okn1YwKIGtfpntVpT5bftWVxc7NdoqIUycgMyQ6bHa82l2wrYt/xLTk/Hw53CZF7Hmtly/vxVgBEa9TYaoztdXlenNy+PW7K2RKUstDjDO3bUdXQA7pCw1WLBSJ+6T1Nls1oAV1RowmEOWwIa+zXNM85iP/7y/xsakjHR1ElQbS1lDs588vrr5K7MtNE4MTrq9XrT3NySEq5ys2VRs4NkVFqBJ0k9XESXV9Yqaz9gq7WiPxwOS3wKambi7Ox6h9BuAoxbqSvIE3jCMDJYT62DLJtZAhrLvDM6EAgZta29oJFZpeLGOy3WqR09VGc2XPQNuiHsW/T7KxbxT35rxR5csfh8PoUIcg7mWW76HVfOsP4v95Lcit94oUhZx+LNX4SXzrii2CxlHg/P7cXgqvLjt+F/t2H9KCgvRyRS95E80o/ITkubHzLuk3p6/pH59nOf4vbxynIrDfA01yn/lhfcE7wVmlJzX3o5vkRZ5fdPYe3uqJNIJtkxuWikwt+/aCnR+1HttkI6DyvYqSuy6d4r3rg+AhlmV2s6Bs5DxRmQX7soe9OjvKAxFOWxtLKo29vJVWWknJ6drZqawjyjh5jN6JHDkJ1W6x5LidJvbdvcGF+IZsY08J9zBLUOedn9Dz700KpVq64gU7WfZORSKTYEyK/F7DPu3KARgxc1sDwerYyFkTKbWUVux2T5iRO4lHo3uxbV3oO0+swqNFalHpEVbIUEshrw9me2JCQM3nHH/Q88+OCD9AVo/DPPUCnxuD5ZX/zY7TffBxo4ZIN2165IJBKY4Gl3YXhYKXifggwa+yPkdx5/9kWHztmmr8rEV9JDr8J5OHY0EVNkYdnWwYTBwcHVNO7AN7j/gQce+I+clvadvrCk1HD7nXE33Er40oduuuRsb2+PBKI8GdmsjGa8OE8xobPKQeOWcZNQ16/PPH369GzmLGbCb4OMdkr3CNmP1wurB2PygenpubmW1fRrNbNLrqzndCyY/M2471MlQcYAvrSvl5GPHz8eGp3oYuHPTz2GY2cmExqpKTTJFiVuUTBOk2vzSRRYyjk5775bW/vEW3JEJrnl1CFc0xxtYUZsf76N5F53njT/pcb4xhJVbkymetw2IfPsaifZiDVvYK3DSNk4O5vJlPuS3D1OV3QMjLyaMCqNKR7ORgN7a1PN1gRGnh774dChsVOIfEmmzBO9bi93bSPdOf5LvuW2Xh5koiOQkwxY7ikU+fLM23WfHT8OmcrtJ1mBOYZcC3n7hqchrz7Q0jL3xx8f/XAoJs+tZCbZneftfCU+/rLMmIkfZjyAMSDzcnMJ3kgwZNCY6FjmdsiIjPU2ZasgWSRKFYMmuZoiH5g+enRujvk4cLmcnsdd+8qV5LGBSGRFzsWiwhkfmS+TH4f8F8FU7CmbzdofZod308k3h6q9ofqOBLIRleQ/Tp062jI39zewUaw7BOflzwAAAABJRU5ErkJggg==" #define ZEND_LOGO_DATA_URI "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAPoAAAAvCAYAAADKH9ehAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAEWJJREFUeNrsXQl0VNUZvjNJSAgEAxHCGsNitSBFxB1l0boUW1pp3VAUrKLWKgUPUlEB13K0Yq1alaXWuh5EadWK1F0s1gJaoaCgQDRKBBJDVhKSzPR+zPfg5vLevCUzmZnwvnP+k8ybN3fevfff73/vBAJTHxc+khL5kr6T1ODk5nAgTRTWloghFVtEg/zfh2PkSvq9pJGSKiX9SdKittbJoD/PSYkrJD0vKeB4IsNNotfuUtHk/CM+IvijpF9KGiDpGEkLJZ3lC7qPeKKTpD9IWiDpUOfWPCi61ZeLvD2VIhTwp9QlTjK5NsIXdB/xxHmSpvD/OucWPSAyQw2+LfeG1SbXVra1Tqb785xUaNdMel0g7Iu5V1zPv6dJqpD0kKR/+ILuI55o8oeg1bFT0kWSOkraQxK+oPvw0TZR3ZY758foyQXf//ZxUFh0Q/GEfNf9gHkaJ6m7pHJJSyTt9tnXhxtBR2EGlnHCMbZMaHuHzX19JZ0u6VRJh0k6hM+BpMjnklZIelPSNhff3V5StkNlEWBMFm+3LcC+BW3GuZP2GvfmiEiCCMUzxZIKRGSt9zeML/fdGAW9JB3O8c6SlMZ+b5f0qaQiF7EpnieXY1auvZfG7zhSUk8RSS428F7M5xfsh1eAV/vxOzoq16sklZBqbdpo5H2qDPRQXoP3Ki0+20FSFyrZUgt+Rt/7KH2vZb8/t/iMG2Sy/0dI6sbvgHGoV8a3xErQb5Q0iTfHCplkzlkW7w+VNF3ST7QJUzFK0pVkDFiw+yV95uC7r5Z0k3CW2ApwIkrJ9B9IelfSh2SIlqC/pDFUZAVk0rQoMhk2GYswx+AtWvMKPtcyEckW37pPwsIHNAuBniDpYhEpBMmJwvibJL0gIlVh39r0C8UlczkXQ/mM6OtEzuf3RfPVAxUY47f5PStcGKPxpOMldbbxiBptPMavJX1PuQ/P/olyz12S7rD4PLyqBTQ8gyXVSOot6VK+dxR53wyl7POjkv7pkpcwpleJSCHP4eQjM0BB/ZuG4Hl9EO8mQx4ZQ0FfL+k+k+t4wNlULpkO24IGnSzpQklzKPDRAMvZ1eXz9uXfH/Pvx5Ie44C5zYQXUgDPj6LEnMCQ3AFkjjupjGF9/kJmxPw1oiquz+6dalXcCRSmYxwK0kDSRI71azb3Y+6GiMi6P/5ey3F3YpExjxdQoG61uX8gBetkh2OWFkUIVGUT1pS9yosZNu1nkl8uZH+mikhxkx1wz7mkB0WkXsKJFw1ZuSWKotY9wjNJS6mUy41JK5P0c2qCnBgIeQWZvEK7Dnf6WUljTT5TS7d0KwezkJShdWIeGeuKKJo7FktUQylcl0i6RtL/HH4OjP+wB0UTLTGHfubRDWyi1g7SaoZQ495z9w7RpaHKqHEfLeklEyWzk+7dl3TTu1KQCpV7+pBB4IWstFFAgvOpJnTL6DoW0xPbw3k/nIYkW+kbmHeXhUEABklazrBDBdzTDfyuBo5DPq1eoUk7ZbSk70l6n3MZjUdCDpQvMF/rezn7/hX7Xs8wsj/7rsrWdQxnZtrwwENUosJkDDZxTjOUkEH1ds6lzJyDZzGScRsonGNcMCIG+WgRKTRQ8Su2p7uRi/mlKjZKekREChS2KIOcTvfqp3RZDlM+cxnfv8Thc75Pt8kqo92VzNTbxBqcQlceivAdByHDIxbvFTMOLovyHAGGK3qc/jJDoDc4hpjABzBm4UAglBFqEAOqt8mB29ss4uJnNCHfSK/tVZMYEfMykt7Bcco1eDLDHCT8gmzzRdLHZL6wRSgzg6GIgVl8Xj2uhPA+oQn53yTdK2mVMC8NzuJ8zaSyM/ApxyzWCFJRvUQ3eQ29BTNFcRgt+FTl2g30zDZZtD/ZRMifE5ES6Y9MxqAHQ7XZikI9nd97j5p1f83GZTPr6Crt2sOcOB1zTYT8HrqjVRZx4wbSAt47SXn/YsZV9zp4zuvJgNGQRaszmoN1rBY6IH4dHiVHcA5dZd2zeIbPv8ZBkghYTQFTx/h1WvSz6c3kM5ewGG8Prvxc5DZWS2u+dypnM5Y3sIJMXmbxfXW0misZN56oxITnWsyl2fg+6+C+zWTefMWr68RwaYF271htHBZqCsKqL28wB/ACjYShrE9nUjfWmEU33A7woqbR4k5UlNk4yoYOzOHvtGs30KO1QgnlZC2VohGOIGn7WEvW0ZdoMeCHfBgdo8X++m3V+s2wEHKzJMblJom92+ne2SHDwT1gknUispPpJLrrVZqwLxTmy5F5jOdVS72F/b6UwlbrcEytrD00+a8l/ZUM82jEZd8peu8uNYS8JxNWqis5IYqQCy1rPUULh8Y7fOYal3zzmPb6aJN7zlf+32bBV9ESclNE85WUX4j4oNbl/fM1b2eoxX3jyXNqiDTP4Xe8Rm9ItfSjvAr6DM0d+o5MXW/CuHO0a7eZTLYT3KF9LktYZ/WdCI+IkoV+lFZ6l3J9OF14HdM0F3MrhXxFjJmqhh5FBera24XqxaCqL0UosK97Z2ku+yJaEqf4D62ByoROcjZuN78Xaa9zTBSzKvxvC+vlrmgWVPU2h4j4FCO5lZ+vNBnpYHHfOOX/PfR83eApTaGM8CLop5l88WSLWAOu4AiNme5owcBO1xhlLGO/eGAFkyYqrtFe5zKzqU7KBE5o/BAIiv7VJSK7qV4GhEF1XtSk0YseWl6lWYI+cXj6pigJLkH3Vk0qfebxe4q0JGOGSDxCWn/Nchk9qJgMfGKS87LDes1IHeVW0LszgaC6sPMYE5lBt4CzRcuy4lVMLKlWfWwcJ+YpxtcGjtOYfzRjTgNIlv0rnpyCveeHNFSJ/jUlonH/3nNYqyOU28qYhHOLbzVPqFc81JQDKxnQ5twLdmjfmQzlxU6eoZ/mma3y8D3VonlhUr6bElhMwJ81RseSxW+jfOYULdYGAw5s4WBtpeU0ijKwxnp/HCfn70piCNlMFEUU8/WpmnZe1Bq80r96m5yMkIwx9nnNHTWFs114q0ArM1HsiUY7j5/rKFIThdrrzR7agHyoy9vd3Ag64uEfKa+xjIKlLqtTUBB7FWgJrQ9joFl1d2cQ2wzHaeDXa6/ztO9Wx+OT+FrzSAKuV12ptOZp+ljnaVawk8uxDpnMZXYCGB3PXqe5sl7QQ5ubhhQR9B4mQpvjIR+gJgrbOxV0rK/rVUyXmyRWdI2a2YLEhVP3BwmN9sJ9BtQpKkxiSDOrUeUhaeQaPevKzKQ3oIVTSGatcynoRl29sIkh440a8pURNoz00Ab4Ts1obxCps1FKl8k5IpKbcmsgu6nz6ETQC+iSqoKKOPmVJBmYnDjHX4EozB9s7TgwykkyYS13URAHpmstYIloOP/HEi6Wx5a4+DwSpH2V18tTyHUPm3iQeS1s09ai4/0ntVgNRQmzHTRulGwaQNnei3FgHqPcMBEJlXrNioAaE8AcupKBd7ElBu1uTxCzg+dmKB4TahiQNX/OxssAb00Uzdeci4S3FYhEQdfkWCrc1cI2K+2EDhsP1OUxZGUnOWTmcgphV0UgZ4jUR1hLlBiuJfqJpb61CXimOrq8RqiEeu6TU3iMwdzYgWhUnWHDDKr0ptLar6USqmOfYYiGMMTUN/KgziGVTo+pNJHBBfF0zVAQc6N2DUL+tcO2Yc1Rk2ss+yBmOko43yCSCljJXAWA7PD4eAt6MBy2yiNACRvVVN05t40pPLYPsT+zlRDpOLG/Jt8OSGKhmnBpivV7q/Y6JkucVgkyWKb52rVZwl0tvNDi+AzRvKjfK1Dnjvpd1FhPEc1LBVsbqENXN35cFaPY2BIVGdlWYZKqgPPj/RythNtpcNycpoOxwAae0bGwhAkAQg01cfiDWDRqZtHhCqFQ5FAtOXKXh/Yh6Ci2N5YMUDW2SHg/N3scn02N++cnMIZCBdwS9gtApRxqDc6OlzWtSrdc8cJGlzP5fzZDri1tQNixISWL/5fSQvcVzfe/wzXfSG8Kuw03pHB/t5KMik+EYJ1EC1d0zCw6fofqRI2ZJwpvyxN4uPs0q/6UR2szyESobxatf3aa7jvfrT0DGPNpYV3H3CI0BYLGllQdy7TX14rUP/zzDHpuRp0EPLnJvH68Qij/RXnyIyku5Ea+5S3NO7s01q77eMY1qqY8T7Qs+4qtq+o2UWhjZO6HuWhjJBlZXWbAHvbFSTAxqMW+RbuG3VfviAP36tshujINh6Tr3kE0BNMl5x8Qq6+mVTdwrMlzpRrGaGPzVpw9NDNFngjoFZZzRCS/FRPXHRZT31X2MgfYTQYX1WE1moaaQJfKEFTs/camkXnUwt9YtNWPiuc67VmRlb0yiRgS/cAe7is0QXuTAm9kikM2DNc5OkeGRaMU8tq0TJHbUCOtezMeRfITiSv1PLLbGE5gb/NOB/1AuR1KlLETDltidyR4XIPasyEnc6eIbRa9kfNifFeXJOAnVJBiKfFCvobcLKccLHWojHJpIPH3iXQlpoNLrdcH44sucvmQOHHjZ9rDrGdbixVmbk/XGy4mtiKuoQDjmQpFJLs6wuSZvqKmL0ky6zOZLry+420UKUaue5ooyeqy9+iopgM989cp1Dcp16bSU1tOJbyFyjedTID5wOk6OAUFFXUDKFRLkmBM3xH7fzIJwPLsxexDMWP2b8g38DqN45ywCuH0VNuv+XmjwOYCjtUakbg6AkGlNoQGBMB5A9g8hh2g7zFE2U4F35FxfHfmwwbxcz3Yl32C/oAwPwDAS6UXdpOhXPZ27Trc9R/SLTla0zzGoXl2QAexnLVZJB/CZMpV7HthfL4lJIrb54u+tdv3/rCiSbw+k88yM9ZxXgKwlHmZycq13iSr0KeMHmUZw6r1VICrLT4D5fy4wq/5DAvfjaWC9oAd9KxwTNUJynUjL+EqpwSTME1zOWMBuIxmZ7p9RCsNq+NmdxW09I1MdNkJeYZNHsIt0qKEO2Z4kvmHadS+Xqv2cqzc93rpuhdl54tg2DISuJljBW3uZjMHrAPqHOYK6zPIM23G2+14Rts4cyLbdxo3Y667UskOo/W/m/PwRhQBwZFkT2vXzDbTtLMZCyfP1155bbfDrpjKZoYH41bO+d97jmEgMPVxFMF0iHESIkiNtDhKuwV058cw0dBZNP+lFsSU/6VWf0E4P/x+IF2eJnokr4uW/2jAKPYjjRb7Cxef70c3qsCl0im1Gj/Uu2eF6sWo0rUiTQq7zS+pYjywnXYwcyOZfI4mKgHj9N2ttHqbRfSlQXhjw5XXy4S7ZbzOovkxVRsphHp8ia3HlyleZS1zHcvoVrdjuNFdEe7edGHzSbpSria/WZ3+cxYV5DCx/4w7FUfyfTW0WO+i7x2YrzKUXZFw/sut+OxJDGkHUxEZPwgCquQcIgxZR9oXekDQk8FF60bqwocupaIoEz6EmaC3C+0Ro6Wgp4eb2tpPJqN+4xXFXQ3TfUfCc5PDNnLZDpLIV1NADKyjZa87mHgmWX57bYdIfIY3pdCGf43xQUXI62kBn3fZxi4SPC8crIjDQ4yzFAaz/XcPJn7xf03VRzIB5Z7qCbBzPQi5jga2E9bCD+ELug8ficEZCk/Cmj8Ro3aLtLxDR1/QffhIHNRTUZCf+S5G7SJBp2b7G31B9+EjcVAFEInZQ2LU7jiN1zf4gu7DR+KwTvkfO9bGx6BNnEQ8XXmN5cT3fEH34SNxwN4A9dgknIEwyWNbeRTwV7WYHBVwFQfbwKb7vOUjiYAiKVT1PczXqCLD/n5UbuLcNxTKoCgExSFNmsFCHI6iJBQFnUbqqbWPHyFceDAOrC/oPpIN+FVaVLrNUa6dLPbvoEQdO4pd1OUylBVkCutsOkqosbNvwcE6qL6g+0hG3MY4ejots1pT3kE4P9QDdfuLKeDfHswD6gu6j2TF2yQcLoqEGurre9EdP1QTfmxJRdn0NlrvD+jmY69Egz+UQvxfgAEALJ4EcRDa/toAAAAASUVORK5CYII=" BEGIN_EXTERN_C() PHP_FUNCTION(phpversion); PHP_FUNCTION(phpinfo); PHP_FUNCTION(phpcredits); PHP_FUNCTION(php_sapi_name); PHP_FUNCTION(php_uname); PHP_FUNCTION(php_ini_scanned_files); PHP_FUNCTION(php_ini_loaded_file); PHPAPI zend_string *php_info_html_esc(char *string); PHPAPI void php_info_html_esc_write(char *string, int str_len); PHPAPI void php_print_info_htmlhead(void); PHPAPI void php_print_info(int flag); PHPAPI void php_print_style(void); PHPAPI void php_info_print_style(void); PHPAPI void php_info_print_table_colspan_header(int num_cols, char *header); PHPAPI void php_info_print_table_header(int num_cols, ...); PHPAPI void php_info_print_table_row(int num_cols, ...); PHPAPI void php_info_print_table_row_ex(int num_cols, const char *, ...); PHPAPI void php_info_print_table_start(void); PHPAPI void php_info_print_table_end(void); PHPAPI void php_info_print_box_start(int bg); PHPAPI void php_info_print_box_end(void); PHPAPI void php_info_print_hr(void); PHPAPI void php_info_print_module(zend_module_entry *module); PHPAPI zend_string *php_get_uname(char mode); void register_phpinfo_constants(INIT_FUNC_ARGS); END_EXTERN_C() #endif /* INFO_H */ PK!12s s ext/standard/streamsfuncs.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Wez Furlong | +----------------------------------------------------------------------+ */ /* Flags for stream_socket_client */ #define PHP_STREAM_CLIENT_PERSISTENT 1 #define PHP_STREAM_CLIENT_ASYNC_CONNECT 2 #define PHP_STREAM_CLIENT_CONNECT 4 PHP_FUNCTION(stream_socket_client); PHP_FUNCTION(stream_socket_server); PHP_FUNCTION(stream_socket_accept); PHP_FUNCTION(stream_socket_get_name); PHP_FUNCTION(stream_socket_recvfrom); PHP_FUNCTION(stream_socket_sendto); PHP_FUNCTION(stream_copy_to_stream); PHP_FUNCTION(stream_get_contents); PHP_FUNCTION(stream_set_blocking); PHP_FUNCTION(stream_select); PHP_FUNCTION(stream_set_timeout); PHP_FUNCTION(stream_set_read_buffer); PHP_FUNCTION(stream_set_write_buffer); PHP_FUNCTION(stream_set_chunk_size); PHP_FUNCTION(stream_get_transports); PHP_FUNCTION(stream_get_wrappers); PHP_FUNCTION(stream_get_line); PHP_FUNCTION(stream_get_meta_data); PHP_FUNCTION(stream_wrapper_register); PHP_FUNCTION(stream_wrapper_unregister); PHP_FUNCTION(stream_wrapper_restore); PHP_FUNCTION(stream_context_create); PHP_FUNCTION(stream_context_set_params); PHP_FUNCTION(stream_context_get_params); PHP_FUNCTION(stream_context_set_option); PHP_FUNCTION(stream_context_get_options); PHP_FUNCTION(stream_context_get_default); PHP_FUNCTION(stream_context_set_default); PHP_FUNCTION(stream_filter_prepend); PHP_FUNCTION(stream_filter_append); PHP_FUNCTION(stream_filter_remove); PHP_FUNCTION(stream_socket_enable_crypto); PHP_FUNCTION(stream_socket_shutdown); PHP_FUNCTION(stream_resolve_include_path); PHP_FUNCTION(stream_is_local); PHP_FUNCTION(stream_supports_lock); PHP_FUNCTION(stream_isatty); #ifdef PHP_WIN32 PHP_FUNCTION(sapi_windows_vt100_support); #endif #if HAVE_SOCKETPAIR PHP_FUNCTION(stream_socket_pair); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!odzIIext/standard/microtime.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Paul Panotzki - Bunyip Information Systems | +----------------------------------------------------------------------+ */ #ifndef MICROTIME_H #define MICROTIME_H #ifdef HAVE_GETTIMEOFDAY PHP_FUNCTION(microtime); PHP_FUNCTION(gettimeofday); #endif #ifdef HAVE_GETRUSAGE PHP_FUNCTION(getrusage); #endif #endif /* MICROTIME_H */ PK! ext/standard/url.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | +----------------------------------------------------------------------+ */ #ifndef URL_H #define URL_H typedef struct php_url { zend_string *scheme; zend_string *user; zend_string *pass; zend_string *host; unsigned short port; zend_string *path; zend_string *query; zend_string *fragment; } php_url; PHPAPI void php_url_free(php_url *theurl); PHPAPI php_url *php_url_parse(char const *str); PHPAPI php_url *php_url_parse_ex(char const *str, size_t length); PHPAPI php_url *php_url_parse_ex2(char const *str, size_t length, zend_bool *has_port); PHPAPI size_t php_url_decode(char *str, size_t len); /* return value: length of decoded string */ PHPAPI size_t php_raw_url_decode(char *str, size_t len); /* return value: length of decoded string */ PHPAPI zend_string *php_url_encode(char const *s, size_t len); PHPAPI zend_string *php_raw_url_encode(char const *s, size_t len); PHPAPI char *php_replace_controlchars_ex(char *str, size_t len); PHP_FUNCTION(parse_url); PHP_FUNCTION(urlencode); PHP_FUNCTION(urldecode); PHP_FUNCTION(rawurlencode); PHP_FUNCTION(rawurldecode); PHP_FUNCTION(get_headers); #define PHP_URL_SCHEME 0 #define PHP_URL_HOST 1 #define PHP_URL_PORT 2 #define PHP_URL_USER 3 #define PHP_URL_PASS 4 #define PHP_URL_PATH 5 #define PHP_URL_QUERY 6 #define PHP_URL_FRAGMENT 7 #define PHP_QUERY_RFC1738 1 #define PHP_QUERY_RFC3986 2 #endif /* URL_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!56%ext/standard/credits.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef CREDITS_H #define CREDITS_H #ifndef HAVE_CREDITS_DEFS #define HAVE_CREDITS_DEFS #define PHP_CREDITS_GROUP (1<<0) #define PHP_CREDITS_GENERAL (1<<1) #define PHP_CREDITS_SAPI (1<<2) #define PHP_CREDITS_MODULES (1<<3) #define PHP_CREDITS_DOCS (1<<4) #define PHP_CREDITS_FULLPAGE (1<<5) #define PHP_CREDITS_QA (1<<6) #define PHP_CREDITS_WEB (1<<7) #define PHP_CREDITS_ALL 0xFFFFFFFF #endif /* HAVE_CREDITS_DEFS */ PHPAPI void php_print_credits(int flag); #endif PK!}'@ggext/standard/md5.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Alexander Peslyak (Solar Designer) | | Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef MD5_H #define MD5_H PHPAPI void make_digest(char *md5str, const unsigned char *digest); PHPAPI void make_digest_ex(char *md5str, const unsigned char *digest, int len); PHP_NAMED_FUNCTION(php_if_md5); PHP_NAMED_FUNCTION(php_if_md5_file); #include "ext/standard/basic_functions.h" /* * This is an OpenSSL-compatible implementation of the RSA Data Security, * Inc. MD5 Message-Digest Algorithm (RFC 1321). * * Written by Solar Designer in 2001, and placed * in the public domain. There's absolutely no warranty. * * See md5.c for more information. */ /* MD5 context. */ typedef struct { uint32_t lo, hi; uint32_t a, b, c, d; unsigned char buffer[64]; uint32_t block[16]; } PHP_MD5_CTX; PHPAPI void PHP_MD5Init(PHP_MD5_CTX *ctx); PHPAPI void PHP_MD5Update(PHP_MD5_CTX *ctx, const void *data, size_t size); PHPAPI void PHP_MD5Final(unsigned char *result, PHP_MD5_CTX *ctx); #endif PK!Ø!!ext/standard/php_smart_string.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | | Xinchen Hui | +----------------------------------------------------------------------+ */ /* Header moved to Zend. This file is retained for BC. */ #include "zend_smart_string.h" PK![$y y ext/standard/php_image.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef PHP_IMAGE_H #define PHP_IMAGE_H PHP_FUNCTION(getimagesize); PHP_FUNCTION(getimagesizefromstring); PHP_FUNCTION(image_type_to_mime_type); PHP_FUNCTION(image_type_to_extension); /* {{{ enum image_filetype This enum is used to have ext/standard/image.c and ext/exif/exif.c use the same constants for file types. */ typedef enum { IMAGE_FILETYPE_UNKNOWN=0, IMAGE_FILETYPE_GIF=1, IMAGE_FILETYPE_JPEG, IMAGE_FILETYPE_PNG, IMAGE_FILETYPE_SWF, IMAGE_FILETYPE_PSD, IMAGE_FILETYPE_BMP, IMAGE_FILETYPE_TIFF_II, /* intel */ IMAGE_FILETYPE_TIFF_MM, /* motorola */ IMAGE_FILETYPE_JPC, IMAGE_FILETYPE_JP2, IMAGE_FILETYPE_JPX, IMAGE_FILETYPE_JB2, IMAGE_FILETYPE_SWC, IMAGE_FILETYPE_IFF, IMAGE_FILETYPE_WBMP, /* IMAGE_FILETYPE_JPEG2000 is a userland alias for IMAGE_FILETYPE_JPC */ IMAGE_FILETYPE_XBM, IMAGE_FILETYPE_ICO, IMAGE_FILETYPE_WEBP, /* WHEN EXTENDING: PLEASE ALSO REGISTER IN image.c:PHP_MINIT_FUNCTION(imagetypes) */ IMAGE_FILETYPE_COUNT } image_filetype; /* }}} */ PHP_MINIT_FUNCTION(imagetypes); PHPAPI int php_getimagetype(php_stream *stream, char *filetype); PHPAPI char * php_image_type_to_mime_type(int image_type); #endif /* PHP_IMAGE_H */ PK!uhhext/standard/file.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Rasmus Lerdorf | +----------------------------------------------------------------------+ */ #ifndef FILE_H #define FILE_H #include "php_network.h" PHP_MINIT_FUNCTION(file); PHP_MSHUTDOWN_FUNCTION(file); PHP_FUNCTION(tempnam); PHP_NAMED_FUNCTION(php_if_tmpfile); PHP_NAMED_FUNCTION(php_if_fopen); PHPAPI PHP_FUNCTION(fclose); PHP_FUNCTION(popen); PHP_FUNCTION(pclose); PHPAPI PHP_FUNCTION(feof); PHPAPI PHP_FUNCTION(fread); PHPAPI PHP_FUNCTION(fgetc); PHPAPI PHP_FUNCTION(fgets); PHP_FUNCTION(fscanf); PHPAPI PHP_FUNCTION(fgetss); PHP_FUNCTION(fgetcsv); PHP_FUNCTION(fputcsv); PHPAPI PHP_FUNCTION(fwrite); PHPAPI PHP_FUNCTION(fflush); PHPAPI PHP_FUNCTION(rewind); PHPAPI PHP_FUNCTION(ftell); PHPAPI PHP_FUNCTION(fseek); PHP_FUNCTION(mkdir); PHP_FUNCTION(rmdir); PHPAPI PHP_FUNCTION(fpassthru); PHP_FUNCTION(readfile); PHP_FUNCTION(umask); PHP_FUNCTION(rename); PHP_FUNCTION(unlink); PHP_FUNCTION(copy); PHP_FUNCTION(file); PHP_FUNCTION(file_get_contents); PHP_FUNCTION(file_put_contents); PHP_FUNCTION(get_meta_tags); PHP_FUNCTION(flock); PHP_FUNCTION(fd_set); PHP_FUNCTION(fd_isset); #if HAVE_REALPATH || defined(ZTS) PHP_FUNCTION(realpath); #endif #ifdef HAVE_FNMATCH PHP_FUNCTION(fnmatch); #endif PHP_NAMED_FUNCTION(php_if_ftruncate); PHP_NAMED_FUNCTION(php_if_fstat); PHP_FUNCTION(sys_get_temp_dir); PHP_MINIT_FUNCTION(user_streams); PHPAPI int php_le_stream_context(void); PHPAPI int php_set_sock_blocking(php_socket_t socketd, int block); PHPAPI int php_copy_file(const char *src, const char *dest); PHPAPI int php_copy_file_ex(const char *src, const char *dest, int src_chk); PHPAPI int php_copy_file_ctx(const char *src, const char *dest, int src_chk, php_stream_context *ctx); PHPAPI int php_mkdir_ex(const char *dir, zend_long mode, int options); PHPAPI int php_mkdir(const char *dir, zend_long mode); PHPAPI void php_fgetcsv(php_stream *stream, char delimiter, char enclosure, char escape_char, size_t buf_len, char *buf, zval *return_value); PHPAPI size_t php_fputcsv(php_stream *stream, zval *fields, char delimiter, char enclosure, char escape_char); #define META_DEF_BUFSIZE 8192 #define PHP_FILE_USE_INCLUDE_PATH 1 #define PHP_FILE_IGNORE_NEW_LINES 2 #define PHP_FILE_SKIP_EMPTY_LINES 4 #define PHP_FILE_APPEND 8 #define PHP_FILE_NO_DEFAULT_CONTEXT 16 typedef enum _php_meta_tags_token { TOK_EOF = 0, TOK_OPENTAG, TOK_CLOSETAG, TOK_SLASH, TOK_EQUAL, TOK_SPACE, TOK_ID, TOK_STRING, TOK_OTHER } php_meta_tags_token; typedef struct _php_meta_tags_data { php_stream *stream; int ulc; int lc; char *input_buffer; char *token_data; int token_len; int in_meta; } php_meta_tags_data; php_meta_tags_token php_next_meta_token(php_meta_tags_data *); typedef struct { int pclose_ret; size_t def_chunk_size; zend_long auto_detect_line_endings; zend_long default_socket_timeout; char *user_agent; /* for the http wrapper */ char *from_address; /* for the ftp and http wrappers */ const char *user_stream_current_filename; /* for simple recursion protection */ php_stream_context *default_context; HashTable *stream_wrappers; /* per-request copy of url_stream_wrappers_hash */ HashTable *stream_filters; /* per-request copy of stream_filters_hash */ HashTable *wrapper_errors; /* key: wrapper address; value: linked list of char* */ int pclose_wait; #if defined(HAVE_GETHOSTBYNAME_R) struct hostent tmp_host_info; char *tmp_host_buf; size_t tmp_host_buf_len; #endif } php_file_globals; #ifdef ZTS #define FG(v) ZEND_TSRMG(file_globals_id, php_file_globals *, v) extern PHPAPI int file_globals_id; #else #define FG(v) (file_globals.v) extern PHPAPI php_file_globals file_globals; #endif #endif /* FILE_H */ PK!kxext/standard/quot_print.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Kirill Maximov (kir@rus.net) | +----------------------------------------------------------------------+ */ #ifndef QUOT_PRINT_H #define QUOT_PRINT_H PHPAPI zend_string *php_quot_print_decode(const unsigned char *str, size_t length, int replace_us_by_ws); PHPAPI zend_string *php_quot_print_encode(const unsigned char *str, size_t length); PHP_FUNCTION(quoted_printable_decode); PHP_FUNCTION(quoted_printable_encode); #endif /* QUOT_PRINT_H */ PK!%LLext/pcre/pcrelib/pcreposix.hnu[/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ #ifndef _PCREPOSIX_H #define _PCREPOSIX_H /* This is the header for the POSIX wrapper interface to the PCRE Perl- Compatible Regular Expression library. It defines the things POSIX says should be there. I hope. Copyright (c) 1997-2012 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* Have to include stdlib.h in order to ensure that size_t is defined. */ #include /* Allow for C++ users */ #ifdef __cplusplus extern "C" { #endif /* Options, mostly defined by POSIX, but with some extras. */ #define REG_ICASE 0x0001 /* Maps to PCRE_CASELESS */ #define REG_NEWLINE 0x0002 /* Maps to PCRE_MULTILINE */ #define REG_NOTBOL 0x0004 /* Maps to PCRE_NOTBOL */ #define REG_NOTEOL 0x0008 /* Maps to PCRE_NOTEOL */ #define REG_DOTALL 0x0010 /* NOT defined by POSIX; maps to PCRE_DOTALL */ #define REG_NOSUB 0x0020 /* Maps to PCRE_NO_AUTO_CAPTURE */ #define REG_UTF8 0x0040 /* NOT defined by POSIX; maps to PCRE_UTF8 */ #define REG_STARTEND 0x0080 /* BSD feature: pass subject string by so,eo */ #define REG_NOTEMPTY 0x0100 /* NOT defined by POSIX; maps to PCRE_NOTEMPTY */ #define REG_UNGREEDY 0x0200 /* NOT defined by POSIX; maps to PCRE_UNGREEDY */ #define REG_UCP 0x0400 /* NOT defined by POSIX; maps to PCRE_UCP */ /* This is not used by PCRE, but by defining it we make it easier to slot PCRE into existing programs that make POSIX calls. */ #define REG_EXTENDED 0 /* Error values. Not all these are relevant or used by the wrapper. */ enum { REG_ASSERT = 1, /* internal error ? */ REG_BADBR, /* invalid repeat counts in {} */ REG_BADPAT, /* pattern error */ REG_BADRPT, /* ? * + invalid */ REG_EBRACE, /* unbalanced {} */ REG_EBRACK, /* unbalanced [] */ REG_ECOLLATE, /* collation error - not relevant */ REG_ECTYPE, /* bad class */ REG_EESCAPE, /* bad escape sequence */ REG_EMPTY, /* empty expression */ REG_EPAREN, /* unbalanced () */ REG_ERANGE, /* bad range inside [] */ REG_ESIZE, /* expression too big */ REG_ESPACE, /* failed to get memory */ REG_ESUBREG, /* bad back reference */ REG_INVARG, /* bad argument */ REG_NOMATCH /* match failed */ }; /* The structure representing a compiled regular expression. */ typedef struct { void *re_pcre; size_t re_nsub; size_t re_erroffset; } regex_t; /* The structure in which a captured offset is returned. */ typedef int regoff_t; typedef struct { regoff_t rm_so; regoff_t rm_eo; } regmatch_t; /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE, the appropriate export settings are needed, and are set in pcreposix.c before including this file. */ #if defined(_WIN32) && !defined(PCRE_STATIC) && !defined(PCREPOSIX_EXP_DECL) # define PCREPOSIX_EXP_DECL extern __declspec(dllimport) # define PCREPOSIX_EXP_DEFN __declspec(dllimport) #endif /* By default, we use the standard "extern" declarations. */ #ifndef PCREPOSIX_EXP_DECL # ifdef __cplusplus # define PCREPOSIX_EXP_DECL extern "C" # define PCREPOSIX_EXP_DEFN extern "C" # else # define PCREPOSIX_EXP_DECL extern # define PCREPOSIX_EXP_DEFN extern # endif #endif /* The functions */ PCREPOSIX_EXP_DECL int regcomp(regex_t *, const char *, int); PCREPOSIX_EXP_DECL int regexec(const regex_t *, const char *, size_t, regmatch_t *, int); PCREPOSIX_EXP_DECL size_t regerror(int, const regex_t *, char *, size_t); PCREPOSIX_EXP_DECL void regfree(regex_t *); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* End of pcreposix.h */ PK!m__ext/pcre/pcrelib/ucp.hnu[/************************************************* * Unicode Property Table handler * *************************************************/ #ifndef _UCP_H #define _UCP_H /* This file contains definitions of the property values that are returned by the UCD access macros. New values that are added for new releases of Unicode should always be at the end of each enum, for backwards compatibility. IMPORTANT: Note also that the specific numeric values of the enums have to be the same as the values that are generated by the maint/MultiStage2.py script, where the equivalent property descriptive names are listed in vectors. ALSO: The specific values of the first two enums are assumed for the table called catposstab in pcre_compile.c. */ /* These are the general character categories. */ enum { ucp_C, /* Other */ ucp_L, /* Letter */ ucp_M, /* Mark */ ucp_N, /* Number */ ucp_P, /* Punctuation */ ucp_S, /* Symbol */ ucp_Z /* Separator */ }; /* These are the particular character categories. */ enum { ucp_Cc, /* Control */ ucp_Cf, /* Format */ ucp_Cn, /* Unassigned */ ucp_Co, /* Private use */ ucp_Cs, /* Surrogate */ ucp_Ll, /* Lower case letter */ ucp_Lm, /* Modifier letter */ ucp_Lo, /* Other letter */ ucp_Lt, /* Title case letter */ ucp_Lu, /* Upper case letter */ ucp_Mc, /* Spacing mark */ ucp_Me, /* Enclosing mark */ ucp_Mn, /* Non-spacing mark */ ucp_Nd, /* Decimal number */ ucp_Nl, /* Letter number */ ucp_No, /* Other number */ ucp_Pc, /* Connector punctuation */ ucp_Pd, /* Dash punctuation */ ucp_Pe, /* Close punctuation */ ucp_Pf, /* Final punctuation */ ucp_Pi, /* Initial punctuation */ ucp_Po, /* Other punctuation */ ucp_Ps, /* Open punctuation */ ucp_Sc, /* Currency symbol */ ucp_Sk, /* Modifier symbol */ ucp_Sm, /* Mathematical symbol */ ucp_So, /* Other symbol */ ucp_Zl, /* Line separator */ ucp_Zp, /* Paragraph separator */ ucp_Zs /* Space separator */ }; /* These are grapheme break properties. Note that the code for processing them assumes that the values are less than 16. If more values are added that take the number to 16 or more, the code will have to be rewritten. */ enum { ucp_gbCR, /* 0 */ ucp_gbLF, /* 1 */ ucp_gbControl, /* 2 */ ucp_gbExtend, /* 3 */ ucp_gbPrepend, /* 4 */ ucp_gbSpacingMark, /* 5 */ ucp_gbL, /* 6 Hangul syllable type L */ ucp_gbV, /* 7 Hangul syllable type V */ ucp_gbT, /* 8 Hangul syllable type T */ ucp_gbLV, /* 9 Hangul syllable type LV */ ucp_gbLVT, /* 10 Hangul syllable type LVT */ ucp_gbRegionalIndicator, /* 11 */ ucp_gbOther /* 12 */ }; /* These are the script identifications. */ enum { ucp_Arabic, ucp_Armenian, ucp_Bengali, ucp_Bopomofo, ucp_Braille, ucp_Buginese, ucp_Buhid, ucp_Canadian_Aboriginal, ucp_Cherokee, ucp_Common, ucp_Coptic, ucp_Cypriot, ucp_Cyrillic, ucp_Deseret, ucp_Devanagari, ucp_Ethiopic, ucp_Georgian, ucp_Glagolitic, ucp_Gothic, ucp_Greek, ucp_Gujarati, ucp_Gurmukhi, ucp_Han, ucp_Hangul, ucp_Hanunoo, ucp_Hebrew, ucp_Hiragana, ucp_Inherited, ucp_Kannada, ucp_Katakana, ucp_Kharoshthi, ucp_Khmer, ucp_Lao, ucp_Latin, ucp_Limbu, ucp_Linear_B, ucp_Malayalam, ucp_Mongolian, ucp_Myanmar, ucp_New_Tai_Lue, ucp_Ogham, ucp_Old_Italic, ucp_Old_Persian, ucp_Oriya, ucp_Osmanya, ucp_Runic, ucp_Shavian, ucp_Sinhala, ucp_Syloti_Nagri, ucp_Syriac, ucp_Tagalog, ucp_Tagbanwa, ucp_Tai_Le, ucp_Tamil, ucp_Telugu, ucp_Thaana, ucp_Thai, ucp_Tibetan, ucp_Tifinagh, ucp_Ugaritic, ucp_Yi, /* New for Unicode 5.0: */ ucp_Balinese, ucp_Cuneiform, ucp_Nko, ucp_Phags_Pa, ucp_Phoenician, /* New for Unicode 5.1: */ ucp_Carian, ucp_Cham, ucp_Kayah_Li, ucp_Lepcha, ucp_Lycian, ucp_Lydian, ucp_Ol_Chiki, ucp_Rejang, ucp_Saurashtra, ucp_Sundanese, ucp_Vai, /* New for Unicode 5.2: */ ucp_Avestan, ucp_Bamum, ucp_Egyptian_Hieroglyphs, ucp_Imperial_Aramaic, ucp_Inscriptional_Pahlavi, ucp_Inscriptional_Parthian, ucp_Javanese, ucp_Kaithi, ucp_Lisu, ucp_Meetei_Mayek, ucp_Old_South_Arabian, ucp_Old_Turkic, ucp_Samaritan, ucp_Tai_Tham, ucp_Tai_Viet, /* New for Unicode 6.0.0: */ ucp_Batak, ucp_Brahmi, ucp_Mandaic, /* New for Unicode 6.1.0: */ ucp_Chakma, ucp_Meroitic_Cursive, ucp_Meroitic_Hieroglyphs, ucp_Miao, ucp_Sharada, ucp_Sora_Sompeng, ucp_Takri, /* New for Unicode 7.0.0: */ ucp_Bassa_Vah, ucp_Caucasian_Albanian, ucp_Duployan, ucp_Elbasan, ucp_Grantha, ucp_Khojki, ucp_Khudawadi, ucp_Linear_A, ucp_Mahajani, ucp_Manichaean, ucp_Mende_Kikakui, ucp_Modi, ucp_Mro, ucp_Nabataean, ucp_Old_North_Arabian, ucp_Old_Permic, ucp_Pahawh_Hmong, ucp_Palmyrene, ucp_Psalter_Pahlavi, ucp_Pau_Cin_Hau, ucp_Siddham, ucp_Tirhuta, ucp_Warang_Citi }; #endif /* End of ucp.h */ PK!粍==ext/pcre/pcrelib/config.hnu[ #include #ifdef PHP_WIN32 # include #else # include #endif #undef PACKAGE_NAME #undef PACKAGE_VERSION #undef PACKAGE_TARNAME #undef PACKAGE_STRING #define SUPPORT_UCP #define SUPPORT_UTF8 #if defined(__GNUC__) && __GNUC__ >= 4 # ifdef __cplusplus # define PCRE_EXP_DECL extern "C" __attribute__ ((visibility("default"))) # else # define PCRE_EXP_DECL extern __attribute__ ((visibility("default"))) # endif # define PCRE_EXP_DEFN __attribute__ ((visibility("default"))) # define PCRE_EXP_DATA_DEFN __attribute__ ((visibility("default"))) #endif /* Exclude these below definitions when building within PHP */ #ifndef ZEND_API /* config.h. Generated from config.h.in by configure. */ /* config.h.in. Generated from configure.ac by autoheader. */ /* PCRE is written in Standard C, but there are a few non-standard things it can cope with, allowing it to run on SunOS4 and other "close to standard" systems. In environments that support the facilities, config.h.in is converted by "configure", or config-cmake.h.in is converted by CMake, into config.h. If you are going to build PCRE "by hand" without using "configure" or CMake, you should copy the distributed config.h.generic to config.h, and then edit the macro definitions to be the way you need them. You must then add -DHAVE_CONFIG_H to all of your compile commands, so that config.h is included at the start of every source. Alternatively, you can avoid editing by using -D on the compiler command line to set the macro values. In this case, you do not have to set -DHAVE_CONFIG_H. PCRE uses memmove() if HAVE_MEMMOVE is set to 1; otherwise it uses bcopy() if HAVE_BCOPY is set to 1. If your system has neither bcopy() nor memmove(), set them both to 0; an emulation function will be used. */ /* By default, the \R escape sequence matches any Unicode line ending character or sequence of characters. If BSR_ANYCRLF is defined (to any value), this is changed so that backslash-R matches only CR, LF, or CRLF. The build-time default can be overridden by the user of PCRE at runtime. */ #undef BSR_ANYCRLF /* If you are compiling for a system that uses EBCDIC instead of ASCII character codes, define this macro to any value. You must also edit the NEWLINE macro below to set a suitable EBCDIC newline, commonly 21 (0x15). On systems that can use "configure" or CMake to set EBCDIC, NEWLINE is automatically adjusted. When EBCDIC is set, PCRE assumes that all input strings are in EBCDIC. If you do not define this macro, PCRE will assume input strings are ASCII or UTF-8/16/32 Unicode. It is not possible to build a version of PCRE that supports both EBCDIC and UTF-8/16/32. */ #undef EBCDIC /* In an EBCDIC environment, define this macro to any value to arrange for the NL character to be 0x25 instead of the default 0x15. NL plays the role that LF does in an ASCII/Unicode environment. The value must also be set in the NEWLINE macro below. On systems that can use "configure" or CMake to set EBCDIC_NL25, the adjustment of NEWLINE is automatic. */ #undef EBCDIC_NL25 /* Define to 1 if you have the `bcopy' function. */ #ifndef HAVE_BCOPY #define HAVE_BCOPY 1 #endif /* Define to 1 if you have the header file. */ /* #undef HAVE_BITS_TYPE_TRAITS_H */ /* Define to 1 if you have the header file. */ #ifndef HAVE_BZLIB_H #define HAVE_BZLIB_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_DIRENT_H #define HAVE_DIRENT_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_DLFCN_H #define HAVE_DLFCN_H 1 #endif /* Define to 1 if you have the header file. */ /*#undef HAVE_EDITLINE_READLINE_H*/ /* Define to 1 if you have the header file. */ /* #undef HAVE_EDIT_READLINE_READLINE_H */ /* Define to 1 if you have the header file. */ #ifndef HAVE_INTTYPES_H #define HAVE_INTTYPES_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_LIMITS_H #define HAVE_LIMITS_H 1 #endif /* Define to 1 if the system has the type `long long'. */ #ifndef HAVE_LONG_LONG #define HAVE_LONG_LONG 1 #endif /* Define to 1 if you have the `memmove' function. */ #ifndef HAVE_MEMMOVE #define HAVE_MEMMOVE 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_MEMORY_H #define HAVE_MEMORY_H 1 #endif /* Define if you have POSIX threads libraries and header files. */ #undef HAVE_PTHREAD /* Have PTHREAD_PRIO_INHERIT. */ #undef HAVE_PTHREAD_PRIO_INHERIT /* Define to 1 if you have the header file. */ #ifndef HAVE_READLINE_HISTORY_H #define HAVE_READLINE_HISTORY_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_READLINE_READLINE_H #define HAVE_READLINE_READLINE_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_STDINT_H #define HAVE_STDINT_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_STDLIB_H #define HAVE_STDLIB_H 1 #endif /* Define to 1 if you have the `strerror' function. */ #ifndef HAVE_STRERROR #define HAVE_STRERROR 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_STRING #define HAVE_STRING 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_STRINGS_H #define HAVE_STRINGS_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_STRING_H #define HAVE_STRING_H 1 #endif /* Define to 1 if you have `strtoimax'. */ /* #undef HAVE_STRTOIMAX */ /* Define to 1 if you have `strtoll'. */ /* #undef HAVE_STRTOLL */ /* Define to 1 if you have `strtoq'. */ #ifndef HAVE_STRTOQ #define HAVE_STRTOQ 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_SYS_STAT_H #define HAVE_SYS_STAT_H 1 #endif /* Define to 1 if you have the header file. */ #ifndef HAVE_SYS_TYPES_H #define HAVE_SYS_TYPES_H 1 #endif /* Define to 1 if you have the header file. */ /* #undef HAVE_TYPE_TRAITS_H */ /* Define to 1 if you have the header file. */ #ifndef HAVE_UNISTD_H #define HAVE_UNISTD_H 1 #endif /* Define to 1 if the system has the type `unsigned long long'. */ #ifndef HAVE_UNSIGNED_LONG_LONG #define HAVE_UNSIGNED_LONG_LONG 1 #endif /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ /* #undef HAVE_VISIBILITY */ /* Define to 1 if you have the header file. */ /* #undef HAVE_WINDOWS_H */ /* Define to 1 if you have the header file. */ #ifndef HAVE_ZLIB_H #define HAVE_ZLIB_H 1 #endif /* Define to 1 if you have `_strtoi64'. */ /* #undef HAVE__STRTOI64 */ /* Exclude these above definitions when building within PHP */ #endif /* The value of LINK_SIZE determines the number of bytes used to store links as offsets within the compiled regex. The default is 2, which allows for compiled patterns up to 64K long. This covers the vast majority of cases. However, PCRE can also be compiled to use 3 or 4 bytes instead. This allows for longer patterns in extreme cases. On systems that support it, "configure" can be used to override this default. */ #ifndef LINK_SIZE #define LINK_SIZE 2 #endif /* Define to the sub-directory where libtool stores uninstalled libraries. */ /* This is ignored unless you are using libtool. */ #ifndef LT_OBJDIR #define LT_OBJDIR ".libs/" #endif /* The value of MATCH_LIMIT determines the default number of times the internal match() function can be called during a single execution of pcre_exec(). There is a runtime interface for setting a different limit. The limit exists in order to catch runaway regular expressions that take for ever to determine that they do not match. The default is set very large so that it does not accidentally catch legitimate cases. On systems that support it, "configure" can be used to override this default default. */ #ifndef MATCH_LIMIT #define MATCH_LIMIT 10000000 #endif /* The above limit applies to all calls of match(), whether or not they increase the recursion depth. In some environments it is desirable to limit the depth of recursive calls of match() more strictly, in order to restrict the maximum amount of stack (or heap, if NO_RECURSE is defined) that is used. The value of MATCH_LIMIT_RECURSION applies only to recursive calls of match(). To have any useful effect, it must be less than the value of MATCH_LIMIT. The default is to use the same value as MATCH_LIMIT. There is a runtime method for setting a different limit. On systems that support it, "configure" can be used to override the default. */ #ifndef MATCH_LIMIT_RECURSION #define MATCH_LIMIT_RECURSION MATCH_LIMIT #endif /* This limit is parameterized just in case anybody ever wants to change it. Care must be taken if it is increased, because it guards against integer overflow caused by enormously large patterns. */ #ifndef MAX_NAME_COUNT #define MAX_NAME_COUNT 10000 #endif /* This limit is parameterized just in case anybody ever wants to change it. Care must be taken if it is increased, because it guards against integer overflow caused by enormously large patterns. */ #ifndef MAX_NAME_SIZE #define MAX_NAME_SIZE 32 #endif /* The value of NEWLINE determines the default newline character sequence. PCRE client programs can override this by selecting other values at run time. In ASCII environments, the value can be 10 (LF), 13 (CR), or 3338 (CRLF); in EBCDIC environments the value can be 21 or 37 (LF), 13 (CR), or 3349 or 3365 (CRLF) because there are two alternative codepoints (0x15 and 0x25) that are used as the NL line terminator that is equivalent to ASCII LF. In both ASCII and EBCDIC environments the value can also be -1 (ANY), or -2 (ANYCRLF). */ #ifndef NEWLINE #define NEWLINE 10 #endif /* Define to 1 if your C compiler doesn't accept -c and -o together. */ /* #undef NO_MINUS_C_MINUS_O */ /* PCRE uses recursive function calls to handle backtracking while matching. This can sometimes be a problem on systems that have stacks of limited size. Define NO_RECURSE to any value to get a version that doesn't use recursion in the match() function; instead it creates its own stack by steam using pcre_recurse_malloc() to obtain memory from the heap. For more detail, see the comments and other stuff just above the match() function. */ /* #undef NO_RECURSE */ #define PARENS_NEST_LIMIT 250 /* Name of package */ #define PACKAGE "pcre" /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "PCRE" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "PCRE 8.41" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "pcre" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "8.41" /* to make a symbol visible */ /* #undef PCRECPP_EXP_DECL */ /* to make a symbol visible */ /* #undef PCRECPP_EXP_DEFN */ /* The value of PARENS_NEST_LIMIT specifies the maximum depth of nested parentheses (of any kind) in a pattern. This limits the amount of system stack that is used while compiling a pattern. */ #ifndef PARENS_NEST_LIMIT #define PARENS_NEST_LIMIT 250 #endif /* The value of PCREGREP_BUFSIZE determines the size of buffer used by pcregrep to hold parts of the file it is searching. This is also the minimum value. The actual amount of memory used by pcregrep is three times this number, because it allows for the buffering of "before" and "after" lines. */ /* #undef PCREGREP_BUFSIZE */ /* to make a symbol visible */ /* #undef PCREPOSIX_EXP_DECL */ /* to make a symbol visible */ /* #undef PCREPOSIX_EXP_DEFN */ /* to make a symbol visible */ /* #undef PCRE_EXP_DATA_DEFN */ /* to make a symbol visible */ /* #undef PCRE_EXP_DECL */ /* If you are compiling for a system other than a Unix-like system or Win32, and it needs some magic to be inserted before the definition of a function that is exported by the library, define this macro to contain the relevant magic. If you do not define this macro, a suitable __declspec value is used for Windows systems; in other environments "extern" is used for a C compiler and "extern C" for a C++ compiler. This macro apears at the start of every exported function that is part of the external API. It does not appear on functions that are "external" in the C sense, but which are internal to the library. */ /* #undef PCRE_EXP_DEFN */ /* Define to any value if linking statically (TODO: make nice with Libtool) */ /* #undef PCRE_STATIC */ /* When calling PCRE via the POSIX interface, additional working storage is required for holding the pointers to capturing substrings because PCRE requires three integers per substring, whereas the POSIX interface provides only two. If the number of expected substrings is small, the wrapper function uses space on the stack, because this is faster than using malloc() for each call. The threshold above which the stack is no longer used is defined by POSIX_MALLOC_THRESHOLD. */ #ifndef POSIX_MALLOC_THRESHOLD #define POSIX_MALLOC_THRESHOLD 10 #endif /* Define to necessary symbol if this constant uses a non-standard name on your system. */ /* #undef PTHREAD_CREATE_JOINABLE */ /* Define to 1 if you have the ANSI C header files. */ #ifndef STDC_HEADERS #define STDC_HEADERS 1 #endif /* Define to allow pcretest and pcregrep to be linked with gcov, so that they are able to generate code coverage reports. */ #undef SUPPORT_GCOV /* Define to any value to enable support for Just-In-Time compiling. */ #if HAVE_PCRE_JIT_SUPPORT #define SUPPORT_JIT #endif /* Define to any value to allow pcregrep to be linked with libbz2, so that it is able to handle .bz2 files. */ /* #undef SUPPORT_LIBBZ2 */ /* Define to any value to allow pcretest to be linked with libedit. */ #undef SUPPORT_LIBEDIT /* Define to any value to allow pcretest to be linked with libreadline. */ /* #undef SUPPORT_LIBREADLINE */ /* Define to any value to allow pcregrep to be linked with libz, so that it is able to handle .gz files. */ /* #undef SUPPORT_LIBZ */ /* Define to any value to enable the 16 bit PCRE library. */ /* #undef SUPPORT_PCRE16 */ /* Define to any value to enable the 32 bit PCRE library. */ /* #undef SUPPORT_PCRE32 */ /* Define to any value to enable the 8 bit PCRE library. */ /* #undef SUPPORT_PCRE8 */ /* Define to any value to enable JIT support in pcregrep. */ /* #undef SUPPORT_PCREGREP_JIT */ /* Define to enable support for Unicode properties */ /* #undef SUPPORT_UCP */ /* Define to any value to enable support for the UTF-8/16/32 Unicode encoding. This will work even in an EBCDIC environment, but it is incompatible with the EBCDIC macro. That is, PCRE can support *either* EBCDIC code *or* ASCII/UTF-8/16/32, but not both at once. */ /* #undef SUPPORT_UTF8 */ /* Valgrind support to find invalid memory reads. */ #if HAVE_PCRE_VALGRIND_SUPPORT #define SUPPORT_VALGRIND 1 #endif /* Version number of package */ #ifndef VERSION #define VERSION "8.41" #endif /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to the type of a signed integer type of width exactly 64 bits if such a type exists and the standard includes do not define it. */ /* #undef int64_t */ /* Define to `unsigned int' if does not define. */ /* #undef size_t */ PK!Σ&s{{ext/pcre/pcrelib/pcre.hnu[/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* This is the public header file for the PCRE library, to be #included by applications that call the PCRE functions. Copyright (c) 1997-2014 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ #ifndef _PCRE_H #define _PCRE_H /* The current PCRE version information. */ #define PCRE_MAJOR 8 #define PCRE_MINOR 41 #define PCRE_PRERELEASE #define PCRE_DATE 2017-07-05 /* When an application links to a PCRE DLL in Windows, the symbols that are imported have to be identified as such. When building PCRE, the appropriate export setting is defined in pcre_internal.h, which includes this file. So we don't change existing definitions of PCRE_EXP_DECL and PCRECPP_EXP_DECL. */ #if defined(_WIN32) && !defined(PCRE_STATIC) # ifndef PCRE_EXP_DECL # define PCRE_EXP_DECL extern __declspec(dllimport) # endif # ifdef __cplusplus # ifndef PCRECPP_EXP_DECL # define PCRECPP_EXP_DECL extern __declspec(dllimport) # endif # ifndef PCRECPP_EXP_DEFN # define PCRECPP_EXP_DEFN __declspec(dllimport) # endif # endif #endif /* By default, we use the standard "extern" declarations. */ #ifndef PCRE_EXP_DECL # ifdef __cplusplus # define PCRE_EXP_DECL extern "C" # else # define PCRE_EXP_DECL extern # endif #endif #ifdef __cplusplus # ifndef PCRECPP_EXP_DECL # define PCRECPP_EXP_DECL extern # endif # ifndef PCRECPP_EXP_DEFN # define PCRECPP_EXP_DEFN # endif #endif /* Have to include stdlib.h in order to ensure that size_t is defined; it is needed here for malloc. */ #include /* Allow for C++ users */ #ifdef __cplusplus extern "C" { #endif /* Public options. Some are compile-time only, some are run-time only, and some are both. Most of the compile-time options are saved with the compiled regex so that they can be inspected during studying (and therefore JIT compiling). Note that pcre_study() has its own set of options. Originally, all the options defined here used distinct bits. However, almost all the bits in a 32-bit word are now used, so in order to conserve them, option bits that were previously only recognized at matching time (i.e. by pcre_exec() or pcre_dfa_exec()) may also be used for compile-time options that affect only compiling and are not relevant for studying or JIT compiling. Some options for pcre_compile() change its behaviour but do not affect the behaviour of the execution functions. Other options are passed through to the execution functions and affect their behaviour, with or without affecting the behaviour of pcre_compile(). Options that can be passed to pcre_compile() are tagged Cx below, with these variants: C1 Affects compile only C2 Does not affect compile; affects exec, dfa_exec C3 Affects compile, exec, dfa_exec C4 Affects compile, exec, dfa_exec, study C5 Affects compile, exec, study Options that can be set for pcre_exec() and/or pcre_dfa_exec() are flagged with E and D, respectively. They take precedence over C3, C4, and C5 settings passed from pcre_compile(). Those that are compatible with JIT execution are flagged with J. */ #define PCRE_CASELESS 0x00000001 /* C1 */ #define PCRE_MULTILINE 0x00000002 /* C1 */ #define PCRE_DOTALL 0x00000004 /* C1 */ #define PCRE_EXTENDED 0x00000008 /* C1 */ #define PCRE_ANCHORED 0x00000010 /* C4 E D */ #define PCRE_DOLLAR_ENDONLY 0x00000020 /* C2 */ #define PCRE_EXTRA 0x00000040 /* C1 */ #define PCRE_NOTBOL 0x00000080 /* E D J */ #define PCRE_NOTEOL 0x00000100 /* E D J */ #define PCRE_UNGREEDY 0x00000200 /* C1 */ #define PCRE_NOTEMPTY 0x00000400 /* E D J */ #define PCRE_UTF8 0x00000800 /* C4 ) */ #define PCRE_UTF16 0x00000800 /* C4 ) Synonyms */ #define PCRE_UTF32 0x00000800 /* C4 ) */ #define PCRE_NO_AUTO_CAPTURE 0x00001000 /* C1 */ #define PCRE_NO_UTF8_CHECK 0x00002000 /* C1 E D J ) */ #define PCRE_NO_UTF16_CHECK 0x00002000 /* C1 E D J ) Synonyms */ #define PCRE_NO_UTF32_CHECK 0x00002000 /* C1 E D J ) */ #define PCRE_AUTO_CALLOUT 0x00004000 /* C1 */ #define PCRE_PARTIAL_SOFT 0x00008000 /* E D J ) Synonyms */ #define PCRE_PARTIAL 0x00008000 /* E D J ) */ /* This pair use the same bit. */ #define PCRE_NEVER_UTF 0x00010000 /* C1 ) Overlaid */ #define PCRE_DFA_SHORTEST 0x00010000 /* D ) Overlaid */ /* This pair use the same bit. */ #define PCRE_NO_AUTO_POSSESS 0x00020000 /* C1 ) Overlaid */ #define PCRE_DFA_RESTART 0x00020000 /* D ) Overlaid */ #define PCRE_FIRSTLINE 0x00040000 /* C3 */ #define PCRE_DUPNAMES 0x00080000 /* C1 */ #define PCRE_NEWLINE_CR 0x00100000 /* C3 E D */ #define PCRE_NEWLINE_LF 0x00200000 /* C3 E D */ #define PCRE_NEWLINE_CRLF 0x00300000 /* C3 E D */ #define PCRE_NEWLINE_ANY 0x00400000 /* C3 E D */ #define PCRE_NEWLINE_ANYCRLF 0x00500000 /* C3 E D */ #define PCRE_BSR_ANYCRLF 0x00800000 /* C3 E D */ #define PCRE_BSR_UNICODE 0x01000000 /* C3 E D */ #define PCRE_JAVASCRIPT_COMPAT 0x02000000 /* C5 */ #define PCRE_NO_START_OPTIMIZE 0x04000000 /* C2 E D ) Synonyms */ #define PCRE_NO_START_OPTIMISE 0x04000000 /* C2 E D ) */ #define PCRE_PARTIAL_HARD 0x08000000 /* E D J */ #define PCRE_NOTEMPTY_ATSTART 0x10000000 /* E D J */ #define PCRE_UCP 0x20000000 /* C3 */ /* Exec-time and get/set-time error codes */ #define PCRE_ERROR_NOMATCH (-1) #define PCRE_ERROR_NULL (-2) #define PCRE_ERROR_BADOPTION (-3) #define PCRE_ERROR_BADMAGIC (-4) #define PCRE_ERROR_UNKNOWN_OPCODE (-5) #define PCRE_ERROR_UNKNOWN_NODE (-5) /* For backward compatibility */ #define PCRE_ERROR_NOMEMORY (-6) #define PCRE_ERROR_NOSUBSTRING (-7) #define PCRE_ERROR_MATCHLIMIT (-8) #define PCRE_ERROR_CALLOUT (-9) /* Never used by PCRE itself */ #define PCRE_ERROR_BADUTF8 (-10) /* Same for 8/16/32 */ #define PCRE_ERROR_BADUTF16 (-10) /* Same for 8/16/32 */ #define PCRE_ERROR_BADUTF32 (-10) /* Same for 8/16/32 */ #define PCRE_ERROR_BADUTF8_OFFSET (-11) /* Same for 8/16 */ #define PCRE_ERROR_BADUTF16_OFFSET (-11) /* Same for 8/16 */ #define PCRE_ERROR_PARTIAL (-12) #define PCRE_ERROR_BADPARTIAL (-13) #define PCRE_ERROR_INTERNAL (-14) #define PCRE_ERROR_BADCOUNT (-15) #define PCRE_ERROR_DFA_UITEM (-16) #define PCRE_ERROR_DFA_UCOND (-17) #define PCRE_ERROR_DFA_UMLIMIT (-18) #define PCRE_ERROR_DFA_WSSIZE (-19) #define PCRE_ERROR_DFA_RECURSE (-20) #define PCRE_ERROR_RECURSIONLIMIT (-21) #define PCRE_ERROR_NULLWSLIMIT (-22) /* No longer actually used */ #define PCRE_ERROR_BADNEWLINE (-23) #define PCRE_ERROR_BADOFFSET (-24) #define PCRE_ERROR_SHORTUTF8 (-25) #define PCRE_ERROR_SHORTUTF16 (-25) /* Same for 8/16 */ #define PCRE_ERROR_RECURSELOOP (-26) #define PCRE_ERROR_JIT_STACKLIMIT (-27) #define PCRE_ERROR_BADMODE (-28) #define PCRE_ERROR_BADENDIANNESS (-29) #define PCRE_ERROR_DFA_BADRESTART (-30) #define PCRE_ERROR_JIT_BADOPTION (-31) #define PCRE_ERROR_BADLENGTH (-32) #define PCRE_ERROR_UNSET (-33) /* Specific error codes for UTF-8 validity checks */ #define PCRE_UTF8_ERR0 0 #define PCRE_UTF8_ERR1 1 #define PCRE_UTF8_ERR2 2 #define PCRE_UTF8_ERR3 3 #define PCRE_UTF8_ERR4 4 #define PCRE_UTF8_ERR5 5 #define PCRE_UTF8_ERR6 6 #define PCRE_UTF8_ERR7 7 #define PCRE_UTF8_ERR8 8 #define PCRE_UTF8_ERR9 9 #define PCRE_UTF8_ERR10 10 #define PCRE_UTF8_ERR11 11 #define PCRE_UTF8_ERR12 12 #define PCRE_UTF8_ERR13 13 #define PCRE_UTF8_ERR14 14 #define PCRE_UTF8_ERR15 15 #define PCRE_UTF8_ERR16 16 #define PCRE_UTF8_ERR17 17 #define PCRE_UTF8_ERR18 18 #define PCRE_UTF8_ERR19 19 #define PCRE_UTF8_ERR20 20 #define PCRE_UTF8_ERR21 21 #define PCRE_UTF8_ERR22 22 /* Unused (was non-character) */ /* Specific error codes for UTF-16 validity checks */ #define PCRE_UTF16_ERR0 0 #define PCRE_UTF16_ERR1 1 #define PCRE_UTF16_ERR2 2 #define PCRE_UTF16_ERR3 3 #define PCRE_UTF16_ERR4 4 /* Unused (was non-character) */ /* Specific error codes for UTF-32 validity checks */ #define PCRE_UTF32_ERR0 0 #define PCRE_UTF32_ERR1 1 #define PCRE_UTF32_ERR2 2 /* Unused (was non-character) */ #define PCRE_UTF32_ERR3 3 /* Request types for pcre_fullinfo() */ #define PCRE_INFO_OPTIONS 0 #define PCRE_INFO_SIZE 1 #define PCRE_INFO_CAPTURECOUNT 2 #define PCRE_INFO_BACKREFMAX 3 #define PCRE_INFO_FIRSTBYTE 4 #define PCRE_INFO_FIRSTCHAR 4 /* For backwards compatibility */ #define PCRE_INFO_FIRSTTABLE 5 #define PCRE_INFO_LASTLITERAL 6 #define PCRE_INFO_NAMEENTRYSIZE 7 #define PCRE_INFO_NAMECOUNT 8 #define PCRE_INFO_NAMETABLE 9 #define PCRE_INFO_STUDYSIZE 10 #define PCRE_INFO_DEFAULT_TABLES 11 #define PCRE_INFO_OKPARTIAL 12 #define PCRE_INFO_JCHANGED 13 #define PCRE_INFO_HASCRORLF 14 #define PCRE_INFO_MINLENGTH 15 #define PCRE_INFO_JIT 16 #define PCRE_INFO_JITSIZE 17 #define PCRE_INFO_MAXLOOKBEHIND 18 #define PCRE_INFO_FIRSTCHARACTER 19 #define PCRE_INFO_FIRSTCHARACTERFLAGS 20 #define PCRE_INFO_REQUIREDCHAR 21 #define PCRE_INFO_REQUIREDCHARFLAGS 22 #define PCRE_INFO_MATCHLIMIT 23 #define PCRE_INFO_RECURSIONLIMIT 24 #define PCRE_INFO_MATCH_EMPTY 25 /* Request types for pcre_config(). Do not re-arrange, in order to remain compatible. */ #define PCRE_CONFIG_UTF8 0 #define PCRE_CONFIG_NEWLINE 1 #define PCRE_CONFIG_LINK_SIZE 2 #define PCRE_CONFIG_POSIX_MALLOC_THRESHOLD 3 #define PCRE_CONFIG_MATCH_LIMIT 4 #define PCRE_CONFIG_STACKRECURSE 5 #define PCRE_CONFIG_UNICODE_PROPERTIES 6 #define PCRE_CONFIG_MATCH_LIMIT_RECURSION 7 #define PCRE_CONFIG_BSR 8 #define PCRE_CONFIG_JIT 9 #define PCRE_CONFIG_UTF16 10 #define PCRE_CONFIG_JITTARGET 11 #define PCRE_CONFIG_UTF32 12 #define PCRE_CONFIG_PARENS_LIMIT 13 /* Request types for pcre_study(). Do not re-arrange, in order to remain compatible. */ #define PCRE_STUDY_JIT_COMPILE 0x0001 #define PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE 0x0002 #define PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE 0x0004 #define PCRE_STUDY_EXTRA_NEEDED 0x0008 /* Bit flags for the pcre[16|32]_extra structure. Do not re-arrange or redefine these bits, just add new ones on the end, in order to remain compatible. */ #define PCRE_EXTRA_STUDY_DATA 0x0001 #define PCRE_EXTRA_MATCH_LIMIT 0x0002 #define PCRE_EXTRA_CALLOUT_DATA 0x0004 #define PCRE_EXTRA_TABLES 0x0008 #define PCRE_EXTRA_MATCH_LIMIT_RECURSION 0x0010 #define PCRE_EXTRA_MARK 0x0020 #define PCRE_EXTRA_EXECUTABLE_JIT 0x0040 /* Types */ struct real_pcre; /* declaration; the definition is private */ typedef struct real_pcre pcre; struct real_pcre16; /* declaration; the definition is private */ typedef struct real_pcre16 pcre16; struct real_pcre32; /* declaration; the definition is private */ typedef struct real_pcre32 pcre32; struct real_pcre_jit_stack; /* declaration; the definition is private */ typedef struct real_pcre_jit_stack pcre_jit_stack; struct real_pcre16_jit_stack; /* declaration; the definition is private */ typedef struct real_pcre16_jit_stack pcre16_jit_stack; struct real_pcre32_jit_stack; /* declaration; the definition is private */ typedef struct real_pcre32_jit_stack pcre32_jit_stack; /* If PCRE is compiled with 16 bit character support, PCRE_UCHAR16 must contain a 16 bit wide signed data type. Otherwise it can be a dummy data type since pcre16 functions are not implemented. There is a check for this in pcre_internal.h. */ #ifndef PCRE_UCHAR16 #define PCRE_UCHAR16 unsigned short #endif #ifndef PCRE_SPTR16 #define PCRE_SPTR16 const PCRE_UCHAR16 * #endif /* If PCRE is compiled with 32 bit character support, PCRE_UCHAR32 must contain a 32 bit wide signed data type. Otherwise it can be a dummy data type since pcre32 functions are not implemented. There is a check for this in pcre_internal.h. */ #ifndef PCRE_UCHAR32 #define PCRE_UCHAR32 unsigned int #endif #ifndef PCRE_SPTR32 #define PCRE_SPTR32 const PCRE_UCHAR32 * #endif /* When PCRE is compiled as a C++ library, the subject pointer type can be replaced with a custom type. For conventional use, the public interface is a const char *. */ #ifndef PCRE_SPTR #define PCRE_SPTR const char * #endif /* The structure for passing additional data to pcre_exec(). This is defined in such as way as to be extensible. Always add new fields at the end, in order to remain compatible. */ typedef struct pcre_extra { unsigned long int flags; /* Bits for which fields are set */ void *study_data; /* Opaque data from pcre_study() */ unsigned long int match_limit; /* Maximum number of calls to match() */ void *callout_data; /* Data passed back in callouts */ const unsigned char *tables; /* Pointer to character tables */ unsigned long int match_limit_recursion; /* Max recursive calls to match() */ unsigned char **mark; /* For passing back a mark pointer */ void *executable_jit; /* Contains a pointer to a compiled jit code */ } pcre_extra; /* Same structure as above, but with 16 bit char pointers. */ typedef struct pcre16_extra { unsigned long int flags; /* Bits for which fields are set */ void *study_data; /* Opaque data from pcre_study() */ unsigned long int match_limit; /* Maximum number of calls to match() */ void *callout_data; /* Data passed back in callouts */ const unsigned char *tables; /* Pointer to character tables */ unsigned long int match_limit_recursion; /* Max recursive calls to match() */ PCRE_UCHAR16 **mark; /* For passing back a mark pointer */ void *executable_jit; /* Contains a pointer to a compiled jit code */ } pcre16_extra; /* Same structure as above, but with 32 bit char pointers. */ typedef struct pcre32_extra { unsigned long int flags; /* Bits for which fields are set */ void *study_data; /* Opaque data from pcre_study() */ unsigned long int match_limit; /* Maximum number of calls to match() */ void *callout_data; /* Data passed back in callouts */ const unsigned char *tables; /* Pointer to character tables */ unsigned long int match_limit_recursion; /* Max recursive calls to match() */ PCRE_UCHAR32 **mark; /* For passing back a mark pointer */ void *executable_jit; /* Contains a pointer to a compiled jit code */ } pcre32_extra; /* The structure for passing out data via the pcre_callout_function. We use a structure so that new fields can be added on the end in future versions, without changing the API of the function, thereby allowing old clients to work without modification. */ typedef struct pcre_callout_block { int version; /* Identifies version of block */ /* ------------------------ Version 0 ------------------------------- */ int callout_number; /* Number compiled into pattern */ int *offset_vector; /* The offset vector */ PCRE_SPTR subject; /* The subject being matched */ int subject_length; /* The length of the subject */ int start_match; /* Offset to start of this match attempt */ int current_position; /* Where we currently are in the subject */ int capture_top; /* Max current capture */ int capture_last; /* Most recently closed capture */ void *callout_data; /* Data passed in with the call */ /* ------------------- Added for Version 1 -------------------------- */ int pattern_position; /* Offset to next item in the pattern */ int next_item_length; /* Length of next item in the pattern */ /* ------------------- Added for Version 2 -------------------------- */ const unsigned char *mark; /* Pointer to current mark or NULL */ /* ------------------------------------------------------------------ */ } pcre_callout_block; /* Same structure as above, but with 16 bit char pointers. */ typedef struct pcre16_callout_block { int version; /* Identifies version of block */ /* ------------------------ Version 0 ------------------------------- */ int callout_number; /* Number compiled into pattern */ int *offset_vector; /* The offset vector */ PCRE_SPTR16 subject; /* The subject being matched */ int subject_length; /* The length of the subject */ int start_match; /* Offset to start of this match attempt */ int current_position; /* Where we currently are in the subject */ int capture_top; /* Max current capture */ int capture_last; /* Most recently closed capture */ void *callout_data; /* Data passed in with the call */ /* ------------------- Added for Version 1 -------------------------- */ int pattern_position; /* Offset to next item in the pattern */ int next_item_length; /* Length of next item in the pattern */ /* ------------------- Added for Version 2 -------------------------- */ const PCRE_UCHAR16 *mark; /* Pointer to current mark or NULL */ /* ------------------------------------------------------------------ */ } pcre16_callout_block; /* Same structure as above, but with 32 bit char pointers. */ typedef struct pcre32_callout_block { int version; /* Identifies version of block */ /* ------------------------ Version 0 ------------------------------- */ int callout_number; /* Number compiled into pattern */ int *offset_vector; /* The offset vector */ PCRE_SPTR32 subject; /* The subject being matched */ int subject_length; /* The length of the subject */ int start_match; /* Offset to start of this match attempt */ int current_position; /* Where we currently are in the subject */ int capture_top; /* Max current capture */ int capture_last; /* Most recently closed capture */ void *callout_data; /* Data passed in with the call */ /* ------------------- Added for Version 1 -------------------------- */ int pattern_position; /* Offset to next item in the pattern */ int next_item_length; /* Length of next item in the pattern */ /* ------------------- Added for Version 2 -------------------------- */ const PCRE_UCHAR32 *mark; /* Pointer to current mark or NULL */ /* ------------------------------------------------------------------ */ } pcre32_callout_block; /* Indirection for store get and free functions. These can be set to alternative malloc/free functions if required. Special ones are used in the non-recursive case for "frames". There is also an optional callout function that is triggered by the (?) regex item. For Virtual Pascal, these definitions have to take another form. */ #ifndef VPCOMPAT PCRE_EXP_DECL void *(*pcre_malloc)(size_t); PCRE_EXP_DECL void (*pcre_free)(void *); PCRE_EXP_DECL void *(*pcre_stack_malloc)(size_t); PCRE_EXP_DECL void (*pcre_stack_free)(void *); PCRE_EXP_DECL int (*pcre_callout)(pcre_callout_block *); PCRE_EXP_DECL int (*pcre_stack_guard)(void); PCRE_EXP_DECL void *(*pcre16_malloc)(size_t); PCRE_EXP_DECL void (*pcre16_free)(void *); PCRE_EXP_DECL void *(*pcre16_stack_malloc)(size_t); PCRE_EXP_DECL void (*pcre16_stack_free)(void *); PCRE_EXP_DECL int (*pcre16_callout)(pcre16_callout_block *); PCRE_EXP_DECL int (*pcre16_stack_guard)(void); PCRE_EXP_DECL void *(*pcre32_malloc)(size_t); PCRE_EXP_DECL void (*pcre32_free)(void *); PCRE_EXP_DECL void *(*pcre32_stack_malloc)(size_t); PCRE_EXP_DECL void (*pcre32_stack_free)(void *); PCRE_EXP_DECL int (*pcre32_callout)(pcre32_callout_block *); PCRE_EXP_DECL int (*pcre32_stack_guard)(void); #else /* VPCOMPAT */ PCRE_EXP_DECL void *pcre_malloc(size_t); PCRE_EXP_DECL void pcre_free(void *); PCRE_EXP_DECL void *pcre_stack_malloc(size_t); PCRE_EXP_DECL void pcre_stack_free(void *); PCRE_EXP_DECL int pcre_callout(pcre_callout_block *); PCRE_EXP_DECL int pcre_stack_guard(void); PCRE_EXP_DECL void *pcre16_malloc(size_t); PCRE_EXP_DECL void pcre16_free(void *); PCRE_EXP_DECL void *pcre16_stack_malloc(size_t); PCRE_EXP_DECL void pcre16_stack_free(void *); PCRE_EXP_DECL int pcre16_callout(pcre16_callout_block *); PCRE_EXP_DECL int pcre16_stack_guard(void); PCRE_EXP_DECL void *pcre32_malloc(size_t); PCRE_EXP_DECL void pcre32_free(void *); PCRE_EXP_DECL void *pcre32_stack_malloc(size_t); PCRE_EXP_DECL void pcre32_stack_free(void *); PCRE_EXP_DECL int pcre32_callout(pcre32_callout_block *); PCRE_EXP_DECL int pcre32_stack_guard(void); #endif /* VPCOMPAT */ /* User defined callback which provides a stack just before the match starts. */ typedef pcre_jit_stack *(*pcre_jit_callback)(void *); typedef pcre16_jit_stack *(*pcre16_jit_callback)(void *); typedef pcre32_jit_stack *(*pcre32_jit_callback)(void *); /* Exported PCRE functions */ PCRE_EXP_DECL pcre *pcre_compile(const char *, int, const char **, int *, const unsigned char *); PCRE_EXP_DECL pcre16 *pcre16_compile(PCRE_SPTR16, int, const char **, int *, const unsigned char *); PCRE_EXP_DECL pcre32 *pcre32_compile(PCRE_SPTR32, int, const char **, int *, const unsigned char *); PCRE_EXP_DECL pcre *pcre_compile2(const char *, int, int *, const char **, int *, const unsigned char *); PCRE_EXP_DECL pcre16 *pcre16_compile2(PCRE_SPTR16, int, int *, const char **, int *, const unsigned char *); PCRE_EXP_DECL pcre32 *pcre32_compile2(PCRE_SPTR32, int, int *, const char **, int *, const unsigned char *); PCRE_EXP_DECL int pcre_config(int, void *); PCRE_EXP_DECL int pcre16_config(int, void *); PCRE_EXP_DECL int pcre32_config(int, void *); PCRE_EXP_DECL int pcre_copy_named_substring(const pcre *, const char *, int *, int, const char *, char *, int); PCRE_EXP_DECL int pcre16_copy_named_substring(const pcre16 *, PCRE_SPTR16, int *, int, PCRE_SPTR16, PCRE_UCHAR16 *, int); PCRE_EXP_DECL int pcre32_copy_named_substring(const pcre32 *, PCRE_SPTR32, int *, int, PCRE_SPTR32, PCRE_UCHAR32 *, int); PCRE_EXP_DECL int pcre_copy_substring(const char *, int *, int, int, char *, int); PCRE_EXP_DECL int pcre16_copy_substring(PCRE_SPTR16, int *, int, int, PCRE_UCHAR16 *, int); PCRE_EXP_DECL int pcre32_copy_substring(PCRE_SPTR32, int *, int, int, PCRE_UCHAR32 *, int); PCRE_EXP_DECL int pcre_dfa_exec(const pcre *, const pcre_extra *, const char *, int, int, int, int *, int , int *, int); PCRE_EXP_DECL int pcre16_dfa_exec(const pcre16 *, const pcre16_extra *, PCRE_SPTR16, int, int, int, int *, int , int *, int); PCRE_EXP_DECL int pcre32_dfa_exec(const pcre32 *, const pcre32_extra *, PCRE_SPTR32, int, int, int, int *, int , int *, int); PCRE_EXP_DECL int pcre_exec(const pcre *, const pcre_extra *, PCRE_SPTR, int, int, int, int *, int); PCRE_EXP_DECL int pcre16_exec(const pcre16 *, const pcre16_extra *, PCRE_SPTR16, int, int, int, int *, int); PCRE_EXP_DECL int pcre32_exec(const pcre32 *, const pcre32_extra *, PCRE_SPTR32, int, int, int, int *, int); PCRE_EXP_DECL int pcre_jit_exec(const pcre *, const pcre_extra *, PCRE_SPTR, int, int, int, int *, int, pcre_jit_stack *); PCRE_EXP_DECL int pcre16_jit_exec(const pcre16 *, const pcre16_extra *, PCRE_SPTR16, int, int, int, int *, int, pcre16_jit_stack *); PCRE_EXP_DECL int pcre32_jit_exec(const pcre32 *, const pcre32_extra *, PCRE_SPTR32, int, int, int, int *, int, pcre32_jit_stack *); PCRE_EXP_DECL void pcre_free_substring(const char *); PCRE_EXP_DECL void pcre16_free_substring(PCRE_SPTR16); PCRE_EXP_DECL void pcre32_free_substring(PCRE_SPTR32); PCRE_EXP_DECL void pcre_free_substring_list(const char **); PCRE_EXP_DECL void pcre16_free_substring_list(PCRE_SPTR16 *); PCRE_EXP_DECL void pcre32_free_substring_list(PCRE_SPTR32 *); PCRE_EXP_DECL int pcre_fullinfo(const pcre *, const pcre_extra *, int, void *); PCRE_EXP_DECL int pcre16_fullinfo(const pcre16 *, const pcre16_extra *, int, void *); PCRE_EXP_DECL int pcre32_fullinfo(const pcre32 *, const pcre32_extra *, int, void *); PCRE_EXP_DECL int pcre_get_named_substring(const pcre *, const char *, int *, int, const char *, const char **); PCRE_EXP_DECL int pcre16_get_named_substring(const pcre16 *, PCRE_SPTR16, int *, int, PCRE_SPTR16, PCRE_SPTR16 *); PCRE_EXP_DECL int pcre32_get_named_substring(const pcre32 *, PCRE_SPTR32, int *, int, PCRE_SPTR32, PCRE_SPTR32 *); PCRE_EXP_DECL int pcre_get_stringnumber(const pcre *, const char *); PCRE_EXP_DECL int pcre16_get_stringnumber(const pcre16 *, PCRE_SPTR16); PCRE_EXP_DECL int pcre32_get_stringnumber(const pcre32 *, PCRE_SPTR32); PCRE_EXP_DECL int pcre_get_stringtable_entries(const pcre *, const char *, char **, char **); PCRE_EXP_DECL int pcre16_get_stringtable_entries(const pcre16 *, PCRE_SPTR16, PCRE_UCHAR16 **, PCRE_UCHAR16 **); PCRE_EXP_DECL int pcre32_get_stringtable_entries(const pcre32 *, PCRE_SPTR32, PCRE_UCHAR32 **, PCRE_UCHAR32 **); PCRE_EXP_DECL int pcre_get_substring(const char *, int *, int, int, const char **); PCRE_EXP_DECL int pcre16_get_substring(PCRE_SPTR16, int *, int, int, PCRE_SPTR16 *); PCRE_EXP_DECL int pcre32_get_substring(PCRE_SPTR32, int *, int, int, PCRE_SPTR32 *); PCRE_EXP_DECL int pcre_get_substring_list(const char *, int *, int, const char ***); PCRE_EXP_DECL int pcre16_get_substring_list(PCRE_SPTR16, int *, int, PCRE_SPTR16 **); PCRE_EXP_DECL int pcre32_get_substring_list(PCRE_SPTR32, int *, int, PCRE_SPTR32 **); PCRE_EXP_DECL const unsigned char *pcre_maketables(void); PCRE_EXP_DECL const unsigned char *pcre16_maketables(void); PCRE_EXP_DECL const unsigned char *pcre32_maketables(void); PCRE_EXP_DECL int pcre_refcount(pcre *, int); PCRE_EXP_DECL int pcre16_refcount(pcre16 *, int); PCRE_EXP_DECL int pcre32_refcount(pcre32 *, int); PCRE_EXP_DECL pcre_extra *pcre_study(const pcre *, int, const char **); PCRE_EXP_DECL pcre16_extra *pcre16_study(const pcre16 *, int, const char **); PCRE_EXP_DECL pcre32_extra *pcre32_study(const pcre32 *, int, const char **); PCRE_EXP_DECL void pcre_free_study(pcre_extra *); PCRE_EXP_DECL void pcre16_free_study(pcre16_extra *); PCRE_EXP_DECL void pcre32_free_study(pcre32_extra *); PCRE_EXP_DECL const char *pcre_version(void); PCRE_EXP_DECL const char *pcre16_version(void); PCRE_EXP_DECL const char *pcre32_version(void); /* Utility functions for byte order swaps. */ PCRE_EXP_DECL int pcre_pattern_to_host_byte_order(pcre *, pcre_extra *, const unsigned char *); PCRE_EXP_DECL int pcre16_pattern_to_host_byte_order(pcre16 *, pcre16_extra *, const unsigned char *); PCRE_EXP_DECL int pcre32_pattern_to_host_byte_order(pcre32 *, pcre32_extra *, const unsigned char *); PCRE_EXP_DECL int pcre16_utf16_to_host_byte_order(PCRE_UCHAR16 *, PCRE_SPTR16, int, int *, int); PCRE_EXP_DECL int pcre32_utf32_to_host_byte_order(PCRE_UCHAR32 *, PCRE_SPTR32, int, int *, int); /* JIT compiler related functions. */ PCRE_EXP_DECL pcre_jit_stack *pcre_jit_stack_alloc(int, int); PCRE_EXP_DECL pcre16_jit_stack *pcre16_jit_stack_alloc(int, int); PCRE_EXP_DECL pcre32_jit_stack *pcre32_jit_stack_alloc(int, int); PCRE_EXP_DECL void pcre_jit_stack_free(pcre_jit_stack *); PCRE_EXP_DECL void pcre16_jit_stack_free(pcre16_jit_stack *); PCRE_EXP_DECL void pcre32_jit_stack_free(pcre32_jit_stack *); PCRE_EXP_DECL void pcre_assign_jit_stack(pcre_extra *, pcre_jit_callback, void *); PCRE_EXP_DECL void pcre16_assign_jit_stack(pcre16_extra *, pcre16_jit_callback, void *); PCRE_EXP_DECL void pcre32_assign_jit_stack(pcre32_extra *, pcre32_jit_callback, void *); PCRE_EXP_DECL void pcre_jit_free_unused_memory(void); PCRE_EXP_DECL void pcre16_jit_free_unused_memory(void); PCRE_EXP_DECL void pcre32_jit_free_unused_memory(void); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* End of pcre.h */ PK!xS ext/pcre/pcrelib/pcre_internal.hnu[/************************************************* * Perl-Compatible Regular Expressions * *************************************************/ /* PCRE is a library of functions to support regular expressions whose syntax and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Copyright (c) 1997-2016 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the University of Cambridge nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ----------------------------------------------------------------------------- */ /* This header contains definitions that are shared between the different modules, but which are not relevant to the exported API. This includes some functions whose names all begin with "_pcre_", "_pcre16_" or "_pcre32_" depending on the PRIV macro. */ #ifndef PCRE_INTERNAL_H #define PCRE_INTERNAL_H /* Define PCRE_DEBUG to get debugging output on stdout. */ #if 0 #define PCRE_DEBUG #endif /* PCRE is compiled as an 8 bit library if it is not requested otherwise. */ #if !defined COMPILE_PCRE16 && !defined COMPILE_PCRE32 #define COMPILE_PCRE8 #endif /* If SUPPORT_UCP is defined, SUPPORT_UTF must also be defined. The "configure" script ensures this, but not everybody uses "configure". */ #if defined SUPPORT_UCP && !(defined SUPPORT_UTF) #define SUPPORT_UTF 1 #endif /* We define SUPPORT_UTF if SUPPORT_UTF8 is enabled for compatibility reasons with existing code. */ #if defined SUPPORT_UTF8 && !(defined SUPPORT_UTF) #define SUPPORT_UTF 1 #endif /* Fixme: SUPPORT_UTF8 should be eventually disappear from the code. Until then we define it if SUPPORT_UTF is defined. */ #if defined SUPPORT_UTF && !(defined SUPPORT_UTF8) #define SUPPORT_UTF8 1 #endif /* We do not support both EBCDIC and UTF-8/16/32 at the same time. The "configure" script prevents both being selected, but not everybody uses "configure". */ #if defined EBCDIC && defined SUPPORT_UTF #error The use of both EBCDIC and SUPPORT_UTF is not supported. #endif /* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef inline, and there are *still* stupid compilers about that don't like indented pre-processor statements, or at least there were when I first wrote this. After all, it had only been about 10 years then... It turns out that the Mac Debugging.h header also defines the macro DPRINTF, so be absolutely sure we get our version. */ #undef DPRINTF #ifdef PCRE_DEBUG #define DPRINTF(p) printf p #else #define DPRINTF(p) /* Nothing */ #endif /* Standard C headers plus the external interface definition. The only time setjmp and stdarg are used is when NO_RECURSE is set. */ #include #include #include #include #include #include /* Valgrind (memcheck) support */ #ifdef SUPPORT_VALGRIND #include #endif /* When compiling a DLL for Windows, the exported symbols have to be declared using some MS magic. I found some useful information on this web page: http://msdn2.microsoft.com/en-us/library/y4h7bcy6(VS.80).aspx. According to the information there, using __declspec(dllexport) without "extern" we have a definition; with "extern" we have a declaration. The settings here override the setting in pcre.h (which is included below); it defines only PCRE_EXP_DECL, which is all that is needed for applications (they just import the symbols). We use: PCRE_EXP_DECL for declarations PCRE_EXP_DEFN for definitions of exported functions PCRE_EXP_DATA_DEFN for definitions of exported variables The reason for the two DEFN macros is that in non-Windows environments, one does not want to have "extern" before variable definitions because it leads to compiler warnings. So we distinguish between functions and variables. In Windows, the two should always be the same. The reason for wrapping this in #ifndef PCRE_EXP_DECL is so that pcretest, which is an application, but needs to import this file in order to "peek" at internals, can #include pcre.h first to get an application's-eye view. In principle, people compiling for non-Windows, non-Unix-like (i.e. uncommon, special-purpose environments) might want to stick other stuff in front of exported symbols. That's why, in the non-Windows case, we set PCRE_EXP_DEFN and PCRE_EXP_DATA_DEFN only if they are not already set. */ #ifndef PCRE_EXP_DECL # ifdef _WIN32 # ifndef PCRE_STATIC # define PCRE_EXP_DECL extern __declspec(dllexport) # define PCRE_EXP_DEFN __declspec(dllexport) # define PCRE_EXP_DATA_DEFN __declspec(dllexport) # else # define PCRE_EXP_DECL extern # define PCRE_EXP_DEFN # define PCRE_EXP_DATA_DEFN # endif # else # ifdef __cplusplus # define PCRE_EXP_DECL extern "C" # else # define PCRE_EXP_DECL extern # endif # ifndef PCRE_EXP_DEFN # define PCRE_EXP_DEFN PCRE_EXP_DECL # endif # ifndef PCRE_EXP_DATA_DEFN # define PCRE_EXP_DATA_DEFN # endif # endif #endif /* When compiling with the MSVC compiler, it is sometimes necessary to include a "calling convention" before exported function names. (This is secondhand information; I know nothing about MSVC myself). For example, something like void __cdecl function(....) might be needed. In order so make this easy, all the exported functions have PCRE_CALL_CONVENTION just before their names. It is rarely needed; if not set, we ensure here that it has no effect. */ #ifndef PCRE_CALL_CONVENTION #define PCRE_CALL_CONVENTION #endif /* We need to have types that specify unsigned 8, 16 and 32-bit integers. We cannot determine these outside the compilation (e.g. by running a program as part of "configure") because PCRE is often cross-compiled for use on other systems. Instead we make use of the maximum sizes that are available at preprocessor time in standard C environments. */ typedef unsigned char pcre_uint8; #if USHRT_MAX == 65535 typedef unsigned short pcre_uint16; typedef short pcre_int16; #define PCRE_UINT16_MAX USHRT_MAX #define PCRE_INT16_MAX SHRT_MAX #elif UINT_MAX == 65535 typedef unsigned int pcre_uint16; typedef int pcre_int16; #define PCRE_UINT16_MAX UINT_MAX #define PCRE_INT16_MAX INT_MAX #else #error Cannot determine a type for 16-bit integers #endif #if UINT_MAX == 4294967295U typedef unsigned int pcre_uint32; typedef int pcre_int32; #define PCRE_UINT32_MAX UINT_MAX #define PCRE_INT32_MAX INT_MAX #elif ULONG_MAX == 4294967295UL typedef unsigned long int pcre_uint32; typedef long int pcre_int32; #define PCRE_UINT32_MAX ULONG_MAX #define PCRE_INT32_MAX LONG_MAX #else #error Cannot determine a type for 32-bit integers #endif /* When checking for integer overflow in pcre_compile(), we need to handle large integers. If a 64-bit integer type is available, we can use that. Otherwise we have to cast to double, which of course requires floating point arithmetic. Handle this by defining a macro for the appropriate type. If stdint.h is available, include it; it may define INT64_MAX. Systems that do not have stdint.h (e.g. Solaris) may have inttypes.h. The macro int64_t may be set by "configure". */ #if defined HAVE_STDINT_H #include #elif defined HAVE_INTTYPES_H #include #endif #if defined INT64_MAX || defined int64_t #define INT64_OR_DOUBLE int64_t #else #define INT64_OR_DOUBLE double #endif /* All character handling must be done as unsigned characters. Otherwise there are problems with top-bit-set characters and functions such as isspace(). However, we leave the interface to the outside world as char * or short *, because that should make things easier for callers. This character type is called pcre_uchar. The IN_UCHARS macro multiply its argument with the byte size of the current pcre_uchar type. Useful for memcpy and such operations, whose require the byte size of their input/output buffers. The MAX_255 macro checks whether its pcre_uchar input is less than 256. The TABLE_GET macro is designed for accessing elements of tables whose contain exactly 256 items. When the character is able to contain more than 256 items, some check is needed before accessing these tables. */ #if defined COMPILE_PCRE8 typedef unsigned char pcre_uchar; #define IN_UCHARS(x) (x) #define MAX_255(c) 1 #define TABLE_GET(c, table, default) ((table)[c]) #elif defined COMPILE_PCRE16 #if USHRT_MAX != 65535 /* This is a warning message. Change PCRE_UCHAR16 to a 16 bit data type in pcre.h(.in) and disable (comment out) this message. */ #error Warning: PCRE_UCHAR16 is not a 16 bit data type. #endif typedef pcre_uint16 pcre_uchar; #define UCHAR_SHIFT (1) #define IN_UCHARS(x) ((x) * 2) #define MAX_255(c) ((c) <= 255u) #define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default)) #elif defined COMPILE_PCRE32 typedef pcre_uint32 pcre_uchar; #define UCHAR_SHIFT (2) #define IN_UCHARS(x) ((x) * 4) #define MAX_255(c) ((c) <= 255u) #define TABLE_GET(c, table, default) (MAX_255(c)? ((table)[c]):(default)) #else #error Unsupported compiling mode #endif /* COMPILE_PCRE[8|16|32] */ /* This is an unsigned int value that no character can ever have. UTF-8 characters only go up to 0x7fffffff (though Unicode doesn't go beyond 0x0010ffff). */ #define NOTACHAR 0xffffffff /* PCRE is able to support several different kinds of newline (CR, LF, CRLF, "any" and "anycrlf" at present). The following macros are used to package up testing for newlines. NLBLOCK, PSSTART, and PSEND are defined in the various modules to indicate in which datablock the parameters exist, and what the start/end of string field names are. */ #define NLTYPE_FIXED 0 /* Newline is a fixed length string */ #define NLTYPE_ANY 1 /* Newline is any Unicode line ending */ #define NLTYPE_ANYCRLF 2 /* Newline is CR, LF, or CRLF */ /* This macro checks for a newline at the given position */ #define IS_NEWLINE(p) \ ((NLBLOCK->nltype != NLTYPE_FIXED)? \ ((p) < NLBLOCK->PSEND && \ PRIV(is_newline)((p), NLBLOCK->nltype, NLBLOCK->PSEND, \ &(NLBLOCK->nllen), utf)) \ : \ ((p) <= NLBLOCK->PSEND - NLBLOCK->nllen && \ UCHAR21TEST(p) == NLBLOCK->nl[0] && \ (NLBLOCK->nllen == 1 || UCHAR21TEST(p+1) == NLBLOCK->nl[1]) \ ) \ ) /* This macro checks for a newline immediately preceding the given position */ #define WAS_NEWLINE(p) \ ((NLBLOCK->nltype != NLTYPE_FIXED)? \ ((p) > NLBLOCK->PSSTART && \ PRIV(was_newline)((p), NLBLOCK->nltype, NLBLOCK->PSSTART, \ &(NLBLOCK->nllen), utf)) \ : \ ((p) >= NLBLOCK->PSSTART + NLBLOCK->nllen && \ UCHAR21TEST(p - NLBLOCK->nllen) == NLBLOCK->nl[0] && \ (NLBLOCK->nllen == 1 || UCHAR21TEST(p - NLBLOCK->nllen + 1) == NLBLOCK->nl[1]) \ ) \ ) /* When PCRE is compiled as a C++ library, the subject pointer can be replaced with a custom type. This makes it possible, for example, to allow pcre_exec() to process subject strings that are discontinuous by using a smart pointer class. It must always be possible to inspect all of the subject string in pcre_exec() because of the way it backtracks. Two macros are required in the normal case, for sign-unspecified and unsigned char pointers. The former is used for the external interface and appears in pcre.h, which is why its name must begin with PCRE_. */ #ifdef CUSTOM_SUBJECT_PTR #define PCRE_PUCHAR CUSTOM_SUBJECT_PTR #else #define PCRE_PUCHAR const pcre_uchar * #endif /* Include the public PCRE header and the definitions of UCP character property values. */ #include "pcre.h" #include "ucp.h" #ifdef COMPILE_PCRE32 /* Assert that the public PCRE_UCHAR32 is a 32-bit type */ typedef int __assert_pcre_uchar32_size[sizeof(PCRE_UCHAR32) == 4 ? 1 : -1]; #endif /* When compiling for use with the Virtual Pascal compiler, these functions need to have their names changed. PCRE must be compiled with the -DVPCOMPAT option on the command line. */ #ifdef VPCOMPAT #define strlen(s) _strlen(s) #define strncmp(s1,s2,m) _strncmp(s1,s2,m) #define memcmp(s,c,n) _memcmp(s,c,n) #define memcpy(d,s,n) _memcpy(d,s,n) #define memmove(d,s,n) _memmove(d,s,n) #define memset(s,c,n) _memset(s,c,n) #else /* VPCOMPAT */ /* To cope with SunOS4 and other systems that lack memmove() but have bcopy(), define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY is set. Otherwise, include an emulating function for those systems that have neither (there some non-Unix environments where this is the case). */ #ifndef HAVE_MEMMOVE #undef memmove /* some systems may have a macro */ #ifdef HAVE_BCOPY #define memmove(a, b, c) bcopy(b, a, c) #else /* HAVE_BCOPY */ static void * pcre_memmove(void *d, const void *s, size_t n) { size_t i; unsigned char *dest = (unsigned char *)d; const unsigned char *src = (const unsigned char *)s; if (dest > src) { dest += n; src += n; for (i = 0; i < n; ++i) *(--dest) = *(--src); return (void *)dest; } else { for (i = 0; i < n; ++i) *dest++ = *src++; return (void *)(dest - n); } } #define memmove(a, b, c) pcre_memmove(a, b, c) #endif /* not HAVE_BCOPY */ #endif /* not HAVE_MEMMOVE */ #endif /* not VPCOMPAT */ /* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored in big-endian order) by default. These are used, for example, to link from the start of a subpattern to its alternatives and its end. The use of 2 bytes per offset limits the size of the compiled regex to around 64K, which is big enough for almost everybody. However, I received a request for an even bigger limit. For this reason, and also to make the code easier to maintain, the storing and loading of offsets from the byte string is now handled by the macros that are defined here. The macros are controlled by the value of LINK_SIZE. This defaults to 2 in the config.h file, but can be overridden by using -D on the command line. This is automated on Unix systems via the "configure" command. */ #if defined COMPILE_PCRE8 #if LINK_SIZE == 2 #define PUT(a,n,d) \ (a[n] = (d) >> 8), \ (a[(n)+1] = (d) & 255) #define GET(a,n) \ (((a)[n] << 8) | (a)[(n)+1]) #define MAX_PATTERN_SIZE (1 << 16) #elif LINK_SIZE == 3 #define PUT(a,n,d) \ (a[n] = (d) >> 16), \ (a[(n)+1] = (d) >> 8), \ (a[(n)+2] = (d) & 255) #define GET(a,n) \ (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2]) #define MAX_PATTERN_SIZE (1 << 24) #elif LINK_SIZE == 4 #define PUT(a,n,d) \ (a[n] = (d) >> 24), \ (a[(n)+1] = (d) >> 16), \ (a[(n)+2] = (d) >> 8), \ (a[(n)+3] = (d) & 255) #define GET(a,n) \ (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3]) /* Keep it positive */ #define MAX_PATTERN_SIZE (1 << 30) #else #error LINK_SIZE must be either 2, 3, or 4 #endif #elif defined COMPILE_PCRE16 #if LINK_SIZE == 2 /* Redefine LINK_SIZE as a multiple of sizeof(pcre_uchar) */ #undef LINK_SIZE #define LINK_SIZE 1 #define PUT(a,n,d) \ (a[n] = (d)) #define GET(a,n) \ (a[n]) #define MAX_PATTERN_SIZE (1 << 16) #elif LINK_SIZE == 3 || LINK_SIZE == 4 /* Redefine LINK_SIZE as a multiple of sizeof(pcre_uchar) */ #undef LINK_SIZE #define LINK_SIZE 2 #define PUT(a,n,d) \ (a[n] = (d) >> 16), \ (a[(n)+1] = (d) & 65535) #define GET(a,n) \ (((a)[n] << 16) | (a)[(n)+1]) /* Keep it positive */ #define MAX_PATTERN_SIZE (1 << 30) #else #error LINK_SIZE must be either 2, 3, or 4 #endif #elif defined COMPILE_PCRE32 /* Only supported LINK_SIZE is 4 */ /* Redefine LINK_SIZE as a multiple of sizeof(pcre_uchar) */ #undef LINK_SIZE #define LINK_SIZE 1 #define PUT(a,n,d) \ (a[n] = (d)) #define GET(a,n) \ (a[n]) /* Keep it positive */ #define MAX_PATTERN_SIZE (1 << 30) #else #error Unsupported compiling mode #endif /* COMPILE_PCRE[8|16|32] */ /* Convenience macro defined in terms of the others */ #define PUTINC(a,n,d) PUT(a,n,d), a += LINK_SIZE /* PCRE uses some other 2-byte quantities that do not change when the size of offsets changes. There are used for repeat counts and for other things such as capturing parenthesis numbers in back references. */ #if defined COMPILE_PCRE8 #define IMM2_SIZE 2 #define PUT2(a,n,d) \ a[n] = (d) >> 8; \ a[(n)+1] = (d) & 255 /* For reasons that I do not understand, the expression in this GET2 macro is treated by gcc as a signed expression, even when a is declared as unsigned. It seems that any kind of arithmetic results in a signed value. */ #define GET2(a,n) \ (unsigned int)(((a)[n] << 8) | (a)[(n)+1]) #elif defined COMPILE_PCRE16 #define IMM2_SIZE 1 #define PUT2(a,n,d) \ a[n] = d #define GET2(a,n) \ a[n] #elif defined COMPILE_PCRE32 #define IMM2_SIZE 1 #define PUT2(a,n,d) \ a[n] = d #define GET2(a,n) \ a[n] #else #error Unsupported compiling mode #endif /* COMPILE_PCRE[8|16|32] */ #define PUT2INC(a,n,d) PUT2(a,n,d), a += IMM2_SIZE /* The maximum length of a MARK name is currently one data unit; it may be changed in future to be a fixed number of bytes or to depend on LINK_SIZE. */ #if defined COMPILE_PCRE16 || defined COMPILE_PCRE32 #define MAX_MARK ((1u << 16) - 1) #else #define MAX_MARK ((1u << 8) - 1) #endif /* There is a proposed future special "UTF-21" mode, in which only the lowest 21 bits of a 32-bit character are interpreted as UTF, with the remaining 11 high-order bits available to the application for other uses. In preparation for the future implementation of this mode, there are macros that load a data item and, if in this special mode, mask it to 21 bits. These macros all have names starting with UCHAR21. In all other modes, including the normal 32-bit library, the macros all have the same simple definitions. When the new mode is implemented, it is expected that these definitions will be varied appropriately using #ifdef when compiling the library that supports the special mode. */ #define UCHAR21(eptr) (*(eptr)) #define UCHAR21TEST(eptr) (*(eptr)) #define UCHAR21INC(eptr) (*(eptr)++) #define UCHAR21INCTEST(eptr) (*(eptr)++) /* When UTF encoding is being used, a character is no longer just a single byte in 8-bit mode or a single short in 16-bit mode. The macros for character handling generate simple sequences when used in the basic mode, and more complicated ones for UTF characters. GETCHARLENTEST and other macros are not used when UTF is not supported. To make sure they can never even appear when UTF support is omitted, we don't even define them. */ #ifndef SUPPORT_UTF /* #define MAX_VALUE_FOR_SINGLE_CHAR */ /* #define HAS_EXTRALEN(c) */ /* #define GET_EXTRALEN(c) */ /* #define NOT_FIRSTCHAR(c) */ #define GETCHAR(c, eptr) c = *eptr; #define GETCHARTEST(c, eptr) c = *eptr; #define GETCHARINC(c, eptr) c = *eptr++; #define GETCHARINCTEST(c, eptr) c = *eptr++; #define GETCHARLEN(c, eptr, len) c = *eptr; /* #define GETCHARLENTEST(c, eptr, len) */ /* #define BACKCHAR(eptr) */ /* #define FORWARDCHAR(eptr) */ /* #define ACROSSCHAR(condition, eptr, action) */ #else /* SUPPORT_UTF */ /* Tests whether the code point needs extra characters to decode. */ #define HASUTF8EXTRALEN(c) ((c) >= 0xc0) /* Base macro to pick up the remaining bytes of a UTF-8 character, not advancing the pointer. */ #define GETUTF8(c, eptr) \ { \ if ((c & 0x20) == 0) \ c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \ else if ((c & 0x10) == 0) \ c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \ else if ((c & 0x08) == 0) \ c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \ ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \ else if ((c & 0x04) == 0) \ c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \ ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \ (eptr[4] & 0x3f); \ else \ c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \ ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \ ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \ } /* Base macro to pick up the remaining bytes of a UTF-8 character, advancing the pointer. */ #define GETUTF8INC(c, eptr) \ { \ if ((c & 0x20) == 0) \ c = ((c & 0x1f) << 6) | (*eptr++ & 0x3f); \ else if ((c & 0x10) == 0) \ { \ c = ((c & 0x0f) << 12) | ((*eptr & 0x3f) << 6) | (eptr[1] & 0x3f); \ eptr += 2; \ } \ else if ((c & 0x08) == 0) \ { \ c = ((c & 0x07) << 18) | ((*eptr & 0x3f) << 12) | \ ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \ eptr += 3; \ } \ else if ((c & 0x04) == 0) \ { \ c = ((c & 0x03) << 24) | ((*eptr & 0x3f) << 18) | \ ((eptr[1] & 0x3f) << 12) | ((eptr[2] & 0x3f) << 6) | \ (eptr[3] & 0x3f); \ eptr += 4; \ } \ else \ { \ c = ((c & 0x01) << 30) | ((*eptr & 0x3f) << 24) | \ ((eptr[1] & 0x3f) << 18) | ((eptr[2] & 0x3f) << 12) | \ ((eptr[3] & 0x3f) << 6) | (eptr[4] & 0x3f); \ eptr += 5; \ } \ } #if defined COMPILE_PCRE8 /* These macros were originally written in the form of loops that used data from the tables whose names start with PRIV(utf8_table). They were rewritten by a user so as not to use loops, because in some environments this gives a significant performance advantage, and it seems never to do any harm. */ /* Tells the biggest code point which can be encoded as a single character. */ #define MAX_VALUE_FOR_SINGLE_CHAR 127 /* Tests whether the code point needs extra characters to decode. */ #define HAS_EXTRALEN(c) ((c) >= 0xc0) /* Returns with the additional number of characters if IS_MULTICHAR(c) is TRUE. Otherwise it has an undefined behaviour. */ #define GET_EXTRALEN(c) (PRIV(utf8_table4)[(c) & 0x3f]) /* Returns TRUE, if the given character is not the first character of a UTF sequence. */ #define NOT_FIRSTCHAR(c) (((c) & 0xc0) == 0x80) /* Get the next UTF-8 character, not advancing the pointer. This is called when we know we are in UTF-8 mode. */ #define GETCHAR(c, eptr) \ c = *eptr; \ if (c >= 0xc0) GETUTF8(c, eptr); /* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the pointer. */ #define GETCHARTEST(c, eptr) \ c = *eptr; \ if (utf && c >= 0xc0) GETUTF8(c, eptr); /* Get the next UTF-8 character, advancing the pointer. This is called when we know we are in UTF-8 mode. */ #define GETCHARINC(c, eptr) \ c = *eptr++; \ if (c >= 0xc0) GETUTF8INC(c, eptr); /* Get the next character, testing for UTF-8 mode, and advancing the pointer. This is called when we don't know if we are in UTF-8 mode. */ #define GETCHARINCTEST(c, eptr) \ c = *eptr++; \ if (utf && c >= 0xc0) GETUTF8INC(c, eptr); /* Base macro to pick up the remaining bytes of a UTF-8 character, not advancing the pointer, incrementing the length. */ #define GETUTF8LEN(c, eptr, len) \ { \ if ((c & 0x20) == 0) \ { \ c = ((c & 0x1f) << 6) | (eptr[1] & 0x3f); \ len++; \ } \ else if ((c & 0x10) == 0) \ { \ c = ((c & 0x0f) << 12) | ((eptr[1] & 0x3f) << 6) | (eptr[2] & 0x3f); \ len += 2; \ } \ else if ((c & 0x08) == 0) \ {\ c = ((c & 0x07) << 18) | ((eptr[1] & 0x3f) << 12) | \ ((eptr[2] & 0x3f) << 6) | (eptr[3] & 0x3f); \ len += 3; \ } \ else if ((c & 0x04) == 0) \ { \ c = ((c & 0x03) << 24) | ((eptr[1] & 0x3f) << 18) | \ ((eptr[2] & 0x3f) << 12) | ((eptr[3] & 0x3f) << 6) | \ (eptr[4] & 0x3f); \ len += 4; \ } \ else \ {\ c = ((c & 0x01) << 30) | ((eptr[1] & 0x3f) << 24) | \ ((eptr[2] & 0x3f) << 18) | ((eptr[3] & 0x3f) << 12) | \ ((eptr[4] & 0x3f) << 6) | (eptr[5] & 0x3f); \ len += 5; \ } \ } /* Get the next UTF-8 character, not advancing the pointer, incrementing length if there are extra bytes. This is called when we know we are in UTF-8 mode. */ #define GETCHARLEN(c, eptr, len) \ c = *eptr; \ if (c >= 0xc0) GETUTF8LEN(c, eptr, len); /* Get the next UTF-8 character, testing for UTF-8 mode, not advancing the pointer, incrementing length if there are extra bytes. This is called when we do not know if we are in UTF-8 mode. */ #define GETCHARLENTEST(c, eptr, len) \ c = *eptr; \ if (utf && c >= 0xc0) GETUTF8LEN(c, eptr, len); /* If the pointer is not at the start of a character, move it back until it is. This is called only in UTF-8 mode - we don't put a test within the macro because almost all calls are already within a block of UTF-8 only code. */ #define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr-- /* Same as above, just in the other direction. */ #define FORWARDCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr++ /* Same as above, but it allows a fully customizable form. */ #define ACROSSCHAR(condition, eptr, action) \ while((condition) && ((eptr) & 0xc0) == 0x80) action #elif defined COMPILE_PCRE16 /* Tells the biggest code point which can be encoded as a single character. */ #define MAX_VALUE_FOR_SINGLE_CHAR 65535 /* Tests whether the code point needs extra characters to decode. */ #define HAS_EXTRALEN(c) (((c) & 0xfc00) == 0xd800) /* Returns with the additional number of characters if IS_MULTICHAR(c) is TRUE. Otherwise it has an undefined behaviour. */ #define GET_EXTRALEN(c) 1 /* Returns TRUE, if the given character is not the first character of a UTF sequence. */ #define NOT_FIRSTCHAR(c) (((c) & 0xfc00) == 0xdc00) /* Base macro to pick up the low surrogate of a UTF-16 character, not advancing the pointer. */ #define GETUTF16(c, eptr) \ { c = (((c & 0x3ff) << 10) | (eptr[1] & 0x3ff)) + 0x10000; } /* Get the next UTF-16 character, not advancing the pointer. This is called when we know we are in UTF-16 mode. */ #define GETCHAR(c, eptr) \ c = *eptr; \ if ((c & 0xfc00) == 0xd800) GETUTF16(c, eptr); /* Get the next UTF-16 character, testing for UTF-16 mode, and not advancing the pointer. */ #define GETCHARTEST(c, eptr) \ c = *eptr; \ if (utf && (c & 0xfc00) == 0xd800) GETUTF16(c, eptr); /* Base macro to pick up the low surrogate of a UTF-16 character, advancing the pointer. */ #define GETUTF16INC(c, eptr) \ { c = (((c & 0x3ff) << 10) | (*eptr++ & 0x3ff)) + 0x10000; } /* Get the next UTF-16 character, advancing the pointer. This is called when we know we are in UTF-16 mode. */ #define GETCHARINC(c, eptr) \ c = *eptr++; \ if ((c & 0xfc00) == 0xd800) GETUTF16INC(c, eptr); /* Get the next character, testing for UTF-16 mode, and advancing the pointer. This is called when we don't know if we are in UTF-16 mode. */ #define GETCHARINCTEST(c, eptr) \ c = *eptr++; \ if (utf && (c & 0xfc00) == 0xd800) GETUTF16INC(c, eptr); /* Base macro to pick up the low surrogate of a UTF-16 character, not advancing the pointer, incrementing the length. */ #define GETUTF16LEN(c, eptr, len) \ { c = (((c & 0x3ff) << 10) | (eptr[1] & 0x3ff)) + 0x10000; len++; } /* Get the next UTF-16 character, not advancing the pointer, incrementing length if there is a low surrogate. This is called when we know we are in UTF-16 mode. */ #define GETCHARLEN(c, eptr, len) \ c = *eptr; \ if ((c & 0xfc00) == 0xd800) GETUTF16LEN(c, eptr, len); /* Get the next UTF-816character, testing for UTF-16 mode, not advancing the pointer, incrementing length if there is a low surrogate. This is called when we do not know if we are in UTF-16 mode. */ #define GETCHARLENTEST(c, eptr, len) \ c = *eptr; \ if (utf && (c & 0xfc00) == 0xd800) GETUTF16LEN(c, eptr, len); /* If the pointer is not at the start of a character, move it back until it is. This is called only in UTF-16 mode - we don't put a test within the macro because almost all calls are already within a block of UTF-16 only code. */ #define BACKCHAR(eptr) if ((*eptr & 0xfc00) == 0xdc00) eptr-- /* Same as above, just in the other direction. */ #define FORWARDCHAR(eptr) if ((*eptr & 0xfc00) == 0xdc00) eptr++ /* Same as above, but it allows a fully customizable form. */ #define ACROSSCHAR(condition, eptr, action) \ if ((condition) && ((eptr) & 0xfc00) == 0xdc00) action #elif defined COMPILE_PCRE32 /* These are trivial for the 32-bit library, since all UTF-32 characters fit into one pcre_uchar unit. */ #define MAX_VALUE_FOR_SINGLE_CHAR (0x10ffffu) #define HAS_EXTRALEN(c) (0) #define GET_EXTRALEN(c) (0) #define NOT_FIRSTCHAR(c) (0) /* Get the next UTF-32 character, not advancing the pointer. This is called when we know we are in UTF-32 mode. */ #define GETCHAR(c, eptr) \ c = *(eptr); /* Get the next UTF-32 character, testing for UTF-32 mode, and not advancing the pointer. */ #define GETCHARTEST(c, eptr) \ c = *(eptr); /* Get the next UTF-32 character, advancing the pointer. This is called when we know we are in UTF-32 mode. */ #define GETCHARINC(c, eptr) \ c = *((eptr)++); /* Get the next character, testing for UTF-32 mode, and advancing the pointer. This is called when we don't know if we are in UTF-32 mode. */ #define GETCHARINCTEST(c, eptr) \ c = *((eptr)++); /* Get the next UTF-32 character, not advancing the pointer, not incrementing length (since all UTF-32 is of length 1). This is called when we know we are in UTF-32 mode. */ #define GETCHARLEN(c, eptr, len) \ GETCHAR(c, eptr) /* Get the next UTF-32character, testing for UTF-32 mode, not advancing the pointer, not incrementing the length (since all UTF-32 is of length 1). This is called when we do not know if we are in UTF-32 mode. */ #define GETCHARLENTEST(c, eptr, len) \ GETCHARTEST(c, eptr) /* If the pointer is not at the start of a character, move it back until it is. This is called only in UTF-32 mode - we don't put a test within the macro because almost all calls are already within a block of UTF-32 only code. These are all no-ops since all UTF-32 characters fit into one pcre_uchar. */ #define BACKCHAR(eptr) do { } while (0) /* Same as above, just in the other direction. */ #define FORWARDCHAR(eptr) do { } while (0) /* Same as above, but it allows a fully customizable form. */ #define ACROSSCHAR(condition, eptr, action) do { } while (0) #else #error Unsupported compiling mode #endif /* COMPILE_PCRE[8|16|32] */ #endif /* SUPPORT_UTF */ /* Tests for Unicode horizontal and vertical whitespace characters must check a number of different values. Using a switch statement for this generates the fastest code (no loop, no memory access), and there are several places in the interpreter code where this happens. In order to ensure that all the case lists remain in step, we use macros so that there is only one place where the lists are defined. These values are also required as lists in pcre_compile.c when processing \h, \H, \v and \V in a character class. The lists are defined in pcre_tables.c, but macros that define the values are here so that all the definitions are together. The lists must be in ascending character order, terminated by NOTACHAR (which is 0xffffffff). Any changes should ensure that the various macros are kept in step with each other. NOTE: The values also appear in pcre_jit_compile.c. */ /* ------ ASCII/Unicode environments ------ */ #ifndef EBCDIC #define HSPACE_LIST \ CHAR_HT, CHAR_SPACE, CHAR_NBSP, \ 0x1680, 0x180e, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, \ 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202f, 0x205f, 0x3000, \ NOTACHAR #define HSPACE_MULTIBYTE_CASES \ case 0x1680: /* OGHAM SPACE MARK */ \ case 0x180e: /* MONGOLIAN VOWEL SEPARATOR */ \ case 0x2000: /* EN QUAD */ \ case 0x2001: /* EM QUAD */ \ case 0x2002: /* EN SPACE */ \ case 0x2003: /* EM SPACE */ \ case 0x2004: /* THREE-PER-EM SPACE */ \ case 0x2005: /* FOUR-PER-EM SPACE */ \ case 0x2006: /* SIX-PER-EM SPACE */ \ case 0x2007: /* FIGURE SPACE */ \ case 0x2008: /* PUNCTUATION SPACE */ \ case 0x2009: /* THIN SPACE */ \ case 0x200A: /* HAIR SPACE */ \ case 0x202f: /* NARROW NO-BREAK SPACE */ \ case 0x205f: /* MEDIUM MATHEMATICAL SPACE */ \ case 0x3000 /* IDEOGRAPHIC SPACE */ #define HSPACE_BYTE_CASES \ case CHAR_HT: \ case CHAR_SPACE: \ case CHAR_NBSP #define HSPACE_CASES \ HSPACE_BYTE_CASES: \ HSPACE_MULTIBYTE_CASES #define VSPACE_LIST \ CHAR_LF, CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, 0x2028, 0x2029, NOTACHAR #define VSPACE_MULTIBYTE_CASES \ case 0x2028: /* LINE SEPARATOR */ \ case 0x2029 /* PARAGRAPH SEPARATOR */ #define VSPACE_BYTE_CASES \ case CHAR_LF: \ case CHAR_VT: \ case CHAR_FF: \ case CHAR_CR: \ case CHAR_NEL #define VSPACE_CASES \ VSPACE_BYTE_CASES: \ VSPACE_MULTIBYTE_CASES /* ------ EBCDIC environments ------ */ #else #define HSPACE_LIST CHAR_HT, CHAR_SPACE, CHAR_NBSP, NOTACHAR #define HSPACE_BYTE_CASES \ case CHAR_HT: \ case CHAR_SPACE: \ case CHAR_NBSP #define HSPACE_CASES HSPACE_BYTE_CASES #ifdef EBCDIC_NL25 #define VSPACE_LIST \ CHAR_VT, CHAR_FF, CHAR_CR, CHAR_NEL, CHAR_LF, NOTACHAR #else #define VSPACE_LIST \ CHAR_VT, CHAR_FF, CHAR_CR, CHAR_LF, CHAR_NEL, NOTACHAR #endif #define VSPACE_BYTE_CASES \ case CHAR_LF: \ case CHAR_VT: \ case CHAR_FF: \ case CHAR_CR: \ case CHAR_NEL #define VSPACE_CASES VSPACE_BYTE_CASES #endif /* EBCDIC */ /* ------ End of whitespace macros ------ */ /* Private flags containing information about the compiled regex. They used to live at the top end of the options word, but that got almost full, so they were moved to a 16-bit flags word - which got almost full, so now they are in a 32-bit flags word. From release 8.00, PCRE_NOPARTIAL is unused, as the restrictions on partial matching have been lifted. It remains for backwards compatibility. */ #define PCRE_MODE8 0x00000001 /* compiled in 8 bit mode */ #define PCRE_MODE16 0x00000002 /* compiled in 16 bit mode */ #define PCRE_MODE32 0x00000004 /* compiled in 32 bit mode */ #define PCRE_FIRSTSET 0x00000010 /* first_char is set */ #define PCRE_FCH_CASELESS 0x00000020 /* caseless first char */ #define PCRE_REQCHSET 0x00000040 /* req_byte is set */ #define PCRE_RCH_CASELESS 0x00000080 /* caseless requested char */ #define PCRE_STARTLINE 0x00000100 /* start after \n for multiline */ #define PCRE_NOPARTIAL 0x00000200 /* can't use partial with this regex */ #define PCRE_JCHANGED 0x00000400 /* j option used in regex */ #define PCRE_HASCRORLF 0x00000800 /* explicit \r or \n in pattern */ #define PCRE_HASTHEN 0x00001000 /* pattern contains (*THEN) */ #define PCRE_MLSET 0x00002000 /* match limit set by regex */ #define PCRE_RLSET 0x00004000 /* recursion limit set by regex */ #define PCRE_MATCH_EMPTY 0x00008000 /* pattern can match empty string */ #if defined COMPILE_PCRE8 #define PCRE_MODE PCRE_MODE8 #elif defined COMPILE_PCRE16 #define PCRE_MODE PCRE_MODE16 #elif defined COMPILE_PCRE32 #define PCRE_MODE PCRE_MODE32 #endif #define PCRE_MODE_MASK (PCRE_MODE8 | PCRE_MODE16 | PCRE_MODE32) /* Flags for the "extra" block produced by pcre_study(). */ #define PCRE_STUDY_MAPPED 0x0001 /* a map of starting chars exists */ #define PCRE_STUDY_MINLEN 0x0002 /* a minimum length field exists */ /* Masks for identifying the public options that are permitted at compile time, run time, or study time, respectively. */ #define PCRE_NEWLINE_BITS (PCRE_NEWLINE_CR|PCRE_NEWLINE_LF|PCRE_NEWLINE_ANY| \ PCRE_NEWLINE_ANYCRLF) #define PUBLIC_COMPILE_OPTIONS \ (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \ PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \ PCRE_NO_AUTO_CAPTURE|PCRE_NO_AUTO_POSSESS| \ PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE| \ PCRE_DUPNAMES|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \ PCRE_JAVASCRIPT_COMPAT|PCRE_UCP|PCRE_NO_START_OPTIMIZE|PCRE_NEVER_UTF) #define PUBLIC_EXEC_OPTIONS \ (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \ PCRE_NO_UTF8_CHECK|PCRE_PARTIAL_HARD|PCRE_PARTIAL_SOFT|PCRE_NEWLINE_BITS| \ PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE|PCRE_NO_START_OPTIMIZE) #define PUBLIC_DFA_EXEC_OPTIONS \ (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NOTEMPTY_ATSTART| \ PCRE_NO_UTF8_CHECK|PCRE_PARTIAL_HARD|PCRE_PARTIAL_SOFT|PCRE_DFA_SHORTEST| \ PCRE_DFA_RESTART|PCRE_NEWLINE_BITS|PCRE_BSR_ANYCRLF|PCRE_BSR_UNICODE| \ PCRE_NO_START_OPTIMIZE) #define PUBLIC_STUDY_OPTIONS \ (PCRE_STUDY_JIT_COMPILE|PCRE_STUDY_JIT_PARTIAL_SOFT_COMPILE| \ PCRE_STUDY_JIT_PARTIAL_HARD_COMPILE|PCRE_STUDY_EXTRA_NEEDED) #define PUBLIC_JIT_EXEC_OPTIONS \ (PCRE_NO_UTF8_CHECK|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|\ PCRE_NOTEMPTY_ATSTART|PCRE_PARTIAL_SOFT|PCRE_PARTIAL_HARD) /* Magic number to provide a small check against being handed junk. */ #define MAGIC_NUMBER 0x50435245UL /* 'PCRE' */ /* This variable is used to detect a loaded regular expression in different endianness. */ #define REVERSED_MAGIC_NUMBER 0x45524350UL /* 'ERCP' */ /* The maximum remaining length of subject we are prepared to search for a req_byte match. */ #define REQ_BYTE_MAX 1000 /* Miscellaneous definitions. The #ifndef is to pacify compiler warnings in environments where these macros are defined elsewhere. Unfortunately, there is no way to do the same for the typedef. */ typedef int BOOL; #ifndef FALSE #define FALSE 0 #define TRUE 1 #endif /* If PCRE is to support UTF-8 on EBCDIC platforms, we cannot use normal character constants like '*' because the compiler would emit their EBCDIC code, which is different from their ASCII/UTF-8 code. Instead we define macros for the characters so that they always use the ASCII/UTF-8 code when UTF-8 support is enabled. When UTF-8 support is not enabled, the definitions use character literals. Both character and string versions of each character are needed, and there are some longer strings as well. This means that, on EBCDIC platforms, the PCRE library can handle either EBCDIC, or UTF-8, but not both. To support both in the same compiled library would need different lookups depending on whether PCRE_UTF8 was set or not. This would make it impossible to use characters in switch/case statements, which would reduce performance. For a theoretical use (which nobody has asked for) in a minority area (EBCDIC platforms), this is not sensible. Any application that did need both could compile two versions of the library, using macros to give the functions distinct names. */ #ifndef SUPPORT_UTF /* UTF-8 support is not enabled; use the platform-dependent character literals so that PCRE works in both ASCII and EBCDIC environments, but only in non-UTF mode. Newline characters are problematic in EBCDIC. Though it has CR and LF characters, a common practice has been to use its NL (0x15) character as the line terminator in C-like processing environments. However, sometimes the LF (0x25) character is used instead, according to this Unicode document: http://unicode.org/standard/reports/tr13/tr13-5.html PCRE defaults EBCDIC NL to 0x15, but has a build-time option to select 0x25 instead. Whichever is *not* chosen is defined as NEL. In both ASCII and EBCDIC environments, CHAR_NL and CHAR_LF are synonyms for the same code point. */ #ifdef EBCDIC #ifndef EBCDIC_NL25 #define CHAR_NL '\x15' #define CHAR_NEL '\x25' #define STR_NL "\x15" #define STR_NEL "\x25" #else #define CHAR_NL '\x25' #define CHAR_NEL '\x15' #define STR_NL "\x25" #define STR_NEL "\x15" #endif #define CHAR_LF CHAR_NL #define STR_LF STR_NL #define CHAR_ESC '\047' #define CHAR_DEL '\007' #define CHAR_NBSP '\x41' #define STR_ESC "\047" #define STR_DEL "\007" #else /* Not EBCDIC */ /* In ASCII/Unicode, linefeed is '\n' and we equate this to NL for compatibility. NEL is the Unicode newline character; make sure it is a positive value. */ #define CHAR_LF '\n' #define CHAR_NL CHAR_LF #define CHAR_NEL ((unsigned char)'\x85') #define CHAR_ESC '\033' #define CHAR_DEL '\177' #define CHAR_NBSP ((unsigned char)'\xa0') #define STR_LF "\n" #define STR_NL STR_LF #define STR_NEL "\x85" #define STR_ESC "\033" #define STR_DEL "\177" #endif /* EBCDIC */ /* The remaining definitions work in both environments. */ #define CHAR_NULL '\0' #define CHAR_HT '\t' #define CHAR_VT '\v' #define CHAR_FF '\f' #define CHAR_CR '\r' #define CHAR_BS '\b' #define CHAR_BEL '\a' #define CHAR_SPACE ' ' #define CHAR_EXCLAMATION_MARK '!' #define CHAR_QUOTATION_MARK '"' #define CHAR_NUMBER_SIGN '#' #define CHAR_DOLLAR_SIGN '$' #define CHAR_PERCENT_SIGN '%' #define CHAR_AMPERSAND '&' #define CHAR_APOSTROPHE '\'' #define CHAR_LEFT_PARENTHESIS '(' #define CHAR_RIGHT_PARENTHESIS ')' #define CHAR_ASTERISK '*' #define CHAR_PLUS '+' #define CHAR_COMMA ',' #define CHAR_MINUS '-' #define CHAR_DOT '.' #define CHAR_SLASH '/' #define CHAR_0 '0' #define CHAR_1 '1' #define CHAR_2 '2' #define CHAR_3 '3' #define CHAR_4 '4' #define CHAR_5 '5' #define CHAR_6 '6' #define CHAR_7 '7' #define CHAR_8 '8' #define CHAR_9 '9' #define CHAR_COLON ':' #define CHAR_SEMICOLON ';' #define CHAR_LESS_THAN_SIGN '<' #define CHAR_EQUALS_SIGN '=' #define CHAR_GREATER_THAN_SIGN '>' #define CHAR_QUESTION_MARK '?' #define CHAR_COMMERCIAL_AT '@' #define CHAR_A 'A' #define CHAR_B 'B' #define CHAR_C 'C' #define CHAR_D 'D' #define CHAR_E 'E' #define CHAR_F 'F' #define CHAR_G 'G' #define CHAR_H 'H' #define CHAR_I 'I' #define CHAR_J 'J' #define CHAR_K 'K' #define CHAR_L 'L' #define CHAR_M 'M' #define CHAR_N 'N' #define CHAR_O 'O' #define CHAR_P 'P' #define CHAR_Q 'Q' #define CHAR_R 'R' #define CHAR_S 'S' #define CHAR_T 'T' #define CHAR_U 'U' #define CHAR_V 'V' #define CHAR_W 'W' #define CHAR_X 'X' #define CHAR_Y 'Y' #define CHAR_Z 'Z' #define CHAR_LEFT_SQUARE_BRACKET '[' #define CHAR_BACKSLASH '\\' #define CHAR_RIGHT_SQUARE_BRACKET ']' #define CHAR_CIRCUMFLEX_ACCENT '^' #define CHAR_UNDERSCORE '_' #define CHAR_GRAVE_ACCENT '`' #define CHAR_a 'a' #define CHAR_b 'b' #define CHAR_c 'c' #define CHAR_d 'd' #define CHAR_e 'e' #define CHAR_f 'f' #define CHAR_g 'g' #define CHAR_h 'h' #define CHAR_i 'i' #define CHAR_j 'j' #define CHAR_k 'k' #define CHAR_l 'l' #define CHAR_m 'm' #define CHAR_n 'n' #define CHAR_o 'o' #define CHAR_p 'p' #define CHAR_q 'q' #define CHAR_r 'r' #define CHAR_s 's' #define CHAR_t 't' #define CHAR_u 'u' #define CHAR_v 'v' #define CHAR_w 'w' #define CHAR_x 'x' #define CHAR_y 'y' #define CHAR_z 'z' #define CHAR_LEFT_CURLY_BRACKET '{' #define CHAR_VERTICAL_LINE '|' #define CHAR_RIGHT_CURLY_BRACKET '}' #define CHAR_TILDE '~' #define STR_HT "\t" #define STR_VT "\v" #define STR_FF "\f" #define STR_CR "\r" #define STR_BS "\b" #define STR_BEL "\a" #define STR_SPACE " " #define STR_EXCLAMATION_MARK "!" #define STR_QUOTATION_MARK "\"" #define STR_NUMBER_SIGN "#" #define STR_DOLLAR_SIGN "$" #define STR_PERCENT_SIGN "%" #define STR_AMPERSAND "&" #define STR_APOSTROPHE "'" #define STR_LEFT_PARENTHESIS "(" #define STR_RIGHT_PARENTHESIS ")" #define STR_ASTERISK "*" #define STR_PLUS "+" #define STR_COMMA "," #define STR_MINUS "-" #define STR_DOT "." #define STR_SLASH "/" #define STR_0 "0" #define STR_1 "1" #define STR_2 "2" #define STR_3 "3" #define STR_4 "4" #define STR_5 "5" #define STR_6 "6" #define STR_7 "7" #define STR_8 "8" #define STR_9 "9" #define STR_COLON ":" #define STR_SEMICOLON ";" #define STR_LESS_THAN_SIGN "<" #define STR_EQUALS_SIGN "=" #define STR_GREATER_THAN_SIGN ">" #define STR_QUESTION_MARK "?" #define STR_COMMERCIAL_AT "@" #define STR_A "A" #define STR_B "B" #define STR_C "C" #define STR_D "D" #define STR_E "E" #define STR_F "F" #define STR_G "G" #define STR_H "H" #define STR_I "I" #define STR_J "J" #define STR_K "K" #define STR_L "L" #define STR_M "M" #define STR_N "N" #define STR_O "O" #define STR_P "P" #define STR_Q "Q" #define STR_R "R" #define STR_S "S" #define STR_T "T" #define STR_U "U" #define STR_V "V" #define STR_W "W" #define STR_X "X" #define STR_Y "Y" #define STR_Z "Z" #define STR_LEFT_SQUARE_BRACKET "[" #define STR_BACKSLASH "\\" #define STR_RIGHT_SQUARE_BRACKET "]" #define STR_CIRCUMFLEX_ACCENT "^" #define STR_UNDERSCORE "_" #define STR_GRAVE_ACCENT "`" #define STR_a "a" #define STR_b "b" #define STR_c "c" #define STR_d "d" #define STR_e "e" #define STR_f "f" #define STR_g "g" #define STR_h "h" #define STR_i "i" #define STR_j "j" #define STR_k "k" #define STR_l "l" #define STR_m "m" #define STR_n "n" #define STR_o "o" #define STR_p "p" #define STR_q "q" #define STR_r "r" #define STR_s "s" #define STR_t "t" #define STR_u "u" #define STR_v "v" #define STR_w "w" #define STR_x "x" #define STR_y "y" #define STR_z "z" #define STR_LEFT_CURLY_BRACKET "{" #define STR_VERTICAL_LINE "|" #define STR_RIGHT_CURLY_BRACKET "}" #define STR_TILDE "~" #define STRING_ACCEPT0 "ACCEPT\0" #define STRING_COMMIT0 "COMMIT\0" #define STRING_F0 "F\0" #define STRING_FAIL0 "FAIL\0" #define STRING_MARK0 "MARK\0" #define STRING_PRUNE0 "PRUNE\0" #define STRING_SKIP0 "SKIP\0" #define STRING_THEN "THEN" #define STRING_alpha0 "alpha\0" #define STRING_lower0 "lower\0" #define STRING_upper0 "upper\0" #define STRING_alnum0 "alnum\0" #define STRING_ascii0 "ascii\0" #define STRING_blank0 "blank\0" #define STRING_cntrl0 "cntrl\0" #define STRING_digit0 "digit\0" #define STRING_graph0 "graph\0" #define STRING_print0 "print\0" #define STRING_punct0 "punct\0" #define STRING_space0 "space\0" #define STRING_word0 "word\0" #define STRING_xdigit "xdigit" #define STRING_DEFINE "DEFINE" #define STRING_WEIRD_STARTWORD "[:<:]]" #define STRING_WEIRD_ENDWORD "[:>:]]" #define STRING_CR_RIGHTPAR "CR)" #define STRING_LF_RIGHTPAR "LF)" #define STRING_CRLF_RIGHTPAR "CRLF)" #define STRING_ANY_RIGHTPAR "ANY)" #define STRING_ANYCRLF_RIGHTPAR "ANYCRLF)" #define STRING_BSR_ANYCRLF_RIGHTPAR "BSR_ANYCRLF)" #define STRING_BSR_UNICODE_RIGHTPAR "BSR_UNICODE)" #define STRING_UTF8_RIGHTPAR "UTF8)" #define STRING_UTF16_RIGHTPAR "UTF16)" #define STRING_UTF32_RIGHTPAR "UTF32)" #define STRING_UTF_RIGHTPAR "UTF)" #define STRING_UCP_RIGHTPAR "UCP)" #define STRING_NO_AUTO_POSSESS_RIGHTPAR "NO_AUTO_POSSESS)" #define STRING_NO_START_OPT_RIGHTPAR "NO_START_OPT)" #define STRING_LIMIT_MATCH_EQ "LIMIT_MATCH=" #define STRING_LIMIT_RECURSION_EQ "LIMIT_RECURSION=" #else /* SUPPORT_UTF */ /* UTF-8 support is enabled; always use UTF-8 (=ASCII) character codes. This works in both modes non-EBCDIC platforms, and on EBCDIC platforms in UTF-8 mode only. */ #define CHAR_HT '\011' #define CHAR_VT '\013' #define CHAR_FF '\014' #define CHAR_CR '\015' #define CHAR_LF '\012' #define CHAR_NL CHAR_LF #define CHAR_NEL ((unsigned char)'\x85') #define CHAR_BS '\010' #define CHAR_BEL '\007' #define CHAR_ESC '\033' #define CHAR_DEL '\177' #define CHAR_NULL '\0' #define CHAR_SPACE '\040' #define CHAR_EXCLAMATION_MARK '\041' #define CHAR_QUOTATION_MARK '\042' #define CHAR_NUMBER_SIGN '\043' #define CHAR_DOLLAR_SIGN '\044' #define CHAR_PERCENT_SIGN '\045' #define CHAR_AMPERSAND '\046' #define CHAR_APOSTROPHE '\047' #define CHAR_LEFT_PARENTHESIS '\050' #define CHAR_RIGHT_PARENTHESIS '\051' #define CHAR_ASTERISK '\052' #define CHAR_PLUS '\053' #define CHAR_COMMA '\054' #define CHAR_MINUS '\055' #define CHAR_DOT '\056' #define CHAR_SLASH '\057' #define CHAR_0 '\060' #define CHAR_1 '\061' #define CHAR_2 '\062' #define CHAR_3 '\063' #define CHAR_4 '\064' #define CHAR_5 '\065' #define CHAR_6 '\066' #define CHAR_7 '\067' #define CHAR_8 '\070' #define CHAR_9 '\071' #define CHAR_COLON '\072' #define CHAR_SEMICOLON '\073' #define CHAR_LESS_THAN_SIGN '\074' #define CHAR_EQUALS_SIGN '\075' #define CHAR_GREATER_THAN_SIGN '\076' #define CHAR_QUESTION_MARK '\077' #define CHAR_COMMERCIAL_AT '\100' #define CHAR_A '\101' #define CHAR_B '\102' #define CHAR_C '\103' #define CHAR_D '\104' #define CHAR_E '\105' #define CHAR_F '\106' #define CHAR_G '\107' #define CHAR_H '\110' #define CHAR_I '\111' #define CHAR_J '\112' #define CHAR_K '\113' #define CHAR_L '\114' #define CHAR_M '\115' #define CHAR_N '\116' #define CHAR_O '\117' #define CHAR_P '\120' #define CHAR_Q '\121' #define CHAR_R '\122' #define CHAR_S '\123' #define CHAR_T '\124' #define CHAR_U '\125' #define CHAR_V '\126' #define CHAR_W '\127' #define CHAR_X '\130' #define CHAR_Y '\131' #define CHAR_Z '\132' #define CHAR_LEFT_SQUARE_BRACKET '\133' #define CHAR_BACKSLASH '\134' #define CHAR_RIGHT_SQUARE_BRACKET '\135' #define CHAR_CIRCUMFLEX_ACCENT '\136' #define CHAR_UNDERSCORE '\137' #define CHAR_GRAVE_ACCENT '\140' #define CHAR_a '\141' #define CHAR_b '\142' #define CHAR_c '\143' #define CHAR_d '\144' #define CHAR_e '\145' #define CHAR_f '\146' #define CHAR_g '\147' #define CHAR_h '\150' #define CHAR_i '\151' #define CHAR_j '\152' #define CHAR_k '\153' #define CHAR_l '\154' #define CHAR_m '\155' #define CHAR_n '\156' #define CHAR_o '\157' #define CHAR_p '\160' #define CHAR_q '\161' #define CHAR_r '\162' #define CHAR_s '\163' #define CHAR_t '\164' #define CHAR_u '\165' #define CHAR_v '\166' #define CHAR_w '\167' #define CHAR_x '\170' #define CHAR_y '\171' #define CHAR_z '\172' #define CHAR_LEFT_CURLY_BRACKET '\173' #define CHAR_VERTICAL_LINE '\174' #define CHAR_RIGHT_CURLY_BRACKET '\175' #define CHAR_TILDE '\176' #define CHAR_NBSP ((unsigned char)'\xa0') #define STR_HT "\011" #define STR_VT "\013" #define STR_FF "\014" #define STR_CR "\015" #define STR_NL "\012" #define STR_BS "\010" #define STR_BEL "\007" #define STR_ESC "\033" #define STR_DEL "\177" #define STR_SPACE "\040" #define STR_EXCLAMATION_MARK "\041" #define STR_QUOTATION_MARK "\042" #define STR_NUMBER_SIGN "\043" #define STR_DOLLAR_SIGN "\044" #define STR_PERCENT_SIGN "\045" #define STR_AMPERSAND "\046" #define STR_APOSTROPHE "\047" #define STR_LEFT_PARENTHESIS "\050" #define STR_RIGHT_PARENTHESIS "\051" #define STR_ASTERISK "\052" #define STR_PLUS "\053" #define STR_COMMA "\054" #define STR_MINUS "\055" #define STR_DOT "\056" #define STR_SLASH "\057" #define STR_0 "\060" #define STR_1 "\061" #define STR_2 "\062" #define STR_3 "\063" #define STR_4 "\064" #define STR_5 "\065" #define STR_6 "\066" #define STR_7 "\067" #define STR_8 "\070" #define STR_9 "\071" #define STR_COLON "\072" #define STR_SEMICOLON "\073" #define STR_LESS_THAN_SIGN "\074" #define STR_EQUALS_SIGN "\075" #define STR_GREATER_THAN_SIGN "\076" #define STR_QUESTION_MARK "\077" #define STR_COMMERCIAL_AT "\100" #define STR_A "\101" #define STR_B "\102" #define STR_C "\103" #define STR_D "\104" #define STR_E "\105" #define STR_F "\106" #define STR_G "\107" #define STR_H "\110" #define STR_I "\111" #define STR_J "\112" #define STR_K "\113" #define STR_L "\114" #define STR_M "\115" #define STR_N "\116" #define STR_O "\117" #define STR_P "\120" #define STR_Q "\121" #define STR_R "\122" #define STR_S "\123" #define STR_T "\124" #define STR_U "\125" #define STR_V "\126" #define STR_W "\127" #define STR_X "\130" #define STR_Y "\131" #define STR_Z "\132" #define STR_LEFT_SQUARE_BRACKET "\133" #define STR_BACKSLASH "\134" #define STR_RIGHT_SQUARE_BRACKET "\135" #define STR_CIRCUMFLEX_ACCENT "\136" #define STR_UNDERSCORE "\137" #define STR_GRAVE_ACCENT "\140" #define STR_a "\141" #define STR_b "\142" #define STR_c "\143" #define STR_d "\144" #define STR_e "\145" #define STR_f "\146" #define STR_g "\147" #define STR_h "\150" #define STR_i "\151" #define STR_j "\152" #define STR_k "\153" #define STR_l "\154" #define STR_m "\155" #define STR_n "\156" #define STR_o "\157" #define STR_p "\160" #define STR_q "\161" #define STR_r "\162" #define STR_s "\163" #define STR_t "\164" #define STR_u "\165" #define STR_v "\166" #define STR_w "\167" #define STR_x "\170" #define STR_y "\171" #define STR_z "\172" #define STR_LEFT_CURLY_BRACKET "\173" #define STR_VERTICAL_LINE "\174" #define STR_RIGHT_CURLY_BRACKET "\175" #define STR_TILDE "\176" #define STRING_ACCEPT0 STR_A STR_C STR_C STR_E STR_P STR_T "\0" #define STRING_COMMIT0 STR_C STR_O STR_M STR_M STR_I STR_T "\0" #define STRING_F0 STR_F "\0" #define STRING_FAIL0 STR_F STR_A STR_I STR_L "\0" #define STRING_MARK0 STR_M STR_A STR_R STR_K "\0" #define STRING_PRUNE0 STR_P STR_R STR_U STR_N STR_E "\0" #define STRING_SKIP0 STR_S STR_K STR_I STR_P "\0" #define STRING_THEN STR_T STR_H STR_E STR_N #define STRING_alpha0 STR_a STR_l STR_p STR_h STR_a "\0" #define STRING_lower0 STR_l STR_o STR_w STR_e STR_r "\0" #define STRING_upper0 STR_u STR_p STR_p STR_e STR_r "\0" #define STRING_alnum0 STR_a STR_l STR_n STR_u STR_m "\0" #define STRING_ascii0 STR_a STR_s STR_c STR_i STR_i "\0" #define STRING_blank0 STR_b STR_l STR_a STR_n STR_k "\0" #define STRING_cntrl0 STR_c STR_n STR_t STR_r STR_l "\0" #define STRING_digit0 STR_d STR_i STR_g STR_i STR_t "\0" #define STRING_graph0 STR_g STR_r STR_a STR_p STR_h "\0" #define STRING_print0 STR_p STR_r STR_i STR_n STR_t "\0" #define STRING_punct0 STR_p STR_u STR_n STR_c STR_t "\0" #define STRING_space0 STR_s STR_p STR_a STR_c STR_e "\0" #define STRING_word0 STR_w STR_o STR_r STR_d "\0" #define STRING_xdigit STR_x STR_d STR_i STR_g STR_i STR_t #define STRING_DEFINE STR_D STR_E STR_F STR_I STR_N STR_E #define STRING_WEIRD_STARTWORD STR_LEFT_SQUARE_BRACKET STR_COLON STR_LESS_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET #define STRING_WEIRD_ENDWORD STR_LEFT_SQUARE_BRACKET STR_COLON STR_GREATER_THAN_SIGN STR_COLON STR_RIGHT_SQUARE_BRACKET STR_RIGHT_SQUARE_BRACKET #define STRING_CR_RIGHTPAR STR_C STR_R STR_RIGHT_PARENTHESIS #define STRING_LF_RIGHTPAR STR_L STR_F STR_RIGHT_PARENTHESIS #define STRING_CRLF_RIGHTPAR STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS #define STRING_ANY_RIGHTPAR STR_A STR_N STR_Y STR_RIGHT_PARENTHESIS #define STRING_ANYCRLF_RIGHTPAR STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS #define STRING_BSR_ANYCRLF_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_A STR_N STR_Y STR_C STR_R STR_L STR_F STR_RIGHT_PARENTHESIS #define STRING_BSR_UNICODE_RIGHTPAR STR_B STR_S STR_R STR_UNDERSCORE STR_U STR_N STR_I STR_C STR_O STR_D STR_E STR_RIGHT_PARENTHESIS #define STRING_UTF8_RIGHTPAR STR_U STR_T STR_F STR_8 STR_RIGHT_PARENTHESIS #define STRING_UTF16_RIGHTPAR STR_U STR_T STR_F STR_1 STR_6 STR_RIGHT_PARENTHESIS #define STRING_UTF32_RIGHTPAR STR_U STR_T STR_F STR_3 STR_2 STR_RIGHT_PARENTHESIS #define STRING_UTF_RIGHTPAR STR_U STR_T STR_F STR_RIGHT_PARENTHESIS #define STRING_UCP_RIGHTPAR STR_U STR_C STR_P STR_RIGHT_PARENTHESIS #define STRING_NO_AUTO_POSSESS_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_A STR_U STR_T STR_O STR_UNDERSCORE STR_P STR_O STR_S STR_S STR_E STR_S STR_S STR_RIGHT_PARENTHESIS #define STRING_NO_START_OPT_RIGHTPAR STR_N STR_O STR_UNDERSCORE STR_S STR_T STR_A STR_R STR_T STR_UNDERSCORE STR_O STR_P STR_T STR_RIGHT_PARENTHESIS #define STRING_LIMIT_MATCH_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_M STR_A STR_T STR_C STR_H STR_EQUALS_SIGN #define STRING_LIMIT_RECURSION_EQ STR_L STR_I STR_M STR_I STR_T STR_UNDERSCORE STR_R STR_E STR_C STR_U STR_R STR_S STR_I STR_O STR_N STR_EQUALS_SIGN #endif /* SUPPORT_UTF */ /* Escape items that are just an encoding of a particular data value. */ #ifndef ESC_a #define ESC_a CHAR_BEL #endif #ifndef ESC_e #define ESC_e CHAR_ESC #endif #ifndef ESC_f #define ESC_f CHAR_FF #endif #ifndef ESC_n #define ESC_n CHAR_LF #endif #ifndef ESC_r #define ESC_r CHAR_CR #endif /* We can't officially use ESC_t because it is a POSIX reserved identifier (presumably because of all the others like size_t). */ #ifndef ESC_tee #define ESC_tee CHAR_HT #endif /* Codes for different types of Unicode property */ #define PT_ANY 0 /* Any property - matches all chars */ #define PT_LAMP 1 /* L& - the union of Lu, Ll, Lt */ #define PT_GC 2 /* Specified general characteristic (e.g. L) */ #define PT_PC 3 /* Specified particular characteristic (e.g. Lu) */ #define PT_SC 4 /* Script (e.g. Han) */ #define PT_ALNUM 5 /* Alphanumeric - the union of L and N */ #define PT_SPACE 6 /* Perl space - Z plus 9,10,12,13 */ #define PT_PXSPACE 7 /* POSIX space - Z plus 9,10,11,12,13 */ #define PT_WORD 8 /* Word - L plus N plus underscore */ #define PT_CLIST 9 /* Pseudo-property: match character list */ #define PT_UCNC 10 /* Universal Character nameable character */ #define PT_TABSIZE 11 /* Size of square table for autopossessify tests */ /* The following special properties are used only in XCLASS items, when POSIX classes are specified and PCRE_UCP is set - in other words, for Unicode handling of these classes. They are not available via the \p or \P escapes like those in the above list, and so they do not take part in the autopossessifying table. */ #define PT_PXGRAPH 11 /* [:graph:] - characters that mark the paper */ #define PT_PXPRINT 12 /* [:print:] - [:graph:] plus non-control spaces */ #define PT_PXPUNCT 13 /* [:punct:] - punctuation characters */ /* Flag bits and data types for the extended class (OP_XCLASS) for classes that contain characters with values greater than 255. */ #define XCL_NOT 0x01 /* Flag: this is a negative class */ #define XCL_MAP 0x02 /* Flag: a 32-byte map is present */ #define XCL_HASPROP 0x04 /* Flag: property checks are present. */ #define XCL_END 0 /* Marks end of individual items */ #define XCL_SINGLE 1 /* Single item (one multibyte char) follows */ #define XCL_RANGE 2 /* A range (two multibyte chars) follows */ #define XCL_PROP 3 /* Unicode property (2-byte property code follows) */ #define XCL_NOTPROP 4 /* Unicode inverted property (ditto) */ /* These are escaped items that aren't just an encoding of a particular data value such as \n. They must have non-zero values, as check_escape() returns 0 for a data character. Also, they must appear in the same order as in the opcode definitions below, up to ESC_z. There's a dummy for OP_ALLANY because it corresponds to "." in DOTALL mode rather than an escape sequence. It is also used for [^] in JavaScript compatibility mode, and for \C in non-utf mode. In non-DOTALL mode, "." behaves like \N. The special values ESC_DU, ESC_du, etc. are used instead of ESC_D, ESC_d, etc. when PCRE_UCP is set and replacement of \d etc by \p sequences is required. They must be contiguous, and remain in order so that the replacements can be looked up from a table. Negative numbers are used to encode a backreference (\1, \2, \3, etc.) in check_escape(). There are two tests in the code for an escape greater than ESC_b and less than ESC_Z to detect the types that may be repeated. These are the types that consume characters. If any new escapes are put in between that don't consume a character, that code will have to change. */ enum { ESC_A = 1, ESC_G, ESC_K, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W, ESC_w, ESC_N, ESC_dum, ESC_C, ESC_P, ESC_p, ESC_R, ESC_H, ESC_h, ESC_V, ESC_v, ESC_X, ESC_Z, ESC_z, ESC_E, ESC_Q, ESC_g, ESC_k, ESC_DU, ESC_du, ESC_SU, ESC_su, ESC_WU, ESC_wu }; /********************** Opcode definitions ******************/ /****** NOTE NOTE NOTE ****** Starting from 1 (i.e. after OP_END), the values up to OP_EOD must correspond in order to the list of escapes immediately above. Furthermore, values up to OP_DOLLM must not be changed without adjusting the table called autoposstab in pcre_compile.c Whenever this list is updated, the two macro definitions that follow must be updated to match. The possessification table called "opcode_possessify" in pcre_compile.c must also be updated, and also the tables called "coptable" and "poptable" in pcre_dfa_exec.c. ****** NOTE NOTE NOTE ******/ /* The values between FIRST_AUTOTAB_OP and LAST_AUTOTAB_RIGHT_OP, inclusive, are used in a table for deciding whether a repeated character type can be auto-possessified. */ #define FIRST_AUTOTAB_OP OP_NOT_DIGIT #define LAST_AUTOTAB_LEFT_OP OP_EXTUNI #define LAST_AUTOTAB_RIGHT_OP OP_DOLLM enum { OP_END, /* 0 End of pattern */ /* Values corresponding to backslashed metacharacters */ OP_SOD, /* 1 Start of data: \A */ OP_SOM, /* 2 Start of match (subject + offset): \G */ OP_SET_SOM, /* 3 Set start of match (\K) */ OP_NOT_WORD_BOUNDARY, /* 4 \B */ OP_WORD_BOUNDARY, /* 5 \b */ OP_NOT_DIGIT, /* 6 \D */ OP_DIGIT, /* 7 \d */ OP_NOT_WHITESPACE, /* 8 \S */ OP_WHITESPACE, /* 9 \s */ OP_NOT_WORDCHAR, /* 10 \W */ OP_WORDCHAR, /* 11 \w */ OP_ANY, /* 12 Match any character except newline (\N) */ OP_ALLANY, /* 13 Match any character */ OP_ANYBYTE, /* 14 Match any byte (\C); different to OP_ANY for UTF-8 */ OP_NOTPROP, /* 15 \P (not Unicode property) */ OP_PROP, /* 16 \p (Unicode property) */ OP_ANYNL, /* 17 \R (any newline sequence) */ OP_NOT_HSPACE, /* 18 \H (not horizontal whitespace) */ OP_HSPACE, /* 19 \h (horizontal whitespace) */ OP_NOT_VSPACE, /* 20 \V (not vertical whitespace) */ OP_VSPACE, /* 21 \v (vertical whitespace) */ OP_EXTUNI, /* 22 \X (extended Unicode sequence */ OP_EODN, /* 23 End of data or \n at end of data (\Z) */ OP_EOD, /* 24 End of data (\z) */ /* Line end assertions */ OP_DOLL, /* 25 End of line - not multiline */ OP_DOLLM, /* 26 End of line - multiline */ OP_CIRC, /* 27 Start of line - not multiline */ OP_CIRCM, /* 28 Start of line - multiline */ /* Single characters; caseful must precede the caseless ones */ OP_CHAR, /* 29 Match one character, casefully */ OP_CHARI, /* 30 Match one character, caselessly */ OP_NOT, /* 31 Match one character, not the given one, casefully */ OP_NOTI, /* 32 Match one character, not the given one, caselessly */ /* The following sets of 13 opcodes must always be kept in step because the offset from the first one is used to generate the others. */ /* Repeated characters; caseful must precede the caseless ones */ OP_STAR, /* 33 The maximizing and minimizing versions of */ OP_MINSTAR, /* 34 these six opcodes must come in pairs, with */ OP_PLUS, /* 35 the minimizing one second. */ OP_MINPLUS, /* 36 */ OP_QUERY, /* 37 */ OP_MINQUERY, /* 38 */ OP_UPTO, /* 39 From 0 to n matches of one character, caseful*/ OP_MINUPTO, /* 40 */ OP_EXACT, /* 41 Exactly n matches */ OP_POSSTAR, /* 42 Possessified star, caseful */ OP_POSPLUS, /* 43 Possessified plus, caseful */ OP_POSQUERY, /* 44 Posesssified query, caseful */ OP_POSUPTO, /* 45 Possessified upto, caseful */ /* Repeated characters; caseless must follow the caseful ones */ OP_STARI, /* 46 */ OP_MINSTARI, /* 47 */ OP_PLUSI, /* 48 */ OP_MINPLUSI, /* 49 */ OP_QUERYI, /* 50 */ OP_MINQUERYI, /* 51 */ OP_UPTOI, /* 52 From 0 to n matches of one character, caseless */ OP_MINUPTOI, /* 53 */ OP_EXACTI, /* 54 */ OP_POSSTARI, /* 55 Possessified star, caseless */ OP_POSPLUSI, /* 56 Possessified plus, caseless */ OP_POSQUERYI, /* 57 Posesssified query, caseless */ OP_POSUPTOI, /* 58 Possessified upto, caseless */ /* The negated ones must follow the non-negated ones, and match them */ /* Negated repeated character, caseful; must precede the caseless ones */ OP_NOTSTAR, /* 59 The maximizing and minimizing versions of */ OP_NOTMINSTAR, /* 60 these six opcodes must come in pairs, with */ OP_NOTPLUS, /* 61 the minimizing one second. They must be in */ OP_NOTMINPLUS, /* 62 exactly the same order as those above. */ OP_NOTQUERY, /* 63 */ OP_NOTMINQUERY, /* 64 */ OP_NOTUPTO, /* 65 From 0 to n matches, caseful */ OP_NOTMINUPTO, /* 66 */ OP_NOTEXACT, /* 67 Exactly n matches */ OP_NOTPOSSTAR, /* 68 Possessified versions, caseful */ OP_NOTPOSPLUS, /* 69 */ OP_NOTPOSQUERY, /* 70 */ OP_NOTPOSUPTO, /* 71 */ /* Negated repeated character, caseless; must follow the caseful ones */ OP_NOTSTARI, /* 72 */ OP_NOTMINSTARI, /* 73 */ OP_NOTPLUSI, /* 74 */ OP_NOTMINPLUSI, /* 75 */ OP_NOTQUERYI, /* 76 */ OP_NOTMINQUERYI, /* 77 */ OP_NOTUPTOI, /* 78 From 0 to n matches, caseless */ OP_NOTMINUPTOI, /* 79 */ OP_NOTEXACTI, /* 80 Exactly n matches */ OP_NOTPOSSTARI, /* 81 Possessified versions, caseless */ OP_NOTPOSPLUSI, /* 82 */ OP_NOTPOSQUERYI, /* 83 */ OP_NOTPOSUPTOI, /* 84 */ /* Character types */ OP_TYPESTAR, /* 85 The maximizing and minimizing versions of */ OP_TYPEMINSTAR, /* 86 these six opcodes must come in pairs, with */ OP_TYPEPLUS, /* 87 the minimizing one second. These codes must */ OP_TYPEMINPLUS, /* 88 be in exactly the same order as those above. */ OP_TYPEQUERY, /* 89 */ OP_TYPEMINQUERY, /* 90 */ OP_TYPEUPTO, /* 91 From 0 to n matches */ OP_TYPEMINUPTO, /* 92 */ OP_TYPEEXACT, /* 93 Exactly n matches */ OP_TYPEPOSSTAR, /* 94 Possessified versions */ OP_TYPEPOSPLUS, /* 95 */ OP_TYPEPOSQUERY, /* 96 */ OP_TYPEPOSUPTO, /* 97 */ /* These are used for character classes and back references; only the first six are the same as the sets above. */ OP_CRSTAR, /* 98 The maximizing and minimizing versions of */ OP_CRMINSTAR, /* 99 all these opcodes must come in pairs, with */ OP_CRPLUS, /* 100 the minimizing one second. These codes must */ OP_CRMINPLUS, /* 101 be in exactly the same order as those above. */ OP_CRQUERY, /* 102 */ OP_CRMINQUERY, /* 103 */ OP_CRRANGE, /* 104 These are different to the three sets above. */ OP_CRMINRANGE, /* 105 */ OP_CRPOSSTAR, /* 106 Possessified versions */ OP_CRPOSPLUS, /* 107 */ OP_CRPOSQUERY, /* 108 */ OP_CRPOSRANGE, /* 109 */ /* End of quantifier opcodes */ OP_CLASS, /* 110 Match a character class, chars < 256 only */ OP_NCLASS, /* 111 Same, but the bitmap was created from a negative class - the difference is relevant only when a character > 255 is encountered. */ OP_XCLASS, /* 112 Extended class for handling > 255 chars within the class. This does both positive and negative. */ OP_REF, /* 113 Match a back reference, casefully */ OP_REFI, /* 114 Match a back reference, caselessly */ OP_DNREF, /* 115 Match a duplicate name backref, casefully */ OP_DNREFI, /* 116 Match a duplicate name backref, caselessly */ OP_RECURSE, /* 117 Match a numbered subpattern (possibly recursive) */ OP_CALLOUT, /* 118 Call out to external function if provided */ OP_ALT, /* 119 Start of alternation */ OP_KET, /* 120 End of group that doesn't have an unbounded repeat */ OP_KETRMAX, /* 121 These two must remain together and in this */ OP_KETRMIN, /* 122 order. They are for groups the repeat for ever. */ OP_KETRPOS, /* 123 Possessive unlimited repeat. */ /* The assertions must come before BRA, CBRA, ONCE, and COND, and the four asserts must remain in order. */ OP_REVERSE, /* 124 Move pointer back - used in lookbehind assertions */ OP_ASSERT, /* 125 Positive lookahead */ OP_ASSERT_NOT, /* 126 Negative lookahead */ OP_ASSERTBACK, /* 127 Positive lookbehind */ OP_ASSERTBACK_NOT, /* 128 Negative lookbehind */ /* ONCE, ONCE_NC, BRA, BRAPOS, CBRA, CBRAPOS, and COND must come immediately after the assertions, with ONCE first, as there's a test for >= ONCE for a subpattern that isn't an assertion. The POS versions must immediately follow the non-POS versions in each case. */ OP_ONCE, /* 129 Atomic group, contains captures */ OP_ONCE_NC, /* 130 Atomic group containing no captures */ OP_BRA, /* 131 Start of non-capturing bracket */ OP_BRAPOS, /* 132 Ditto, with unlimited, possessive repeat */ OP_CBRA, /* 133 Start of capturing bracket */ OP_CBRAPOS, /* 134 Ditto, with unlimited, possessive repeat */ OP_COND, /* 135 Conditional group */ /* These five must follow the previous five, in the same order. There's a check for >= SBRA to distinguish the two sets. */ OP_SBRA, /* 136 Start of non-capturing bracket, check empty */ OP_SBRAPOS, /* 137 Ditto, with unlimited, possessive repeat */ OP_SCBRA, /* 138 Start of capturing bracket, check empty */ OP_SCBRAPOS, /* 139 Ditto, with unlimited, possessive repeat */ OP_SCOND, /* 140 Conditional group, check empty */ /* The next two pairs must (respectively) be kept together. */ OP_CREF, /* 141 Used to hold a capture number as condition */ OP_DNCREF, /* 142 Used to point to duplicate names as a condition */ OP_RREF, /* 143 Used to hold a recursion number as condition */ OP_DNRREF, /* 144 Used to point to duplicate names as a condition */ OP_DEF, /* 145 The DEFINE condition */ OP_BRAZERO, /* 146 These two must remain together and in this */ OP_BRAMINZERO, /* 147 order. */ OP_BRAPOSZERO, /* 148 */ /* These are backtracking control verbs */ OP_MARK, /* 149 always has an argument */ OP_PRUNE, /* 150 */ OP_PRUNE_ARG, /* 151 same, but with argument */ OP_SKIP, /* 152 */ OP_SKIP_ARG, /* 153 same, but with argument */ OP_THEN, /* 154 */ OP_THEN_ARG, /* 155 same, but with argument */ OP_COMMIT, /* 156 */ /* These are forced failure and success verbs */ OP_FAIL, /* 157 */ OP_ACCEPT, /* 158 */ OP_ASSERT_ACCEPT, /* 159 Used inside assertions */ OP_CLOSE, /* 160 Used before OP_ACCEPT to close open captures */ /* This is used to skip a subpattern with a {0} quantifier */ OP_SKIPZERO, /* 161 */ /* This is not an opcode, but is used to check that tables indexed by opcode are the correct length, in order to catch updating errors - there have been some in the past. */ OP_TABLE_LENGTH }; /* *** NOTE NOTE NOTE *** Whenever the list above is updated, the two macro definitions that follow must also be updated to match. There are also tables called "opcode_possessify" in pcre_compile.c and "coptable" and "poptable" in pcre_dfa_exec.c that must be updated. */ /* This macro defines textual names for all the opcodes. These are used only for debugging, and some of them are only partial names. The macro is referenced only in pcre_printint.c, which fills out the full names in many cases (and in some cases doesn't actually use these names at all). */ #define OP_NAME_LIST \ "End", "\\A", "\\G", "\\K", "\\B", "\\b", "\\D", "\\d", \ "\\S", "\\s", "\\W", "\\w", "Any", "AllAny", "Anybyte", \ "notprop", "prop", "\\R", "\\H", "\\h", "\\V", "\\v", \ "extuni", "\\Z", "\\z", \ "$", "$", "^", "^", "char", "chari", "not", "noti", \ "*", "*?", "+", "+?", "?", "??", \ "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", \ "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", \ "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", \ "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", "{", "{", "{", \ "*+","++", "?+", "{", \ "*", "*?", "+", "+?", "?", "??", "{", "{", \ "*+","++", "?+", "{", \ "class", "nclass", "xclass", "Ref", "Refi", "DnRef", "DnRefi", \ "Recurse", "Callout", \ "Alt", "Ket", "KetRmax", "KetRmin", "KetRpos", \ "Reverse", "Assert", "Assert not", "AssertB", "AssertB not", \ "Once", "Once_NC", \ "Bra", "BraPos", "CBra", "CBraPos", \ "Cond", \ "SBra", "SBraPos", "SCBra", "SCBraPos", \ "SCond", \ "Cond ref", "Cond dnref", "Cond rec", "Cond dnrec", "Cond def", \ "Brazero", "Braminzero", "Braposzero", \ "*MARK", "*PRUNE", "*PRUNE", "*SKIP", "*SKIP", \ "*THEN", "*THEN", "*COMMIT", "*FAIL", \ "*ACCEPT", "*ASSERT_ACCEPT", \ "Close", "Skip zero" /* This macro defines the length of fixed length operations in the compiled regex. The lengths are used when searching for specific things, and also in the debugging printing of a compiled regex. We use a macro so that it can be defined close to the definitions of the opcodes themselves. As things have been extended, some of these are no longer fixed lenths, but are minima instead. For example, the length of a single-character repeat may vary in UTF-8 mode. The code that uses this table must know about such things. */ #define OP_LENGTHS \ 1, /* End */ \ 1, 1, 1, 1, 1, /* \A, \G, \K, \B, \b */ \ 1, 1, 1, 1, 1, 1, /* \D, \d, \S, \s, \W, \w */ \ 1, 1, 1, /* Any, AllAny, Anybyte */ \ 3, 3, /* \P, \p */ \ 1, 1, 1, 1, 1, /* \R, \H, \h, \V, \v */ \ 1, /* \X */ \ 1, 1, 1, 1, 1, 1, /* \Z, \z, $, $M ^, ^M */ \ 2, /* Char - the minimum length */ \ 2, /* Chari - the minimum length */ \ 2, /* not */ \ 2, /* noti */ \ /* Positive single-char repeats ** These are */ \ 2, 2, 2, 2, 2, 2, /* *, *?, +, +?, ?, ?? ** minima in */ \ 2+IMM2_SIZE, 2+IMM2_SIZE, /* upto, minupto ** mode */ \ 2+IMM2_SIZE, /* exact */ \ 2, 2, 2, 2+IMM2_SIZE, /* *+, ++, ?+, upto+ */ \ 2, 2, 2, 2, 2, 2, /* *I, *?I, +I, +?I, ?I, ??I ** UTF-8 */ \ 2+IMM2_SIZE, 2+IMM2_SIZE, /* upto I, minupto I */ \ 2+IMM2_SIZE, /* exact I */ \ 2, 2, 2, 2+IMM2_SIZE, /* *+I, ++I, ?+I, upto+I */ \ /* Negative single-char repeats - only for chars < 256 */ \ 2, 2, 2, 2, 2, 2, /* NOT *, *?, +, +?, ?, ?? */ \ 2+IMM2_SIZE, 2+IMM2_SIZE, /* NOT upto, minupto */ \ 2+IMM2_SIZE, /* NOT exact */ \ 2, 2, 2, 2+IMM2_SIZE, /* Possessive NOT *, +, ?, upto */ \ 2, 2, 2, 2, 2, 2, /* NOT *I, *?I, +I, +?I, ?I, ??I */ \ 2+IMM2_SIZE, 2+IMM2_SIZE, /* NOT upto I, minupto I */ \ 2+IMM2_SIZE, /* NOT exact I */ \ 2, 2, 2, 2+IMM2_SIZE, /* Possessive NOT *I, +I, ?I, upto I */ \ /* Positive type repeats */ \ 2, 2, 2, 2, 2, 2, /* Type *, *?, +, +?, ?, ?? */ \ 2+IMM2_SIZE, 2+IMM2_SIZE, /* Type upto, minupto */ \ 2+IMM2_SIZE, /* Type exact */ \ 2, 2, 2, 2+IMM2_SIZE, /* Possessive *+, ++, ?+, upto+ */ \ /* Character class & ref repeats */ \ 1, 1, 1, 1, 1, 1, /* *, *?, +, +?, ?, ?? */ \ 1+2*IMM2_SIZE, 1+2*IMM2_SIZE, /* CRRANGE, CRMINRANGE */ \ 1, 1, 1, 1+2*IMM2_SIZE, /* Possessive *+, ++, ?+, CRPOSRANGE */ \ 1+(32/sizeof(pcre_uchar)), /* CLASS */ \ 1+(32/sizeof(pcre_uchar)), /* NCLASS */ \ 0, /* XCLASS - variable length */ \ 1+IMM2_SIZE, /* REF */ \ 1+IMM2_SIZE, /* REFI */ \ 1+2*IMM2_SIZE, /* DNREF */ \ 1+2*IMM2_SIZE, /* DNREFI */ \ 1+LINK_SIZE, /* RECURSE */ \ 2+2*LINK_SIZE, /* CALLOUT */ \ 1+LINK_SIZE, /* Alt */ \ 1+LINK_SIZE, /* Ket */ \ 1+LINK_SIZE, /* KetRmax */ \ 1+LINK_SIZE, /* KetRmin */ \ 1+LINK_SIZE, /* KetRpos */ \ 1+LINK_SIZE, /* Reverse */ \ 1+LINK_SIZE, /* Assert */ \ 1+LINK_SIZE, /* Assert not */ \ 1+LINK_SIZE, /* Assert behind */ \ 1+LINK_SIZE, /* Assert behind not */ \ 1+LINK_SIZE, /* ONCE */ \ 1+LINK_SIZE, /* ONCE_NC */ \ 1+LINK_SIZE, /* BRA */ \ 1+LINK_SIZE, /* BRAPOS */ \ 1+LINK_SIZE+IMM2_SIZE, /* CBRA */ \ 1+LINK_SIZE+IMM2_SIZE, /* CBRAPOS */ \ 1+LINK_SIZE, /* COND */ \ 1+LINK_SIZE, /* SBRA */ \ 1+LINK_SIZE, /* SBRAPOS */ \ 1+LINK_SIZE+IMM2_SIZE, /* SCBRA */ \ 1+LINK_SIZE+IMM2_SIZE, /* SCBRAPOS */ \ 1+LINK_SIZE, /* SCOND */ \ 1+IMM2_SIZE, 1+2*IMM2_SIZE, /* CREF, DNCREF */ \ 1+IMM2_SIZE, 1+2*IMM2_SIZE, /* RREF, DNRREF */ \ 1, /* DEF */ \ 1, 1, 1, /* BRAZERO, BRAMINZERO, BRAPOSZERO */ \ 3, 1, 3, /* MARK, PRUNE, PRUNE_ARG */ \ 1, 3, /* SKIP, SKIP_ARG */ \ 1, 3, /* THEN, THEN_ARG */ \ 1, 1, 1, 1, /* COMMIT, FAIL, ACCEPT, ASSERT_ACCEPT */ \ 1+IMM2_SIZE, 1 /* CLOSE, SKIPZERO */ /* A magic value for OP_RREF to indicate the "any recursion" condition. */ #define RREF_ANY 0xffff /* Compile time error code numbers. They are given names so that they can more easily be tracked. When a new number is added, the table called eint in pcreposix.c must be updated. */ enum { ERR0, ERR1, ERR2, ERR3, ERR4, ERR5, ERR6, ERR7, ERR8, ERR9, ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20, ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR28, ERR29, ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47, ERR48, ERR49, ERR50, ERR51, ERR52, ERR53, ERR54, ERR55, ERR56, ERR57, ERR58, ERR59, ERR60, ERR61, ERR62, ERR63, ERR64, ERR65, ERR66, ERR67, ERR68, ERR69, ERR70, ERR71, ERR72, ERR73, ERR74, ERR75, ERR76, ERR77, ERR78, ERR79, ERR80, ERR81, ERR82, ERR83, ERR84, ERR85, ERR86, ERR87, ERRCOUNT }; /* JIT compiling modes. The function list is indexed by them. */ enum { JIT_COMPILE, JIT_PARTIAL_SOFT_COMPILE, JIT_PARTIAL_HARD_COMPILE, JIT_NUMBER_OF_COMPILE_MODES }; /* The real format of the start of the pcre block; the index of names and the code vector run on as long as necessary after the end. We store an explicit offset to the name table so that if a regex is compiled on one host, saved, and then run on another where the size of pointers is different, all might still be well. The size of the structure must be a multiple of 8 bytes. For the case of compiled-on-4 and run-on-8, we include an extra pointer that is always NULL so that there are an even number of pointers which therefore are a multiple of 8 bytes. It is necessary to fork the struct for the 32 bit library, since it needs to use pcre_uint32 for first_char and req_char. We can't put an ifdef inside the typedef because pcretest needs access to the struct of the 8-, 16- and 32-bit variants. *** WARNING *** When new fields are added to these structures, remember to adjust the code in pcre_byte_order.c that is concerned with swapping the byte order of the fields when a compiled regex is reloaded on a host with different endianness. *** WARNING *** There is also similar byte-flipping code in pcretest.c, which is used for testing the byte-flipping features. It must also be kept in step. *** WARNING *** */ typedef struct real_pcre8_or_16 { pcre_uint32 magic_number; pcre_uint32 size; /* Total that was malloced */ pcre_uint32 options; /* Public options */ pcre_uint32 flags; /* Private flags */ pcre_uint32 limit_match; /* Limit set from regex */ pcre_uint32 limit_recursion; /* Limit set from regex */ pcre_uint16 first_char; /* Starting character */ pcre_uint16 req_char; /* This character must be seen */ pcre_uint16 max_lookbehind; /* Longest lookbehind (characters) */ pcre_uint16 top_bracket; /* Highest numbered group */ pcre_uint16 top_backref; /* Highest numbered back reference */ pcre_uint16 name_table_offset; /* Offset to name table that follows */ pcre_uint16 name_entry_size; /* Size of any name items */ pcre_uint16 name_count; /* Number of name items */ pcre_uint16 ref_count; /* Reference count */ pcre_uint16 dummy1; /* To ensure size is a multiple of 8 */ pcre_uint16 dummy2; /* To ensure size is a multiple of 8 */ pcre_uint16 dummy3; /* To ensure size is a multiple of 8 */ const pcre_uint8 *tables; /* Pointer to tables or NULL for std */ void *nullpad; /* NULL padding */ } real_pcre8_or_16; typedef struct real_pcre8_or_16 real_pcre; typedef struct real_pcre8_or_16 real_pcre16; typedef struct real_pcre32 { pcre_uint32 magic_number; pcre_uint32 size; /* Total that was malloced */ pcre_uint32 options; /* Public options */ pcre_uint32 flags; /* Private flags */ pcre_uint32 limit_match; /* Limit set from regex */ pcre_uint32 limit_recursion; /* Limit set from regex */ pcre_uint32 first_char; /* Starting character */ pcre_uint32 req_char; /* This character must be seen */ pcre_uint16 max_lookbehind; /* Longest lookbehind (characters) */ pcre_uint16 top_bracket; /* Highest numbered group */ pcre_uint16 top_backref; /* Highest numbered back reference */ pcre_uint16 name_table_offset; /* Offset to name table that follows */ pcre_uint16 name_entry_size; /* Size of any name items */ pcre_uint16 name_count; /* Number of name items */ pcre_uint16 ref_count; /* Reference count */ pcre_uint16 dummy; /* To ensure size is a multiple of 8 */ const pcre_uint8 *tables; /* Pointer to tables or NULL for std */ void *nullpad; /* NULL padding */ } real_pcre32; #if defined COMPILE_PCRE8 #define REAL_PCRE real_pcre #elif defined COMPILE_PCRE16 #define REAL_PCRE real_pcre16 #elif defined COMPILE_PCRE32 #define REAL_PCRE real_pcre32 #endif /* Assert that the size of REAL_PCRE is divisible by 8 */ typedef int __assert_real_pcre_size_divisible_8[(sizeof(REAL_PCRE) % 8) == 0 ? 1 : -1]; /* Needed in pcretest to access some fields in the real_pcre* structures * directly. They're unified for 8/16/32 bits since the structs only differ * after these fields; if that ever changes, need to fork those defines into * 8/16 and 32 bit versions. */ #define REAL_PCRE_MAGIC(re) (((REAL_PCRE*)re)->magic_number) #define REAL_PCRE_SIZE(re) (((REAL_PCRE*)re)->size) #define REAL_PCRE_OPTIONS(re) (((REAL_PCRE*)re)->options) #define REAL_PCRE_FLAGS(re) (((REAL_PCRE*)re)->flags) /* The format of the block used to store data from pcre_study(). The same remark (see NOTE above) about extending this structure applies. */ typedef struct pcre_study_data { pcre_uint32 size; /* Total that was malloced */ pcre_uint32 flags; /* Private flags */ pcre_uint8 start_bits[32]; /* Starting char bits */ pcre_uint32 minlength; /* Minimum subject length */ } pcre_study_data; /* Structure for building a chain of open capturing subpatterns during compiling, so that instructions to close them can be compiled when (*ACCEPT) is encountered. This is also used to identify subpatterns that contain recursive back references to themselves, so that they can be made atomic. */ typedef struct open_capitem { struct open_capitem *next; /* Chain link */ pcre_uint16 number; /* Capture number */ pcre_uint16 flag; /* Set TRUE if recursive back ref */ } open_capitem; /* Structure for building a list of named groups during the first pass of compiling. */ typedef struct named_group { const pcre_uchar *name; /* Points to the name in the pattern */ int length; /* Length of the name */ pcre_uint32 number; /* Group number */ } named_group; /* Structure for passing "static" information around between the functions doing the compiling, so that they are thread-safe. */ typedef struct compile_data { const pcre_uint8 *lcc; /* Points to lower casing table */ const pcre_uint8 *fcc; /* Points to case-flipping table */ const pcre_uint8 *cbits; /* Points to character type table */ const pcre_uint8 *ctypes; /* Points to table of type maps */ const pcre_uchar *start_workspace;/* The start of working space */ const pcre_uchar *start_code; /* The start of the compiled code */ const pcre_uchar *start_pattern; /* The start of the pattern */ const pcre_uchar *end_pattern; /* The end of the pattern */ pcre_uchar *hwm; /* High watermark of workspace */ open_capitem *open_caps; /* Chain of open capture items */ named_group *named_groups; /* Points to vector in pre-compile */ pcre_uchar *name_table; /* The name/number table */ int names_found; /* Number of entries so far */ int name_entry_size; /* Size of each entry */ int named_group_list_size; /* Number of entries in the list */ int workspace_size; /* Size of workspace */ unsigned int bracount; /* Count of capturing parens as we compile */ int final_bracount; /* Saved value after first pass */ int max_lookbehind; /* Maximum lookbehind (characters) */ int top_backref; /* Maximum back reference */ unsigned int backref_map; /* Bitmap of low back refs */ unsigned int namedrefcount; /* Number of backreferences by name */ int parens_depth; /* Depth of nested parentheses */ int assert_depth; /* Depth of nested assertions */ pcre_uint32 external_options; /* External (initial) options */ pcre_uint32 external_flags; /* External flag bits to be set */ int req_varyopt; /* "After variable item" flag for reqbyte */ BOOL had_accept; /* (*ACCEPT) encountered */ BOOL had_pruneorskip; /* (*PRUNE) or (*SKIP) encountered */ BOOL check_lookbehind; /* Lookbehinds need later checking */ BOOL dupnames; /* Duplicate names exist */ BOOL dupgroups; /* Duplicate groups exist: (?| found */ BOOL iscondassert; /* Next assert is a condition */ int nltype; /* Newline type */ int nllen; /* Newline string length */ pcre_uchar nl[4]; /* Newline string when fixed length */ } compile_data; /* Structure for maintaining a chain of pointers to the currently incomplete branches, for testing for left recursion while compiling. */ typedef struct branch_chain { struct branch_chain *outer; pcre_uchar *current_branch; } branch_chain; /* Structure for mutual recursion detection. */ typedef struct recurse_check { struct recurse_check *prev; const pcre_uchar *group; } recurse_check; /* Structure for items in a linked list that represents an explicit recursive call within the pattern; used by pcre_exec(). */ typedef struct recursion_info { struct recursion_info *prevrec; /* Previous recursion record (or NULL) */ unsigned int group_num; /* Number of group that was called */ int *offset_save; /* Pointer to start of saved offsets */ int saved_max; /* Number of saved offsets */ int saved_capture_last; /* Last capture number */ PCRE_PUCHAR subject_position; /* Position at start of recursion */ } recursion_info; /* A similar structure for pcre_dfa_exec(). */ typedef struct dfa_recursion_info { struct dfa_recursion_info *prevrec; int group_num; PCRE_PUCHAR subject_position; } dfa_recursion_info; /* Structure for building a chain of data for holding the values of the subject pointer at the start of each subpattern, so as to detect when an empty string has been matched by a subpattern - to break infinite loops; used by pcre_exec(). */ typedef struct eptrblock { struct eptrblock *epb_prev; PCRE_PUCHAR epb_saved_eptr; } eptrblock; /* Structure for passing "static" information around between the functions doing traditional NFA matching, so that they are thread-safe. */ typedef struct match_data { unsigned long int match_call_count; /* As it says */ unsigned long int match_limit; /* As it says */ unsigned long int match_limit_recursion; /* As it says */ int *offset_vector; /* Offset vector */ int offset_end; /* One past the end */ int offset_max; /* The maximum usable for return data */ int nltype; /* Newline type */ int nllen; /* Newline string length */ int name_count; /* Number of names in name table */ int name_entry_size; /* Size of entry in names table */ unsigned int skip_arg_count; /* For counting SKIP_ARGs */ unsigned int ignore_skip_arg; /* For re-run when SKIP arg name not found */ pcre_uchar *name_table; /* Table of names */ pcre_uchar nl[4]; /* Newline string when fixed */ const pcre_uint8 *lcc; /* Points to lower casing table */ const pcre_uint8 *fcc; /* Points to case-flipping table */ const pcre_uint8 *ctypes; /* Points to table of type maps */ BOOL notbol; /* NOTBOL flag */ BOOL noteol; /* NOTEOL flag */ BOOL utf; /* UTF-8 / UTF-16 flag */ BOOL jscript_compat; /* JAVASCRIPT_COMPAT flag */ BOOL use_ucp; /* PCRE_UCP flag */ BOOL endonly; /* Dollar not before final \n */ BOOL notempty; /* Empty string match not wanted */ BOOL notempty_atstart; /* Empty string match at start not wanted */ BOOL hitend; /* Hit the end of the subject at some point */ BOOL bsr_anycrlf; /* \R is just any CRLF, not full Unicode */ BOOL hasthen; /* Pattern contains (*THEN) */ const pcre_uchar *start_code; /* For use when recursing */ PCRE_PUCHAR start_subject; /* Start of the subject string */ PCRE_PUCHAR end_subject; /* End of the subject string */ PCRE_PUCHAR start_match_ptr; /* Start of matched string */ PCRE_PUCHAR end_match_ptr; /* Subject position at end match */ PCRE_PUCHAR start_used_ptr; /* Earliest consulted character */ int partial; /* PARTIAL options */ int end_offset_top; /* Highwater mark at end of match */ pcre_int32 capture_last; /* Most recent capture number + overflow flag */ int start_offset; /* The start offset value */ int match_function_type; /* Set for certain special calls of MATCH() */ eptrblock *eptrchain; /* Chain of eptrblocks for tail recursions */ int eptrn; /* Next free eptrblock */ recursion_info *recursive; /* Linked list of recursion data */ void *callout_data; /* To pass back to callouts */ const pcre_uchar *mark; /* Mark pointer to pass back on success */ const pcre_uchar *nomatch_mark;/* Mark pointer to pass back on failure */ const pcre_uchar *once_target; /* Where to back up to for atomic groups */ #ifdef NO_RECURSE void *match_frames_base; /* For remembering malloc'd frames */ #endif } match_data; /* A similar structure is used for the same purpose by the DFA matching functions. */ typedef struct dfa_match_data { const pcre_uchar *start_code; /* Start of the compiled pattern */ const pcre_uchar *start_subject ; /* Start of the subject string */ const pcre_uchar *end_subject; /* End of subject string */ const pcre_uchar *start_used_ptr; /* Earliest consulted character */ const pcre_uint8 *tables; /* Character tables */ int start_offset; /* The start offset value */ int moptions; /* Match options */ int poptions; /* Pattern options */ int nltype; /* Newline type */ int nllen; /* Newline string length */ pcre_uchar nl[4]; /* Newline string when fixed */ void *callout_data; /* To pass back to callouts */ dfa_recursion_info *recursive; /* Linked list of recursion data */ } dfa_match_data; /* Bit definitions for entries in the pcre_ctypes table. */ #define ctype_space 0x01 #define ctype_letter 0x02 #define ctype_digit 0x04 #define ctype_xdigit 0x08 #define ctype_word 0x10 /* alphanumeric or '_' */ #define ctype_meta 0x80 /* regexp meta char or zero (end pattern) */ /* Offsets for the bitmap tables in pcre_cbits. Each table contains a set of bits for a class map. Some classes are built by combining these tables. */ #define cbit_space 0 /* [:space:] or \s */ #define cbit_xdigit 32 /* [:xdigit:] */ #define cbit_digit 64 /* [:digit:] or \d */ #define cbit_upper 96 /* [:upper:] */ #define cbit_lower 128 /* [:lower:] */ #define cbit_word 160 /* [:word:] or \w */ #define cbit_graph 192 /* [:graph:] */ #define cbit_print 224 /* [:print:] */ #define cbit_punct 256 /* [:punct:] */ #define cbit_cntrl 288 /* [:cntrl:] */ #define cbit_length 320 /* Length of the cbits table */ /* Offsets of the various tables from the base tables pointer, and total length. */ #define lcc_offset 0 #define fcc_offset 256 #define cbits_offset 512 #define ctypes_offset (cbits_offset + cbit_length) #define tables_length (ctypes_offset + 256) /* Internal function and data prefixes. */ #if defined COMPILE_PCRE8 #ifndef PUBL #define PUBL(name) pcre_##name #endif #ifndef PRIV #define PRIV(name) _pcre_##name #endif #elif defined COMPILE_PCRE16 #ifndef PUBL #define PUBL(name) pcre16_##name #endif #ifndef PRIV #define PRIV(name) _pcre16_##name #endif #elif defined COMPILE_PCRE32 #ifndef PUBL #define PUBL(name) pcre32_##name #endif #ifndef PRIV #define PRIV(name) _pcre32_##name #endif #else #error Unsupported compiling mode #endif /* COMPILE_PCRE[8|16|32] */ /* Layout of the UCP type table that translates property names into types and codes. Each entry used to point directly to a name, but to reduce the number of relocations in shared libraries, it now has an offset into a single string instead. */ typedef struct { pcre_uint16 name_offset; pcre_uint16 type; pcre_uint16 value; } ucp_type_table; /* Internal shared data tables. These are tables that are used by more than one of the exported public functions. They have to be "external" in the C sense, but are not part of the PCRE public API. The data for these tables is in the pcre_tables.c module. */ #ifdef COMPILE_PCRE8 extern const int PRIV(utf8_table1)[]; extern const int PRIV(utf8_table1_size); extern const int PRIV(utf8_table2)[]; extern const int PRIV(utf8_table3)[]; extern const pcre_uint8 PRIV(utf8_table4)[]; #endif /* COMPILE_PCRE8 */ extern const char PRIV(utt_names)[]; extern const ucp_type_table PRIV(utt)[]; extern const int PRIV(utt_size); extern const pcre_uint8 PRIV(OP_lengths)[]; extern const pcre_uint8 PRIV(default_tables)[]; extern const pcre_uint32 PRIV(hspace_list)[]; extern const pcre_uint32 PRIV(vspace_list)[]; /* Internal shared functions. These are functions that are used by more than one of the exported public functions. They have to be "external" in the C sense, but are not part of the PCRE public API. */ /* String comparison functions. */ #if defined COMPILE_PCRE8 #define STRCMP_UC_UC(str1, str2) \ strcmp((char *)(str1), (char *)(str2)) #define STRCMP_UC_C8(str1, str2) \ strcmp((char *)(str1), (str2)) #define STRNCMP_UC_UC(str1, str2, num) \ strncmp((char *)(str1), (char *)(str2), (num)) #define STRNCMP_UC_C8(str1, str2, num) \ strncmp((char *)(str1), (str2), (num)) #define STRLEN_UC(str) strlen((const char *)str) #elif defined COMPILE_PCRE16 || defined COMPILE_PCRE32 extern int PRIV(strcmp_uc_uc)(const pcre_uchar *, const pcre_uchar *); extern int PRIV(strcmp_uc_c8)(const pcre_uchar *, const char *); extern int PRIV(strncmp_uc_uc)(const pcre_uchar *, const pcre_uchar *, unsigned int num); extern int PRIV(strncmp_uc_c8)(const pcre_uchar *, const char *, unsigned int num); extern unsigned int PRIV(strlen_uc)(const pcre_uchar *str); #define STRCMP_UC_UC(str1, str2) \ PRIV(strcmp_uc_uc)((str1), (str2)) #define STRCMP_UC_C8(str1, str2) \ PRIV(strcmp_uc_c8)((str1), (str2)) #define STRNCMP_UC_UC(str1, str2, num) \ PRIV(strncmp_uc_uc)((str1), (str2), (num)) #define STRNCMP_UC_C8(str1, str2, num) \ PRIV(strncmp_uc_c8)((str1), (str2), (num)) #define STRLEN_UC(str) PRIV(strlen_uc)(str) #endif /* COMPILE_PCRE[8|16|32] */ #if defined COMPILE_PCRE8 || defined COMPILE_PCRE16 #define STRCMP_UC_UC_TEST(str1, str2) STRCMP_UC_UC(str1, str2) #define STRCMP_UC_C8_TEST(str1, str2) STRCMP_UC_C8(str1, str2) #elif defined COMPILE_PCRE32 extern int PRIV(strcmp_uc_uc_utf)(const pcre_uchar *, const pcre_uchar *); extern int PRIV(strcmp_uc_c8_utf)(const pcre_uchar *, const char *); #define STRCMP_UC_UC_TEST(str1, str2) \ (utf ? PRIV(strcmp_uc_uc_utf)((str1), (str2)) : PRIV(strcmp_uc_uc)((str1), (str2))) #define STRCMP_UC_C8_TEST(str1, str2) \ (utf ? PRIV(strcmp_uc_c8_utf)((str1), (str2)) : PRIV(strcmp_uc_c8)((str1), (str2))) #endif /* COMPILE_PCRE[8|16|32] */ extern const pcre_uchar *PRIV(find_bracket)(const pcre_uchar *, BOOL, int); extern BOOL PRIV(is_newline)(PCRE_PUCHAR, int, PCRE_PUCHAR, int *, BOOL); extern unsigned int PRIV(ord2utf)(pcre_uint32, pcre_uchar *); extern int PRIV(valid_utf)(PCRE_PUCHAR, int, int *); extern BOOL PRIV(was_newline)(PCRE_PUCHAR, int, PCRE_PUCHAR, int *, BOOL); extern BOOL PRIV(xclass)(pcre_uint32, const pcre_uchar *, BOOL); #ifdef SUPPORT_JIT extern void PRIV(jit_compile)(const REAL_PCRE *, PUBL(extra) *, int); extern int PRIV(jit_exec)(const PUBL(extra) *, const pcre_uchar *, int, int, int, int *, int); extern void PRIV(jit_free)(void *); extern int PRIV(jit_get_size)(void *); extern const char* PRIV(jit_get_target)(void); #endif /* Unicode character database (UCD) */ typedef struct { pcre_uint8 script; /* ucp_Arabic, etc. */ pcre_uint8 chartype; /* ucp_Cc, etc. (general categories) */ pcre_uint8 gbprop; /* ucp_gbControl, etc. (grapheme break property) */ pcre_uint8 caseset; /* offset to multichar other cases or zero */ pcre_int32 other_case; /* offset to other case, or zero if none */ } ucd_record; extern const pcre_uint32 PRIV(ucd_caseless_sets)[]; extern const ucd_record PRIV(ucd_records)[]; extern const pcre_uint8 PRIV(ucd_stage1)[]; extern const pcre_uint16 PRIV(ucd_stage2)[]; extern const pcre_uint32 PRIV(ucp_gentype)[]; extern const pcre_uint32 PRIV(ucp_gbtable)[]; #ifdef COMPILE_PCRE32 extern const ucd_record PRIV(dummy_ucd_record)[]; #endif #ifdef SUPPORT_JIT extern const int PRIV(ucp_typerange)[]; #endif #ifdef SUPPORT_UCP /* UCD access macros */ #define UCD_BLOCK_SIZE 128 #define REAL_GET_UCD(ch) (PRIV(ucd_records) + \ PRIV(ucd_stage2)[PRIV(ucd_stage1)[(int)(ch) / UCD_BLOCK_SIZE] * \ UCD_BLOCK_SIZE + (int)(ch) % UCD_BLOCK_SIZE]) #ifdef COMPILE_PCRE32 #define GET_UCD(ch) ((ch > 0x10ffff)? PRIV(dummy_ucd_record) : REAL_GET_UCD(ch)) #else #define GET_UCD(ch) REAL_GET_UCD(ch) #endif #define UCD_CHARTYPE(ch) GET_UCD(ch)->chartype #define UCD_SCRIPT(ch) GET_UCD(ch)->script #define UCD_CATEGORY(ch) PRIV(ucp_gentype)[UCD_CHARTYPE(ch)] #define UCD_GRAPHBREAK(ch) GET_UCD(ch)->gbprop #define UCD_CASESET(ch) GET_UCD(ch)->caseset #define UCD_OTHERCASE(ch) ((pcre_uint32)((int)ch + (int)(GET_UCD(ch)->other_case))) #endif /* SUPPORT_UCP */ #endif /* End of pcre_internal.h */ PK!ױext/pcre/php_pcre.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andrei Zmievski | +----------------------------------------------------------------------+ */ #ifndef PHP_PCRE_H #define PHP_PCRE_H #if HAVE_PCRE || HAVE_BUNDLED_PCRE #if HAVE_BUNDLED_PCRE #include "pcre2lib/pcre2.h" #else #include "pcre2.h" #endif #if HAVE_LOCALE_H #include #endif PHPAPI zend_string *php_pcre_replace(zend_string *regex, zend_string *subject_str, char *subject, size_t subject_len, zend_string *replace_str, size_t limit, size_t *replace_count); PHPAPI pcre2_code* pcre_get_compiled_regex(zend_string *regex, uint32_t *capture_count, uint32_t *options); PHPAPI pcre2_code* pcre_get_compiled_regex_ex(zend_string *regex, uint32_t *capture_count, uint32_t *preg_options, uint32_t *coptions); extern zend_module_entry pcre_module_entry; #define pcre_module_ptr &pcre_module_entry #include "php_version.h" #define PHP_PCRE_VERSION PHP_VERSION typedef struct _pcre_cache_entry pcre_cache_entry; PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache(zend_string *regex); PHPAPI pcre_cache_entry* pcre_get_compiled_regex_cache_ex(zend_string *regex, int locale_aware); PHPAPI void php_pcre_match_impl( pcre_cache_entry *pce, char *subject, size_t subject_len, zval *return_value, zval *subpats, int global, int use_flags, zend_long flags, zend_off_t start_offset); PHPAPI zend_string *php_pcre_replace_impl(pcre_cache_entry *pce, zend_string *subject_str, char *subject, size_t subject_len, zend_string *replace_str, size_t limit, size_t *replace_count); PHPAPI void php_pcre_split_impl( pcre_cache_entry *pce, zend_string *subject_str, zval *return_value, zend_long limit_val, zend_long flags); PHPAPI void php_pcre_grep_impl( pcre_cache_entry *pce, zval *input, zval *return_value, zend_long flags); PHPAPI pcre2_match_context *php_pcre_mctx(void); PHPAPI pcre2_general_context *php_pcre_gctx(void); PHPAPI pcre2_compile_context *php_pcre_cctx(void); PHPAPI void php_pcre_pce_incref(pcre_cache_entry *); PHPAPI void php_pcre_pce_decref(pcre_cache_entry *); PHPAPI pcre2_code *php_pcre_pce_re(pcre_cache_entry *); /* capture_count can be ignored, re is required. */ PHPAPI pcre2_match_data *php_pcre_create_match_data(uint32_t, pcre2_code *); PHPAPI void php_pcre_free_match_data(pcre2_match_data *); ZEND_BEGIN_MODULE_GLOBALS(pcre) HashTable pcre_cache; zend_long backtrack_limit; zend_long recursion_limit; #ifdef HAVE_PCRE_JIT_SUPPORT zend_bool jit; #endif int error_code; ZEND_END_MODULE_GLOBALS(pcre) PHPAPI ZEND_EXTERN_MODULE_GLOBALS(pcre) #define PCRE_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(pcre, v) #else #define pcre_module_ptr NULL #endif /* HAVE_PCRE || HAVE_BUNDLED_PCRE */ #define phpext_pcre_ptr pcre_module_ptr #endif /* PHP_PCRE_H */ PK!޳ < < ext/mysqli/mysqli_mysqlnd.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 2006-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Georg Richter | | Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef MYSQLI_MYSQLND_H #define MYSQLI_MYSQLND_H #include "ext/mysqlnd/mysqlnd_libmysql_compat.h" #include "ext/mysqlnd/mysqlnd_portability.h" /* Here comes non-libmysql API to have less ifdefs in mysqli*/ #define MYSQLI_CLOSE_EXPLICIT MYSQLND_CLOSE_EXPLICIT #define MYSQLI_CLOSE_IMPLICIT MYSQLND_CLOSE_IMPLICIT #define MYSQLI_CLOSE_DISCONNECTED MYSQLND_CLOSE_DISCONNECTED #define mysqli_result_is_unbuffered(r) ((r)->unbuf) #define mysqli_result_is_unbuffered_and_not_everything_is_fetched(r) ((r)->unbuf && !(r)->unbuf->eof_reached) #define mysqli_server_status(c) mysqlnd_get_server_status((c)) #define mysqli_stmt_get_id(s) ((s)->data->stmt_id) #define mysqli_stmt_warning_count(s) mysqlnd_stmt_warning_count((s)) #define mysqli_stmt_server_status(s) mysqlnd_stmt_server_status((s)) #define mysqli_stmt_get_connection(s) (s)->data->conn #define mysqli_close(c, how) mysqlnd_close((c), (how)) #define mysqli_stmt_close(c, implicit) mysqlnd_stmt_close((c), (implicit)) #define mysqli_free_result(r, implicit) mysqlnd_free_result((r), (implicit)) #define mysqli_async_query(c, q, l) mysqlnd_async_query((c), (q), (l)) #define mysqli_change_user_silent(c, u, p, d, p_len) mysqlnd_change_user_ex((c), (u), (p), (d), TRUE, (size_t)(p_len)) #define HAVE_STMT_NEXT_RESULT #endif PK!&&&ext/mysqli/php_mysqli_structs.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Georg Richter | | Andrey Hristov | | Ulf Wendel | +----------------------------------------------------------------------+ */ #ifndef PHP_MYSQLI_STRUCTS_H #define PHP_MYSQLI_STRUCTS_H /* A little hack to prevent build break, when mysql is used together with * c-client, which also defines LIST. */ #ifdef LIST #undef LIST #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #ifdef MYSQLI_USE_MYSQLND #include "ext/mysqlnd/mysqlnd.h" #include "mysqli_mysqlnd.h" #else /* The libmysql headers (a PITA) also define it and there will be an warning. Undef it and later we might need to define it again. */ #ifdef HAVE_MBRLEN #undef HAVE_MBRLEN #define WE_HAD_MBRLEN #endif #ifdef HAVE_MBSTATE_T #undef HAVE_MBSTATE_T #define WE_HAD_MBSTATE_T #endif #if defined(ulong) && !defined(HAVE_ULONG) #define HAVE_ULONG #endif #if !defined(HAVE_MBRLEN) && defined(WE_HAD_MBRLEN) #define HAVE_MBRLEN 1 #endif #if !defined(HAVE_MBSTATE_T) && defined(WE_HAD_MBSTATE_T) #define HAVE_MBSTATE_T 1 #endif #include #if MYSQL_VERSION_ID >= 80000 && MYSQL_VERSION_ID < 100000 typedef _Bool my_bool; #endif #include #include #include "mysqli_libmysql.h" #endif /* MYSQLI_USE_MYSQLND */ #define MYSQLI_VERSION_ID 101009 enum mysqli_status { MYSQLI_STATUS_UNKNOWN=0, MYSQLI_STATUS_CLEARED, MYSQLI_STATUS_INITIALIZED, MYSQLI_STATUS_VALID }; typedef struct { char *val; zend_ulong buflen; zend_ulong output_len; zend_ulong type; } VAR_BUFFER; typedef struct { unsigned int var_cnt; VAR_BUFFER *buf; zval *vars; char *is_null; } BIND_BUFFER; typedef struct { MYSQL_STMT *stmt; BIND_BUFFER param; BIND_BUFFER result; char *query; #ifndef MYSQLI_USE_MYSQLND /* used to manage refcount with libmysql (already implement in mysqlnd) */ zval link_handle; #endif } MY_STMT; typedef struct { MYSQL *mysql; zend_string *hash_key; zval li_read; php_stream *li_stream; unsigned int multi_query; zend_bool persistent; #if defined(MYSQLI_USE_MYSQLND) int async_result_fetch_type; #endif } MY_MYSQL; typedef struct { void *ptr; /* resource: (mysql, result, stmt) */ void *info; /* additional buffer */ enum mysqli_status status; /* object status */ } MYSQLI_RESOURCE; typedef struct _mysqli_object { void *ptr; HashTable *prop_handler; zend_object zo; } mysqli_object; /* extends zend_object */ static inline mysqli_object *php_mysqli_fetch_object(zend_object *obj) { return (mysqli_object *)((char*)(obj) - XtOffsetOf(mysqli_object, zo)); } #define Z_MYSQLI_P(zv) php_mysqli_fetch_object(Z_OBJ_P((zv))) typedef struct st_mysqli_warning MYSQLI_WARNING; struct st_mysqli_warning { zval reason; zval sqlstate; int errorno; MYSQLI_WARNING *next; }; typedef struct _mysqli_property_entry { const char *pname; size_t pname_length; zval *(*r_func)(mysqli_object *obj, zval *retval); int (*w_func)(mysqli_object *obj, zval *value); } mysqli_property_entry; typedef struct { zend_ptr_stack free_links; } mysqli_plist_entry; #ifdef PHP_WIN32 #define PHP_MYSQLI_API __declspec(dllexport) #define MYSQLI_LLU_SPEC "%I64u" #define MYSQLI_LL_SPEC "%I64d" #ifndef L64 #define L64(x) x##i64 #endif typedef __int64 my_longlong; #else # if defined(__GNUC__) && __GNUC__ >= 4 # define PHP_MYSQLI_API __attribute__ ((visibility("default"))) # else # define PHP_MYSQLI_API # endif /* we need this for PRIu64 and PRId64 */ #include #define MYSQLI_LLU_SPEC "%" PRIu64 #define MYSQLI_LL_SPEC "%" PRId64 #ifndef L64 #define L64(x) x##LL #endif typedef int64_t my_longlong; #endif #ifdef ZTS #include "TSRM.h" #endif extern zend_class_entry *mysqli_link_class_entry; extern zend_class_entry *mysqli_stmt_class_entry; extern zend_class_entry *mysqli_result_class_entry; extern zend_class_entry *mysqli_driver_class_entry; extern zend_class_entry *mysqli_warning_class_entry; extern zend_class_entry *mysqli_exception_class_entry; extern int php_le_pmysqli(void); extern void php_mysqli_dtor_p_elements(void *data); extern void php_mysqli_close(MY_MYSQL * mysql, int close_type, int resource_status); extern const zend_object_iterator_funcs php_mysqli_result_iterator_funcs; extern zend_object_iterator *php_mysqli_result_get_iterator(zend_class_entry *ce, zval *object, int by_ref); extern void php_mysqli_fetch_into_hash_aux(zval *return_value, MYSQL_RES * result, zend_long fetchtype); #define MYSQLI_DISABLE_MQ if (mysql->multi_query) { \ mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_OFF); \ mysql->multi_query = 0; \ } #define MYSQLI_ENABLE_MQ if (!mysql->multi_query) { \ mysql_set_server_option(mysql->mysql, MYSQL_OPTION_MULTI_STATEMENTS_ON); \ mysql->multi_query = 1; \ } #define REGISTER_MYSQLI_CLASS_ENTRY(name, mysqli_entry, class_functions) { \ zend_class_entry ce; \ INIT_CLASS_ENTRY(ce, name,class_functions); \ ce.create_object = mysqli_objects_new; \ mysqli_entry = zend_register_internal_class(&ce); \ } \ #define MYSQLI_REGISTER_RESOURCE_EX(__ptr, __zval) \ (Z_MYSQLI_P(__zval))->ptr = __ptr; #define MYSQLI_RETURN_RESOURCE(__ptr, __ce) \ RETVAL_OBJ(mysqli_objects_new(__ce)); \ MYSQLI_REGISTER_RESOURCE_EX(__ptr, return_value) #define MYSQLI_REGISTER_RESOURCE(__ptr, __ce) \ {\ zval *object = getThis(); \ if (!object || !instanceof_function(Z_OBJCE_P(object), mysqli_link_class_entry)) { \ object = return_value; \ ZVAL_OBJ(object, mysqli_objects_new(__ce)); \ } \ MYSQLI_REGISTER_RESOURCE_EX(__ptr, object)\ } #define MYSQLI_FETCH_RESOURCE(__ptr, __type, __id, __name, __check) \ { \ MYSQLI_RESOURCE *my_res; \ mysqli_object *intern = Z_MYSQLI_P(__id); \ if (!(my_res = (MYSQLI_RESOURCE *)intern->ptr)) {\ php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(intern->zo.ce->name));\ RETURN_FALSE;\ }\ __ptr = (__type)my_res->ptr; \ if (__check && my_res->status < __check) { \ php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", ZSTR_VAL(intern->zo.ce->name)); \ RETURN_FALSE;\ }\ } #define MYSQLI_FETCH_RESOURCE_BY_OBJ(__ptr, __type, __obj, __name, __check) \ { \ MYSQLI_RESOURCE *my_res; \ if (!(my_res = (MYSQLI_RESOURCE *)(__obj->ptr))) {\ php_error_docref(NULL, E_WARNING, "Couldn't fetch %s", ZSTR_VAL(intern->zo.ce->name));\ return;\ }\ __ptr = (__type)my_res->ptr; \ if (__check && my_res->status < __check) { \ php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", ZSTR_VAL(intern->zo.ce->name)); \ return;\ }\ } #define MYSQLI_FETCH_RESOURCE_CONN(__ptr, __id, __check) \ { \ MYSQLI_FETCH_RESOURCE((__ptr), MY_MYSQL *, (__id), "mysqli_link", (__check)); \ if (!(__ptr)->mysql) { \ mysqli_object *intern = Z_MYSQLI_P(__id); \ php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", ZSTR_VAL(intern->zo.ce->name)); \ RETURN_NULL(); \ } \ } #define MYSQLI_FETCH_RESOURCE_STMT(__ptr, __id, __check) \ { \ MYSQLI_FETCH_RESOURCE((__ptr), MY_STMT *, (__id), "mysqli_stmt", (__check)); \ if (!(__ptr)->stmt) { \ mysqli_object *intern = Z_MYSQLI_P(__id); \ php_error_docref(NULL, E_WARNING, "invalid object or resource %s\n", ZSTR_VAL(intern->zo.ce->name)); \ RETURN_NULL();\ } \ } #define MYSQLI_SET_STATUS(__id, __value) \ { \ mysqli_object *intern = Z_MYSQLI_P(__id); \ ((MYSQLI_RESOURCE *)intern->ptr)->status = __value; \ } \ #define MYSQLI_CLEAR_RESOURCE(__id) \ { \ mysqli_object *intern = Z_MYSQLI_P(__id); \ efree(intern->ptr); \ intern->ptr = NULL; \ } ZEND_BEGIN_MODULE_GLOBALS(mysqli) zend_long default_link; zend_long num_links; zend_long max_links; zend_long num_active_persistent; zend_long num_inactive_persistent; zend_long max_persistent; zend_long allow_persistent; zend_ulong default_port; char *default_host; char *default_user; char *default_socket; char *default_pw; zend_long reconnect; zend_long allow_local_infile; zend_long strict; zend_long error_no; char *error_msg; zend_long report_mode; HashTable *report_ht; zend_ulong multi_query; zend_ulong embedded; zend_bool rollback_on_cached_plink; ZEND_END_MODULE_GLOBALS(mysqli) #define MyG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mysqli, v) #if defined(ZTS) && defined(COMPILE_DL_MYSQLI) ZEND_TSRMLS_CACHE_EXTERN() #endif #define my_estrdup(x) (x) ? estrdup(x) : NULL #define my_efree(x) if (x) efree(x) ZEND_EXTERN_MODULE_GLOBALS(mysqli) #endif /* PHP_MYSQLI_STRUCTS.H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!2;ext/spl/spl_fixedarray.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Antony Dovgal | | Etienne Kneuss | +----------------------------------------------------------------------+ */ #ifndef SPL_FIXEDARRAY_H #define SPL_FIXEDARRAY_H extern PHPAPI zend_class_entry *spl_ce_SplFixedArray; PHP_MINIT_FUNCTION(spl_fixedarray); #endif /* SPL_FIXEDARRAY_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!eext/spl/spl_exceptions.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPL_EXCEPTIONS_H #define SPL_EXCEPTIONS_H #include "php.h" #include "php_spl.h" extern PHPAPI zend_class_entry *spl_ce_LogicException; extern PHPAPI zend_class_entry *spl_ce_BadFunctionCallException; extern PHPAPI zend_class_entry *spl_ce_BadMethodCallException; extern PHPAPI zend_class_entry *spl_ce_DomainException; extern PHPAPI zend_class_entry *spl_ce_InvalidArgumentException; extern PHPAPI zend_class_entry *spl_ce_LengthException; extern PHPAPI zend_class_entry *spl_ce_OutOfRangeException; extern PHPAPI zend_class_entry *spl_ce_RuntimeException; extern PHPAPI zend_class_entry *spl_ce_OutOfBoundsException; extern PHPAPI zend_class_entry *spl_ce_OverflowException; extern PHPAPI zend_class_entry *spl_ce_RangeException; extern PHPAPI zend_class_entry *spl_ce_UnderflowException; extern PHPAPI zend_class_entry *spl_ce_UnexpectedValueException; PHP_MINIT_FUNCTION(spl_exceptions); #endif /* SPL_EXCEPTIONS_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!bL66ext/spl/spl_iterators.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPL_ITERATORS_H #define SPL_ITERATORS_H #include "php.h" #include "php_spl.h" #if HAVE_PCRE || HAVE_BUNDLED_PCRE #include "ext/pcre/php_pcre.h" #endif #define spl_ce_Traversable zend_ce_traversable #define spl_ce_Iterator zend_ce_iterator #define spl_ce_Aggregate zend_ce_aggregate #define spl_ce_ArrayAccess zend_ce_arrayaccess #define spl_ce_Serializable zend_ce_serializable #define spl_ce_Countable zend_ce_countable extern PHPAPI zend_class_entry *spl_ce_RecursiveIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveIteratorIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveTreeIterator; extern PHPAPI zend_class_entry *spl_ce_FilterIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveFilterIterator; extern PHPAPI zend_class_entry *spl_ce_ParentIterator; extern PHPAPI zend_class_entry *spl_ce_SeekableIterator; extern PHPAPI zend_class_entry *spl_ce_LimitIterator; extern PHPAPI zend_class_entry *spl_ce_CachingIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveCachingIterator; extern PHPAPI zend_class_entry *spl_ce_OuterIterator; extern PHPAPI zend_class_entry *spl_ce_IteratorIterator; extern PHPAPI zend_class_entry *spl_ce_NoRewindIterator; extern PHPAPI zend_class_entry *spl_ce_InfiniteIterator; extern PHPAPI zend_class_entry *spl_ce_EmptyIterator; extern PHPAPI zend_class_entry *spl_ce_AppendIterator; extern PHPAPI zend_class_entry *spl_ce_RegexIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveRegexIterator; extern PHPAPI zend_class_entry *spl_ce_CallbackFilterIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveCallbackFilterIterator; PHP_MINIT_FUNCTION(spl_iterators); PHP_FUNCTION(iterator_to_array); PHP_FUNCTION(iterator_count); PHP_FUNCTION(iterator_apply); typedef enum { DIT_Default = 0, DIT_FilterIterator = DIT_Default, DIT_RecursiveFilterIterator = DIT_Default, DIT_ParentIterator = DIT_Default, DIT_LimitIterator, DIT_CachingIterator, DIT_RecursiveCachingIterator, DIT_IteratorIterator, DIT_NoRewindIterator, DIT_InfiniteIterator, DIT_AppendIterator, #if HAVE_PCRE || HAVE_BUNDLED_PCRE DIT_RegexIterator, DIT_RecursiveRegexIterator, #endif DIT_CallbackFilterIterator, DIT_RecursiveCallbackFilterIterator, DIT_Unknown = ~0 } dual_it_type; typedef enum { RIT_Default = 0, RIT_RecursiveIteratorIterator = RIT_Default, RIT_RecursiveTreeIterator, RIT_Unknow = ~0 } recursive_it_it_type; enum { /* public */ CIT_CALL_TOSTRING = 0x00000001, CIT_TOSTRING_USE_KEY = 0x00000002, CIT_TOSTRING_USE_CURRENT = 0x00000004, CIT_TOSTRING_USE_INNER = 0x00000008, CIT_CATCH_GET_CHILD = 0x00000010, CIT_FULL_CACHE = 0x00000100, CIT_PUBLIC = 0x0000FFFF, /* private */ CIT_VALID = 0x00010000, CIT_HAS_CHILDREN = 0x00020000 }; enum { /* public */ REGIT_USE_KEY = 0x00000001, REGIT_INVERTED = 0x00000002 }; typedef enum { REGIT_MODE_MATCH, REGIT_MODE_GET_MATCH, REGIT_MODE_ALL_MATCHES, REGIT_MODE_SPLIT, REGIT_MODE_REPLACE, REGIT_MODE_MAX } regex_mode; typedef struct _spl_cbfilter_it_intern { zend_fcall_info fci; zend_fcall_info_cache fcc; zend_object *object; } _spl_cbfilter_it_intern; typedef struct _spl_dual_it_object { struct { zval zobject; zend_class_entry *ce; zend_object *object; zend_object_iterator *iterator; } inner; struct { zval data; zval key; zend_long pos; } current; dual_it_type dit_type; union { struct { zend_long offset; zend_long count; } limit; struct { zend_long flags; /* CIT_* */ zval zstr; zval zchildren; zval zcache; } caching; struct { zval zarrayit; zend_object_iterator *iterator; } append; #if HAVE_PCRE || HAVE_BUNDLED_PCRE struct { zend_long flags; zend_long preg_flags; pcre_cache_entry *pce; zend_string *regex; regex_mode mode; int use_flags; } regex; #endif _spl_cbfilter_it_intern *cbfilter; } u; zend_object std; } spl_dual_it_object; static inline spl_dual_it_object *spl_dual_it_from_obj(zend_object *obj) /* {{{ */ { return (spl_dual_it_object*)((char*)(obj) - XtOffsetOf(spl_dual_it_object, std)); } /* }}} */ #define Z_SPLDUAL_IT_P(zv) spl_dual_it_from_obj(Z_OBJ_P((zv))) typedef int (*spl_iterator_apply_func_t)(zend_object_iterator *iter, void *puser); PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, void *puser); #endif /* SPL_ITERATORS_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!$hF ext/spl/php_spl.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef PHP_SPL_H #define PHP_SPL_H #include "php.h" #include #define PHP_SPL_VERSION PHP_VERSION extern zend_module_entry spl_module_entry; #define phpext_spl_ptr &spl_module_entry #ifdef PHP_WIN32 # ifdef SPL_EXPORTS # define SPL_API __declspec(dllexport) # elif defined(COMPILE_DL_SPL) # define SPL_API __declspec(dllimport) # else # define SPL_API /* nothing */ # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # define SPL_API __attribute__ ((visibility("default"))) #else # define SPL_API #endif #if defined(PHP_WIN32) && !defined(COMPILE_DL_SPL) #undef phpext_spl #define phpext_spl NULL #endif PHP_MINIT_FUNCTION(spl); PHP_MSHUTDOWN_FUNCTION(spl); PHP_RINIT_FUNCTION(spl); PHP_RSHUTDOWN_FUNCTION(spl); PHP_MINFO_FUNCTION(spl); ZEND_BEGIN_MODULE_GLOBALS(spl) zend_string *autoload_extensions; HashTable *autoload_functions; intptr_t hash_mask_handle; intptr_t hash_mask_handlers; int hash_mask_init; int autoload_running; ZEND_END_MODULE_GLOBALS(spl) ZEND_EXTERN_MODULE_GLOBALS(spl) #define SPL_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(spl, v) PHP_FUNCTION(spl_classes); PHP_FUNCTION(class_parents); PHP_FUNCTION(class_implements); PHP_FUNCTION(class_uses); PHPAPI zend_string *php_spl_object_hash(zval *obj); #endif /* PHP_SPL_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!(Daext/spl/spl_array.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPL_ARRAY_H #define SPL_ARRAY_H #include "php.h" #include "php_spl.h" #include "spl_iterators.h" extern PHPAPI zend_class_entry *spl_ce_ArrayObject; extern PHPAPI zend_class_entry *spl_ce_ArrayIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator; PHP_MINIT_FUNCTION(spl_array); extern void spl_array_iterator_append(zval *object, zval *append_value); extern void spl_array_iterator_key(zval *object, zval *return_value); #endif /* SPL_ARRAY_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!APttext/spl/spl_directory.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPL_DIRECTORY_H #define SPL_DIRECTORY_H #include "php.h" #include "php_spl.h" extern PHPAPI zend_class_entry *spl_ce_SplFileInfo; extern PHPAPI zend_class_entry *spl_ce_DirectoryIterator; extern PHPAPI zend_class_entry *spl_ce_FilesystemIterator; extern PHPAPI zend_class_entry *spl_ce_RecursiveDirectoryIterator; extern PHPAPI zend_class_entry *spl_ce_GlobIterator; extern PHPAPI zend_class_entry *spl_ce_SplFileObject; extern PHPAPI zend_class_entry *spl_ce_SplTempFileObject; PHP_MINIT_FUNCTION(spl_directory); typedef enum { SPL_FS_INFO, /* must be 0 */ SPL_FS_DIR, SPL_FS_FILE } SPL_FS_OBJ_TYPE; typedef struct _spl_filesystem_object spl_filesystem_object; typedef void (*spl_foreign_dtor_t)(spl_filesystem_object *object); typedef void (*spl_foreign_clone_t)(spl_filesystem_object *src, spl_filesystem_object *dst); PHPAPI char* spl_filesystem_object_get_path(spl_filesystem_object *intern, size_t *len); typedef struct _spl_other_handler { spl_foreign_dtor_t dtor; spl_foreign_clone_t clone; } spl_other_handler; /* define an overloaded iterator structure */ typedef struct { zend_object_iterator intern; zval current; void *object; } spl_filesystem_iterator; struct _spl_filesystem_object { void *oth; const spl_other_handler *oth_handler; char *_path; size_t _path_len; char *orig_path; char *file_name; size_t file_name_len; SPL_FS_OBJ_TYPE type; zend_long flags; zend_class_entry *file_class; zend_class_entry *info_class; union { struct { php_stream *dirp; php_stream_dirent entry; char *sub_path; size_t sub_path_len; int index; int is_recursive; zend_function *func_rewind; zend_function *func_next; zend_function *func_valid; } dir; struct { php_stream *stream; php_stream_context *context; zval *zcontext; char *open_mode; size_t open_mode_len; zval current_zval; char *current_line; size_t current_line_len; size_t max_line_len; zend_long current_line_num; zval zresource; zend_function *func_getCurr; char delimiter; char enclosure; char escape; } file; } u; zend_object std; }; static inline spl_filesystem_object *spl_filesystem_from_obj(zend_object *obj) /* {{{ */ { return (spl_filesystem_object*)((char*)(obj) - XtOffsetOf(spl_filesystem_object, std)); } /* }}} */ #define Z_SPLFILESYSTEM_P(zv) spl_filesystem_from_obj(Z_OBJ_P((zv))) static inline spl_filesystem_iterator* spl_filesystem_object_to_iterator(spl_filesystem_object *obj) { spl_filesystem_iterator *it; it = ecalloc(1, sizeof(spl_filesystem_iterator)); it->object = (void *)obj; zend_iterator_init(&it->intern); return it; } static inline spl_filesystem_object* spl_filesystem_iterator_to_object(spl_filesystem_iterator *it) { return (spl_filesystem_object*)it->object; } #define SPL_FILE_OBJECT_DROP_NEW_LINE 0x00000001 /* drop new lines */ #define SPL_FILE_OBJECT_READ_AHEAD 0x00000002 /* read on rewind/next */ #define SPL_FILE_OBJECT_SKIP_EMPTY 0x00000004 /* skip empty lines */ #define SPL_FILE_OBJECT_READ_CSV 0x00000008 /* read via fgetcsv */ #define SPL_FILE_OBJECT_MASK 0x0000000F /* read via fgetcsv */ #define SPL_FILE_DIR_CURRENT_AS_FILEINFO 0x00000000 /* make RecursiveDirectoryTree::current() return SplFileInfo */ #define SPL_FILE_DIR_CURRENT_AS_SELF 0x00000010 /* make RecursiveDirectoryTree::current() return getSelf() */ #define SPL_FILE_DIR_CURRENT_AS_PATHNAME 0x00000020 /* make RecursiveDirectoryTree::current() return getPathname() */ #define SPL_FILE_DIR_CURRENT_MODE_MASK 0x000000F0 /* mask RecursiveDirectoryTree::current() */ #define SPL_FILE_DIR_CURRENT(intern,mode) ((intern->flags&SPL_FILE_DIR_CURRENT_MODE_MASK)==mode) #define SPL_FILE_DIR_KEY_AS_PATHNAME 0x00000000 /* make RecursiveDirectoryTree::key() return getPathname() */ #define SPL_FILE_DIR_KEY_AS_FILENAME 0x00000100 /* make RecursiveDirectoryTree::key() return getFilename() */ #define SPL_FILE_DIR_FOLLOW_SYMLINKS 0x00000200 /* make RecursiveDirectoryTree::hasChildren() follow symlinks */ #define SPL_FILE_DIR_KEY_MODE_MASK 0x00000F00 /* mask RecursiveDirectoryTree::key() */ #define SPL_FILE_DIR_KEY(intern,mode) ((intern->flags&SPL_FILE_DIR_KEY_MODE_MASK)==mode) #define SPL_FILE_DIR_SKIPDOTS 0x00001000 /* Tells whether it should skip dots or not */ #define SPL_FILE_DIR_UNIXPATHS 0x00002000 /* Whether to unixify path separators */ #define SPL_FILE_DIR_OTHERS_MASK 0x00003000 /* mask used for get/setFlags */ #endif /* SPL_DIRECTORY_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!p1p$$ext/spl/spl_functions.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef PHP_FUNCTIONS_H #define PHP_FUNCTIONS_H #include "php.h" typedef zend_object* (*create_object_func_t)(zend_class_entry *class_type); #define REGISTER_SPL_STD_CLASS(class_name, obj_ctor) \ spl_register_std_class(&spl_ce_ ## class_name, # class_name, obj_ctor, NULL); #define REGISTER_SPL_STD_CLASS_EX(class_name, obj_ctor, funcs) \ spl_register_std_class(&spl_ce_ ## class_name, # class_name, obj_ctor, funcs); #define REGISTER_SPL_SUB_CLASS_EX(class_name, parent_class_name, obj_ctor, funcs) \ spl_register_sub_class(&spl_ce_ ## class_name, spl_ce_ ## parent_class_name, # class_name, obj_ctor, funcs); #define REGISTER_SPL_INTERFACE(class_name) \ spl_register_interface(&spl_ce_ ## class_name, # class_name, spl_funcs_ ## class_name); #define REGISTER_SPL_IMPLEMENTS(class_name, interface_name) \ zend_class_implements(spl_ce_ ## class_name, 1, spl_ce_ ## interface_name); #define REGISTER_SPL_ITERATOR(class_name) \ zend_class_implements(spl_ce_ ## class_name, 1, zend_ce_iterator); #define REGISTER_SPL_PROPERTY(class_name, prop_name, prop_flags) \ spl_register_property(spl_ce_ ## class_name, prop_name, sizeof(prop_name)-1, prop_flags); #define REGISTER_SPL_CLASS_CONST_LONG(class_name, const_name, value) \ zend_declare_class_constant_long(spl_ce_ ## class_name, const_name, sizeof(const_name)-1, (zend_long)value); void spl_register_std_class(zend_class_entry ** ppce, char * class_name, create_object_func_t ctor, const zend_function_entry * function_list); void spl_register_sub_class(zend_class_entry ** ppce, zend_class_entry * parent_ce, char * class_name, create_object_func_t ctor, const zend_function_entry * function_list); void spl_register_interface(zend_class_entry ** ppce, char * class_name, const zend_function_entry *functions); void spl_register_property( zend_class_entry * class_entry, char *prop_name, int prop_name_len, int prop_flags); /* sub: whether to allow subclasses/interfaces allow = 0: allow all classes and interfaces allow > 0: allow all that match and mask ce_flags allow < 0: disallow all that match and mask ce_flags */ void spl_add_class_name(zval * list, zend_class_entry * pce, int allow, int ce_flags); void spl_add_interfaces(zval * list, zend_class_entry * pce, int allow, int ce_flags); void spl_add_traits(zval * list, zend_class_entry * pce, int allow, int ce_flags); int spl_add_classes(zend_class_entry *pce, zval *list, int sub, int allow, int ce_flags); /* caller must efree(return) */ zend_string *spl_gen_private_prop_name(zend_class_entry *ce, char *prop_name, int prop_len); #define SPL_ME(class_name, function_name, arg_info, flags) \ PHP_ME( spl_ ## class_name, function_name, arg_info, flags) #define SPL_ABSTRACT_ME(class_name, function_name, arg_info) \ ZEND_ABSTRACT_ME( spl_ ## class_name, function_name, arg_info) #define SPL_METHOD(class_name, function_name) \ PHP_METHOD(spl_ ## class_name, function_name) #define SPL_MA(class_name, function_name, alias_class, alias_function, arg_info, flags) \ PHP_MALIAS(spl_ ## alias_class, function_name, alias_function, arg_info, flags) #endif /* PHP_FUNCTIONS_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!"A}HHext/spl/spl_heap.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Etienne Kneuss | +----------------------------------------------------------------------+ */ #ifndef SPL_HEAP_H #define SPL_HEAP_H #include "php.h" #include "php_spl.h" extern PHPAPI zend_class_entry *spl_ce_SplHeap; extern PHPAPI zend_class_entry *spl_ce_SplMinHeap; extern PHPAPI zend_class_entry *spl_ce_SplMaxHeap; extern PHPAPI zend_class_entry *spl_ce_SplPriorityQueue; PHP_MINIT_FUNCTION(spl_heap); #endif /* SPL_HEAP_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!CgE E ext/spl/spl_engine.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPL_ENGINE_H #define SPL_ENGINE_H #include "php.h" #include "php_spl.h" #include "zend_interfaces.h" PHPAPI void spl_instantiate(zend_class_entry *pce, zval *object); PHPAPI zend_long spl_offset_convert_to_long(zval *offset); /* {{{ spl_instantiate_arg_ex1 */ static inline int spl_instantiate_arg_ex1(zend_class_entry *pce, zval *retval, zval *arg1) { zend_function *func = pce->constructor; spl_instantiate(pce, retval); zend_call_method(retval, pce, &func, ZSTR_VAL(func->common.function_name), ZSTR_LEN(func->common.function_name), NULL, 1, arg1, NULL); return 0; } /* }}} */ /* {{{ spl_instantiate_arg_ex2 */ static inline int spl_instantiate_arg_ex2(zend_class_entry *pce, zval *retval, zval *arg1, zval *arg2) { zend_function *func = pce->constructor; spl_instantiate(pce, retval); zend_call_method(retval, pce, &func, ZSTR_VAL(func->common.function_name), ZSTR_LEN(func->common.function_name), NULL, 2, arg1, arg2); return 0; } /* }}} */ /* {{{ spl_instantiate_arg_n */ static inline void spl_instantiate_arg_n(zend_class_entry *pce, zval *retval, int argc, zval *argv) { zend_function *func = pce->constructor; zend_fcall_info fci; zend_fcall_info_cache fcc; zval dummy; spl_instantiate(pce, retval); fci.size = sizeof(zend_fcall_info); ZVAL_STR(&fci.function_name, func->common.function_name); fci.object = Z_OBJ_P(retval); fci.retval = &dummy; fci.param_count = argc; fci.params = argv; fci.no_separation = 1; fcc.function_handler = func; fcc.called_scope = pce; fcc.object = Z_OBJ_P(retval); zend_call_function(&fci, &fcc); } /* }}} */ #endif /* SPL_ENGINE_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!8aaext/spl/spl_observer.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPL_OBSERVER_H #define SPL_OBSERVER_H #include "php.h" #include "php_spl.h" extern PHPAPI zend_class_entry *spl_ce_SplObserver; extern PHPAPI zend_class_entry *spl_ce_SplSubject; extern PHPAPI zend_class_entry *spl_ce_SplObjectStorage; extern PHPAPI zend_class_entry *spl_ce_MultipleIterator; PHP_MINIT_FUNCTION(spl_observer); #endif /* SPL_OBSERVER_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!}Iext/spl/spl_dllist.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Etienne Kneuss | +----------------------------------------------------------------------+ */ #ifndef SPL_DLLIST_H #define SPL_DLLIST_H #include "php.h" #include "php_spl.h" extern PHPAPI zend_class_entry *spl_ce_SplDoublyLinkedList; extern PHPAPI zend_class_entry *spl_ce_SplQueue; extern PHPAPI zend_class_entry *spl_ce_SplStack; PHP_MINIT_FUNCTION(spl_dllist); #endif /* SPL_DLLIST_H */ /* * Local Variables: * c-basic-offset: 4 * tab-width: 4 * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!NHext/date/php_date.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Derick Rethans | +----------------------------------------------------------------------+ */ #ifndef PHP_DATE_H #define PHP_DATE_H #include "lib/timelib.h" #include "Zend/zend_hash.h" #include "php_version.h" #define PHP_DATE_VERSION PHP_VERSION extern zend_module_entry date_module_entry; #define phpext_date_ptr &date_module_entry PHP_FUNCTION(date); PHP_FUNCTION(idate); PHP_FUNCTION(gmdate); PHP_FUNCTION(strtotime); PHP_FUNCTION(mktime); PHP_FUNCTION(gmmktime); PHP_FUNCTION(checkdate); #ifdef HAVE_STRFTIME PHP_FUNCTION(strftime); PHP_FUNCTION(gmstrftime); #endif PHP_FUNCTION(time); PHP_FUNCTION(localtime); PHP_FUNCTION(getdate); /* Advanced Interface */ PHP_METHOD(DateTime, __construct); PHP_METHOD(DateTime, __wakeup); PHP_METHOD(DateTime, __set_state); PHP_METHOD(DateTime, createFromImmutable); PHP_FUNCTION(date_create); PHP_FUNCTION(date_create_immutable); PHP_FUNCTION(date_create_from_format); PHP_FUNCTION(date_create_immutable_from_format); PHP_FUNCTION(date_parse); PHP_FUNCTION(date_parse_from_format); PHP_FUNCTION(date_get_last_errors); PHP_FUNCTION(date_format); PHP_FUNCTION(date_modify); PHP_FUNCTION(date_add); PHP_FUNCTION(date_sub); PHP_FUNCTION(date_timezone_get); PHP_FUNCTION(date_timezone_set); PHP_FUNCTION(date_offset_get); PHP_FUNCTION(date_diff); PHP_FUNCTION(date_time_set); PHP_FUNCTION(date_date_set); PHP_FUNCTION(date_isodate_set); PHP_FUNCTION(date_timestamp_set); PHP_FUNCTION(date_timestamp_get); PHP_METHOD(DateTimeImmutable, __construct); PHP_METHOD(DateTimeImmutable, __set_state); PHP_METHOD(DateTimeImmutable, modify); PHP_METHOD(DateTimeImmutable, add); PHP_METHOD(DateTimeImmutable, sub); PHP_METHOD(DateTimeImmutable, setTimezone); PHP_METHOD(DateTimeImmutable, setTime); PHP_METHOD(DateTimeImmutable, setDate); PHP_METHOD(DateTimeImmutable, setISODate); PHP_METHOD(DateTimeImmutable, setTimestamp); PHP_METHOD(DateTimeImmutable, createFromMutable); PHP_METHOD(DateTimeZone, __construct); PHP_METHOD(DateTimeZone, __wakeup); PHP_METHOD(DateTimeZone, __set_state); PHP_FUNCTION(timezone_open); PHP_FUNCTION(timezone_name_get); PHP_FUNCTION(timezone_name_from_abbr); PHP_FUNCTION(timezone_offset_get); PHP_FUNCTION(timezone_transitions_get); PHP_FUNCTION(timezone_location_get); PHP_FUNCTION(timezone_identifiers_list); PHP_FUNCTION(timezone_abbreviations_list); PHP_FUNCTION(timezone_version_get); PHP_METHOD(DateInterval, __construct); PHP_METHOD(DateInterval, __wakeup); PHP_METHOD(DateInterval, __set_state); PHP_FUNCTION(date_interval_format); PHP_FUNCTION(date_interval_create_from_date_string); PHP_METHOD(DatePeriod, __construct); PHP_METHOD(DatePeriod, __wakeup); PHP_METHOD(DatePeriod, __set_state); PHP_METHOD(DatePeriod, getStartDate); PHP_METHOD(DatePeriod, getEndDate); PHP_METHOD(DatePeriod, getDateInterval); PHP_METHOD(DatePeriod, getRecurrences); /* Options and Configuration */ PHP_FUNCTION(date_default_timezone_set); PHP_FUNCTION(date_default_timezone_get); /* Astro functions */ PHP_FUNCTION(date_sunrise); PHP_FUNCTION(date_sunset); PHP_FUNCTION(date_sun_info); PHP_RINIT_FUNCTION(date); PHP_RSHUTDOWN_FUNCTION(date); PHP_MINIT_FUNCTION(date); PHP_MSHUTDOWN_FUNCTION(date); PHP_MINFO_FUNCTION(date); typedef struct _php_date_obj php_date_obj; typedef struct _php_timezone_obj php_timezone_obj; typedef struct _php_interval_obj php_interval_obj; typedef struct _php_period_obj php_period_obj; struct _php_date_obj { timelib_time *time; HashTable *props; zend_object std; }; static inline php_date_obj *php_date_obj_from_obj(zend_object *obj) { return (php_date_obj*)((char*)(obj) - XtOffsetOf(php_date_obj, std)); } #define Z_PHPDATE_P(zv) php_date_obj_from_obj(Z_OBJ_P((zv))) struct _php_timezone_obj { int initialized; int type; union { timelib_tzinfo *tz; /* TIMELIB_ZONETYPE_ID */ timelib_sll utc_offset; /* TIMELIB_ZONETYPE_OFFSET */ timelib_abbr_info z; /* TIMELIB_ZONETYPE_ABBR */ } tzi; HashTable *props; zend_object std; }; static inline php_timezone_obj *php_timezone_obj_from_obj(zend_object *obj) { return (php_timezone_obj*)((char*)(obj) - XtOffsetOf(php_timezone_obj, std)); } #define Z_PHPTIMEZONE_P(zv) php_timezone_obj_from_obj(Z_OBJ_P((zv))) struct _php_interval_obj { timelib_rel_time *diff; HashTable *props; int initialized; zend_object std; }; static inline php_interval_obj *php_interval_obj_from_obj(zend_object *obj) { return (php_interval_obj*)((char*)(obj) - XtOffsetOf(php_interval_obj, std)); } #define Z_PHPINTERVAL_P(zv) php_interval_obj_from_obj(Z_OBJ_P((zv))) struct _php_period_obj { timelib_time *start; zend_class_entry *start_ce; timelib_time *current; timelib_time *end; timelib_rel_time *interval; int recurrences; int initialized; int include_start_date; zend_object std; }; static inline php_period_obj *php_period_obj_from_obj(zend_object *obj) { return (php_period_obj*)((char*)(obj) - XtOffsetOf(php_period_obj, std)); } #define Z_PHPPERIOD_P(zv) php_period_obj_from_obj(Z_OBJ_P((zv))) ZEND_BEGIN_MODULE_GLOBALS(date) char *default_timezone; char *timezone; HashTable *tzcache; timelib_error_container *last_errors; int timezone_valid; ZEND_END_MODULE_GLOBALS(date) #define DATEG(v) ZEND_MODULE_GLOBALS_ACCESSOR(date, v) PHPAPI time_t php_time(); /* Backwards compatibility wrapper */ PHPAPI zend_long php_parse_date(char *string, zend_long *now); PHPAPI void php_mktime(INTERNAL_FUNCTION_PARAMETERS, int gmt); PHPAPI int php_idate(char format, time_t ts, int localtime); #if HAVE_STRFTIME #define _php_strftime php_strftime PHPAPI void php_strftime(INTERNAL_FUNCTION_PARAMETERS, int gm); #endif PHPAPI zend_string *php_format_date(char *format, size_t format_len, time_t ts, int localtime); /* Mechanism to set new TZ database */ PHPAPI void php_date_set_tzdb(timelib_tzdb *tzdb); PHPAPI timelib_tzinfo *get_timezone_info(void); /* Grabbing CE's so that other exts can use the date objects too */ PHPAPI zend_class_entry *php_date_get_date_ce(void); PHPAPI zend_class_entry *php_date_get_immutable_ce(void); PHPAPI zend_class_entry *php_date_get_interface_ce(void); PHPAPI zend_class_entry *php_date_get_timezone_ce(void); PHPAPI zend_class_entry *php_date_get_interval_ce(void); PHPAPI zend_class_entry *php_date_get_period_ce(void); /* Functions for creating DateTime objects, and initializing them from a string */ PHPAPI zval *php_date_instantiate(zend_class_entry *pce, zval *object); PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, size_t time_str_len, char *format, zval *timezone_object, int ctor); #endif /* PHP_DATE_H */ PK!-)ext/date/lib/timelib.hnu[/* * The MIT License (MIT) * * Copyright (c) 2015-2019 Derick Rethans * Copyright (c) 2018 MongoDB, Inc. * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #ifndef __TIMELIB_H__ #define __TIMELIB_H__ #ifdef HAVE_TIMELIB_CONFIG_H # include "timelib_config.h" #endif #include #include #include #include # ifndef HAVE_INT32_T # if SIZEOF_INT == 4 typedef int int32_t; # elif SIZEOF_LONG == 4 typedef long int int32_t; # endif # endif # ifndef HAVE_UINT32_T # if SIZEOF_INT == 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG == 4 typedef unsigned long int uint32_t; # endif # endif #ifdef _WIN32 # if _MSC_VER >= 1600 # include # endif # ifndef SIZEOF_INT # define SIZEOF_INT 4 # endif # ifndef SIZEOF_LONG # define SIZEOF_LONG 4 # endif # ifndef int32_t typedef __int32 int32_t; # endif # ifndef uint32_t typedef unsigned __int32 uint32_t; # endif # ifndef int64_t typedef __int64 int64_t; # endif # ifndef uint64_t typedef unsigned __int64 uint64_t; # endif # ifndef PRId32 # define PRId32 "I32d" # endif # ifndef PRIu32 # define PRIu32 "I32u" # endif # ifndef PRId64 # define PRId64 "I64d" # endif # ifndef PRIu64 # define PRIu64 "I64u" # endif # ifndef INT32_MAX #define INT32_MAX _I32_MAX # endif # ifndef INT32_MIN #define INT32_MIN ((int32_t)_I32_MIN) # endif # ifndef UINT32_MAX #define UINT32_MAX _UI32_MAX # endif # ifndef INT64_MIN #define INT64_MIN ((int64_t)_I64_MIN) # endif # ifndef INT64_MAX #define INT64_MAX _I64_MAX # endif # ifndef UINT64_MAX #define UINT64_MAX _UI64_MAX # endif #endif #if (defined(__x86_64__) || defined(__LP64__) || defined(_LP64) || defined(_WIN64)) && !defined(TIMELIB_FORCE_LONG32) typedef int64_t timelib_long; typedef uint64_t timelib_ulong; # define TIMELIB_LONG_MAX INT64_MAX # define TIMELIB_LONG_MIN INT64_MIN # define TIMELIB_ULONG_MAX UINT64_MAX # define TIMELIB_LONG_FMT "%" PRId64 # define TIMELIB_ULONG_FMT "%" PRIu64 #else typedef int32_t timelib_long; typedef uint32_t timelib_ulong; # define TIMELIB_LONG_MAX INT32_MAX # define TIMELIB_LONG_MIN INT32_MIN # define TIMELIB_ULONG_MAX UINT32_MAX # define TIMELIB_LONG_FMT "%" PRId32 # define TIMELIB_ULONG_FMT "%" PRIu32 #endif #if defined(_MSC_VER) typedef uint64_t timelib_ull; typedef int64_t timelib_sll; # define TIMELIB_LL_CONST(n) n ## i64 #else typedef unsigned long long timelib_ull; typedef signed long long timelib_sll; # define TIMELIB_LL_CONST(n) n ## ll #endif typedef struct _ttinfo ttinfo; typedef struct _tlinfo tlinfo; typedef struct _tlocinfo { char country_code[3]; double latitude; double longitude; char *comments; } tlocinfo; typedef struct _timelib_tzinfo { char *name; struct { uint32_t ttisgmtcnt; uint32_t ttisstdcnt; uint32_t leapcnt; uint32_t timecnt; uint32_t typecnt; uint32_t charcnt; } _bit32; struct { uint64_t ttisgmtcnt; uint64_t ttisstdcnt; uint64_t leapcnt; uint64_t timecnt; uint64_t typecnt; uint64_t charcnt; } bit64; int64_t *trans; unsigned char *trans_idx; ttinfo *type; char *timezone_abbr; tlinfo *leap_times; unsigned char bc; tlocinfo location; } timelib_tzinfo; typedef struct _timelib_rel_time { timelib_sll y, m, d; /* Years, Months and Days */ timelib_sll h, i, s; /* Hours, mInutes and Seconds */ timelib_sll us; /* Microseconds */ int weekday; /* Stores the day in 'next monday' */ int weekday_behavior; /* 0: the current day should *not* be counted when advancing forwards; 1: the current day *should* be counted */ int first_last_day_of; int invert; /* Whether the difference should be inverted */ timelib_sll days; /* Contains the number of *days*, instead of Y-M-D differences */ struct { unsigned int type; timelib_sll amount; } special; unsigned int have_weekday_relative, have_special_relative; } timelib_rel_time; typedef struct _timelib_time_offset { int32_t offset; unsigned int leap_secs; unsigned int is_dst; char *abbr; timelib_sll transition_time; } timelib_time_offset; typedef struct _timelib_time { timelib_sll y, m, d; /* Year, Month, Day */ timelib_sll h, i, s; /* Hour, mInute, Second */ timelib_sll us; /* Microseconds */ int z; /* UTC offset in seconds */ char *tz_abbr; /* Timezone abbreviation (display only) */ timelib_tzinfo *tz_info; /* Timezone structure */ signed int dst; /* Flag if we were parsing a DST zone */ timelib_rel_time relative; timelib_sll sse; /* Seconds since epoch */ unsigned int have_time, have_date, have_zone, have_relative, have_weeknr_day; unsigned int sse_uptodate; /* !0 if the sse member is up to date with the date/time members */ unsigned int tim_uptodate; /* !0 if the date/time members are up to date with the sse member */ unsigned int is_localtime; /* 1 if the current struct represents localtime, 0 if it is in GMT */ unsigned int zone_type; /* 1 time offset, * 3 TimeZone identifier, * 2 TimeZone abbreviation */ } timelib_time; typedef struct _timelib_abbr_info { timelib_sll utc_offset; char *abbr; int dst; } timelib_abbr_info; #define TIMELIB_WARN_MASK 0x1ff #define TIMELIB_ERR_MASK 0x2ff #define TIMELIB_WARN_DOUBLE_TZ 0x101 #define TIMELIB_WARN_INVALID_TIME 0x102 #define TIMELIB_WARN_INVALID_DATE 0x103 #define TIMELIB_WARN_TRAILING_DATA 0x11a #define TIMELIB_ERR_DOUBLE_TZ 0x201 #define TIMELIB_ERR_TZID_NOT_FOUND 0x202 #define TIMELIB_ERR_DOUBLE_TIME 0x203 #define TIMELIB_ERR_DOUBLE_DATE 0x204 #define TIMELIB_ERR_UNEXPECTED_CHARACTER 0x205 #define TIMELIB_ERR_EMPTY_STRING 0x206 #define TIMELIB_ERR_UNEXPECTED_DATA 0x207 #define TIMELIB_ERR_NO_TEXTUAL_DAY 0x208 #define TIMELIB_ERR_NO_TWO_DIGIT_DAY 0x209 #define TIMELIB_ERR_NO_THREE_DIGIT_DAY_OF_YEAR 0x20a #define TIMELIB_ERR_NO_TWO_DIGIT_MONTH 0x20b #define TIMELIB_ERR_NO_TEXTUAL_MONTH 0x20c #define TIMELIB_ERR_NO_TWO_DIGIT_YEAR 0x20d #define TIMELIB_ERR_NO_FOUR_DIGIT_YEAR 0x20e #define TIMELIB_ERR_NO_TWO_DIGIT_HOUR 0x20f #define TIMELIB_ERR_HOUR_LARGER_THAN_12 0x210 #define TIMELIB_ERR_MERIDIAN_BEFORE_HOUR 0x211 #define TIMELIB_ERR_NO_MERIDIAN 0x212 #define TIMELIB_ERR_NO_TWO_DIGIT_MINUTE 0x213 #define TIMELIB_ERR_NO_TWO_DIGIT_SECOND 0x214 #define TIMELIB_ERR_NO_SIX_DIGIT_MICROSECOND 0x215 #define TIMELIB_ERR_NO_SEP_SYMBOL 0x216 #define TIMELIB_ERR_EXPECTED_ESCAPE_CHAR 0x217 #define TIMELIB_ERR_NO_ESCAPED_CHAR 0x218 #define TIMELIB_ERR_WRONG_FORMAT_SEP 0x219 #define TIMELIB_ERR_TRAILING_DATA 0x21a #define TIMELIB_ERR_DATA_MISSING 0x21b #define TIMELIB_ERR_NO_THREE_DIGIT_MILLISECOND 0x21c #define TIMELIB_ERR_NO_FOUR_DIGIT_YEAR_ISO 0x21d #define TIMELIB_ERR_NO_TWO_DIGIT_WEEK 0x21e #define TIMELIB_ERR_INVALID_WEEK 0x21f #define TIMELIB_ERR_NO_DAY_OF_WEEK 0x220 #define TIMELIB_ERR_INVALID_DAY_OF_WEEK 0x221 #define TIMELIB_ERR_INVALID_SPECIFIER 0x222 #define TIMELIB_ERR_INVALID_TZ_OFFSET 0x223 #define TIMELIB_ERR_FORMAT_LITERAL_MISMATCH 0x224 #define TIMELIB_ERR_MIX_ISO_WITH_NATURAL 0x225 #define TIMELIB_ZONETYPE_OFFSET 1 #define TIMELIB_ZONETYPE_ABBR 2 #define TIMELIB_ZONETYPE_ID 3 typedef struct _timelib_error_message { int error_code; int position; char character; char *message; } timelib_error_message; typedef struct _timelib_error_container { timelib_error_message *error_messages; timelib_error_message *warning_messages; int error_count; int warning_count; } timelib_error_container; typedef struct _timelib_tz_lookup_table { char *name; int type; float gmtoffset; char *full_tz_name; } timelib_tz_lookup_table; typedef struct _timelib_tzdb_index_entry { char *id; unsigned int pos; } timelib_tzdb_index_entry; typedef struct _timelib_tzdb { char *version; int index_size; const timelib_tzdb_index_entry *index; const unsigned char *data; } timelib_tzdb; #ifndef timelib_malloc # define timelib_malloc malloc # define timelib_realloc realloc # define timelib_calloc calloc # define timelib_strdup strdup # define timelib_free free #endif #define TIMELIB_VERSION 201804 #define TIMELIB_EXTENDED_VERSION 20180401 #define TIMELIB_ASCII_VERSION "2018.04" #define TIMELIB_NONE 0x00 #define TIMELIB_OVERRIDE_TIME 0x01 #define TIMELIB_NO_CLONE 0x02 #define TIMELIB_UNSET -99999 /* An entry for each of these error codes is also in the * timelib_error_messages array in timelib.c */ #define TIMELIB_ERROR_NO_ERROR 0x00 #define TIMELIB_ERROR_CANNOT_ALLOCATE 0x01 #define TIMELIB_ERROR_CORRUPT_TRANSITIONS_DONT_INCREASE 0x02 #define TIMELIB_ERROR_CORRUPT_NO_64BIT_PREAMBLE 0x03 #define TIMELIB_ERROR_CORRUPT_NO_ABBREVIATION 0x04 #define TIMELIB_ERROR_UNSUPPORTED_VERSION 0x05 #define TIMELIB_ERROR_NO_SUCH_TIMEZONE 0x06 #ifdef __cplusplus extern "C" { #endif typedef enum _timelib_format_specifier_code { TIMELIB_FORMAT_ALLOW_EXTRA_CHARACTERS = 0, TIMELIB_FORMAT_ANY_SEPARATOR, TIMELIB_FORMAT_DAY_TWO_DIGIT, TIMELIB_FORMAT_DAY_TWO_DIGIT_PADDED, TIMELIB_FORMAT_DAY_OF_WEEK_ISO, TIMELIB_FORMAT_DAY_OF_WEEK, TIMELIB_FORMAT_DAY_OF_YEAR, TIMELIB_FORMAT_DAY_SUFFIX, TIMELIB_FORMAT_END, TIMELIB_FORMAT_EPOCH_SECONDS, TIMELIB_FORMAT_ESCAPE, TIMELIB_FORMAT_HOUR_TWO_DIGIT_12_MAX, TIMELIB_FORMAT_HOUR_TWO_DIGIT_12_MAX_PADDED, TIMELIB_FORMAT_HOUR_TWO_DIGIT_24_MAX, TIMELIB_FORMAT_HOUR_TWO_DIGIT_24_MAX_PADDED, TIMELIB_FORMAT_LITERAL, TIMELIB_FORMAT_MERIDIAN, TIMELIB_FORMAT_MICROSECOND_SIX_DIGIT, TIMELIB_FORMAT_MILLISECOND_THREE_DIGIT, TIMELIB_FORMAT_MINUTE_TWO_DIGIT, TIMELIB_FORMAT_MONTH_TWO_DIGIT, TIMELIB_FORMAT_MONTH_TWO_DIGIT_PADDED, TIMELIB_FORMAT_RANDOM_CHAR, TIMELIB_FORMAT_RESET_ALL, TIMELIB_FORMAT_RESET_ALL_WHEN_NOT_SET, TIMELIB_FORMAT_SECOND_TWO_DIGIT, TIMELIB_FORMAT_SEPARATOR, TIMELIB_FORMAT_SKIP_TO_SEPARATOR, TIMELIB_FORMAT_TEXTUAL_DAY_3_LETTER, TIMELIB_FORMAT_TEXTUAL_DAY_FULL, TIMELIB_FORMAT_TEXTUAL_MONTH_3_LETTER, TIMELIB_FORMAT_TEXTUAL_MONTH_FULL, TIMELIB_FORMAT_TIMEZONE_OFFSET, TIMELIB_FORMAT_TIMEZONE_OFFSET_MINUTES, TIMELIB_FORMAT_WEEK_OF_YEAR_ISO, TIMELIB_FORMAT_WEEK_OF_YEAR, TIMELIB_FORMAT_WHITESPACE, TIMELIB_FORMAT_YEAR_TWO_DIGIT, TIMELIB_FORMAT_YEAR_FOUR_DIGIT, TIMELIB_FORMAT_YEAR_ISO } timelib_format_specifier_code; typedef struct _timelib_format_specifier { char specifier; timelib_format_specifier_code code; } timelib_format_specifier; typedef struct _timelib_format_config { const timelib_format_specifier *format_map; /* Format speciifiers must be preceded by 'prefix_char' if not '\0'. */ char prefix_char; } timelib_format_config; /* Function pointers */ typedef timelib_tzinfo* (*timelib_tz_get_wrapper)(char *tzname, const timelib_tzdb *tzdb, int *error_code); /* From dow.c */ /* Calculates the day of the week from y, m, and d. 0=Sunday..6=Saturday */ timelib_sll timelib_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); /* Calculates the day of the ISO week from y, m, and d. 1=Monday, 7=Sunday */ timelib_sll timelib_iso_day_of_week(timelib_sll y, timelib_sll m, timelib_sll d); /* Calculates the day of the year according to y-m-d. 0=Jan 1st..364/365=Dec * 31st */ timelib_sll timelib_day_of_year(timelib_sll y, timelib_sll m, timelib_sll d); /* Calculates the day of the year according to y-w-dow. 0..364/365 */ timelib_sll timelib_daynr_from_weeknr(timelib_sll iy, timelib_sll iw, timelib_sll id); /* Calculates the number of days in month m for year y. 28..31 */ timelib_sll timelib_days_in_month(timelib_sll y, timelib_sll m); /* Calculates the ISO year and week from y, m, and d, into iw and iy */ void timelib_isoweek_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iw, timelib_sll *iy); /* Calculates the ISO year, week, and day of week from y, m, and d, into iy, * iw, and id */ void timelib_isodate_from_date(timelib_sll y, timelib_sll m, timelib_sll d, timelib_sll *iy, timelib_sll *iw, timelib_sll *id); /* Calculates the year, month, and day from iy, iw, and iw, into y, m, and d */ void timelib_date_from_isodate(timelib_sll iy, timelib_sll iw, timelib_sll id, timelib_sll *y, timelib_sll *m, timelib_sll *d); /* Returns true if h, i and s fit in the range 00:00:00..23:59:59, false * otherwise */ int timelib_valid_time(timelib_sll h, timelib_sll i, timelib_sll s); /* Returns true if m fits in the range 1..12, and d fits in the range * 1.. for year y */ int timelib_valid_date(timelib_sll y, timelib_sll m, timelib_sll d); /* From parse_date.re */ /* Parses the date/time string in 's' with length 'len' into the constituent * parts of timelib_time*. * * Depending on the contents of the string 's', not all elements might be * filled. You can check whether a specific element has been parsed by * comparing with the TIMELIB_UNSET define. * * If errors occur, this function keeps already parsed elements in the * returned timelib_time* value. * * If the **errors points to a timelib_error_container variable, warnings * and errors will be recorded. You are responsible for freeing the stored * information with timelib_error_container_dtor(). To see whether errors have * occurred, inspect errors->errors_count. To see whether warnings have occurred, * inspect errors->warnings_count. * * The returned timelib_time* value is dynamically allocated and should be * freed with timelib_time_dtor(). */ timelib_time *timelib_strtotime(char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper); /* Parses the date/time string in 's' with length 'len' into the constituent * parts of timelib_time* according to the format in 'format'. * * Depending on the contents of the string 's', not all elements might be * filled. You can check whether a specific element has been parsed by * comparing with the TIMELIB_UNSET define. * * If errors occur, this function keeps already parsed elements in the * returned timelib_time* value. * * If the **errors points to a timelib_error_container variable, warnings * and errors will be recorded. You are responsible for freeing the stored * information with timelib_error_container_dtor(). To see whether errors have * occurred, inspect errors->errors_count. To see whether warnings have occurred, * inspect errors->warnings_count. * * The returned timelib_time* value is dynamically allocated and should be * freed with timelib_time_dtor(). */ timelib_time *timelib_parse_from_format(char *format, char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper); /* Parses the date/time string in 's' with length 'len' into the constituent * parts of timelib_time* according to the format in 'format' with format * specifier configuration 'format_config'. * * 'format_map' is an array of pairs, with the first element being the format * specifier as a character and the second element corresponds to the * representation of the specifier from the enum list * 'timelib_format_specifier_code'. * * Note: 'format_map' must be terminated with specifier '\0' to indicate to the * parser that there are no more format specifiers in the list. */ timelib_time *timelib_parse_from_format_with_map(char *format, char *s, size_t len, timelib_error_container **errors, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_get_wrapper, const timelib_format_config* format_config); /* Fills the gaps in the parsed timelib_time with information from the reference date/time in 'now' * * If any of the 'parsed' y, m, d, h, i or s parameters is unset (TIMELIB_UNSET): * - if microtime (us) is unset, then the us of the parsed time is set to 0. * - else if microtime (us) is unset and 'now'->'us' is set, use it, otherwise use 0. * * For either of the 'parsed' y, m, d, h, i, s, z (utc offset in seconds) or * dst is unset, set it to the corresponding value in 'now' if set, otherwise * set it to 0. * * It duplicates tz_abbr if unset in 'parsed' but set in 'now'. * * It duplicates tz_info if unset in 'parsed', but set in 'now' unless * TIMELIB_NO_CLONE is passed, in which case only the pointer in 'parsed' is * set to 'now'. * * If the option TIMELIB_OVERRIDE_TIME is passed and the parsed date/time has * no time portion, the function will ignore the time aspect in 'now' and * instead fill it with zeros. */ void timelib_fill_holes(timelib_time *parsed, timelib_time *now, int options); /* Tries to convert a time zone abbreviation, gmtoffset and/or isdst flag * combination to a time zone identifier. * * If 'abbr' is either 'utc' or 'gmt' (case insensitve) then "UTC" is * returned. * * It first uses the data in the timezonemap.h file to find a matching * abbreviation/GMT offset combination. If not found, it uses the data in * fallbackmap.h to match only the GMT offset/isdst flag to try to find a * match. If nothing is found, NULL is returned. * * The returned char* is not duplicated, and should not be freed. */ char *timelib_timezone_id_from_abbr(const char *abbr, timelib_long gmtoffset, int isdst); /* Returns an array of known time zone abbreviations * * This file is generated from the time zone database through the * gettzmapping.php scripts, which requires that an up-to-date time zone * database is used with the PHP binary that runs the script. * * Each item in the returned list contains the abbreviation, a flag whether * it's an abbreviation used with DST, the UTC offset in seconds, and the name * of the time zone identifier that this abbreviation belongs to. * * The order for each specific abbreviation is controlled through the * preference list in the gettzmapping.php script. Time zones that match the * pattern ±\d{2,4} are excluded */ const timelib_tz_lookup_table *timelib_timezone_abbreviations_list(void); /** * DEPRECATED, but still used by PHP. */ timelib_long timelib_parse_zone(char **ptr, int *dst, timelib_time *t, int *tz_not_found, const timelib_tzdb *tzdb, timelib_tz_get_wrapper tz_wrapper); /* From parse_iso_intervals.re */ /** * Parses a subset of an ISO 8601 intervals specification string into its * constituent parts. * * If the **errors points to a timelib_error_container variable, warnings * and errors will be recorded. You are responsible for freeing the stored * information with timelib_error_container_dtor(). To see whether errors have * occurred, inspect errors->errors_count. To see whether warnings have occurred, * inspect errors->warnings_count. */ void timelib_strtointerval(char *s, size_t len, timelib_time **begin, timelib_time **end, timelib_rel_time **period, int *recurrences, timelib_error_container **errors); /* From tm2unixtime.c */ /** * Uses the y/m/d/h/i/s fields to calculate and store the equivalent timestamp * in the sse field. * * It uses the time zone information associated with 'time' to account for the * right UTC offset and/or DST rules. You can associate time zone information * with the timelib_set_timezone_* functions (see below). * * If the type is 'TIMELIB_ZONETYPE_ID' and there is no associated tzinfo, it * will use the second argument 'tzi' to provide the rules necessary to * calculate the right timestamp. */ void timelib_update_ts(timelib_time* time, timelib_tzinfo* tzi); /** * Takes the information from the y/m/d/h/i/s fields and makes sure their * values are in the right range. * * If a value under- or overflows it will adjust the larger measure up (or * down). It also takes into account leap days. */ void timelib_do_normalize(timelib_time *base); /** * Takes the information from the y/m/d/h/i/s fields of 'rt' and makes sure * their values are in the right range. * * If a value under- or overflows it will adjust the larger measure up (or * down). As this function operates on a *relative date/time*, it also takes * into account leap days and correctly accounts for the difference depending * on the base date/time in 'base'. */ void timelib_do_rel_normalize(timelib_time *base, timelib_rel_time *rt); /* From unixtime2tm.c */ /** * Takes the unix timestamp in seconds from 'ts' and populates the y/m/d/h/i/s * fields of 'tm' without taking time zones into account */ void timelib_unixtime2gmt(timelib_time* tm, timelib_sll ts); /** * Takes the Unix timestamp from 'ts', and calculates the y/m/d/h/i/s fields * according to the time zone information attached to 'tm'. */ void timelib_unixtime2local(timelib_time *tm, timelib_sll ts); /** * Takes the Unix timestamp stored in 'tm', and calculates the y/m/d/h/i/s * fields according to the time zone information attached to 'tm'. */ void timelib_update_from_sse(timelib_time *tm); /** * Attaches the UTC offset as time zone information to 't'. * * 'utc_offset' is in seconds East of UTC. */ void timelib_set_timezone_from_offset(timelib_time *t, timelib_sll utc_offset); /** * Attaches the information from 'abbr_info' as time zone information to 't'. * * The timelib_abbr_info struct contains an abbreviation ('abbr') which string * value is duplicated, as well as a 'utc_offset' and 'dst' flag. It only * supports a 'dst' change over of 1 hour. */ void timelib_set_timezone_from_abbr(timelib_time *t, timelib_abbr_info abbr_info); /** * Attaches the time zone information in 'tz' to to 't'. * * It fetches the right UTC offset that is currently stored in the time * stamp field in 't' ('sse'), and assigns that to the 'z' field and 'dst' * field (whether DST is in effect at the time). It also sets the current * abbreviation to the 'tz_addr' field, making sure that if a value was already * set it was freed. * * The time zone information in 'tz' is *not* duplicated into the 't' field so * it should not be freed until all timelib_time* variables have been freed as * well. */ void timelib_set_timezone(timelib_time *t, timelib_tzinfo *tz); /* From parse_tz.c */ /** * Returns whether the time zone ID 'timezone' is available in the time zone * database as pointed to be 'tzdb'. */ int timelib_timezone_id_is_valid(char *timezone, const timelib_tzdb *tzdb); /** * Converts the binary stored time zone information from 'tzdb' for the time * zone 'timeozne' into a structure the library can use for calculations. * * The function can be used on both timelib_builtin_db as well as a time zone * db as opened by timelib_zoneinfo. * The function will return null upon failure, and also set an error code * through 'error_code'. 'error_code' must not be a null pointer. The error * code is one of the TIMELIB_ERROR_* constants as listed above. These error * constants can be converted into a string by timelib_get_error_message. * * This function allocates memory for the new time zone structure, which must * be freed after use. Although it is recommended that a cache of each used * time zone is kept. */ timelib_tzinfo *timelib_parse_tzfile(char *timezone, const timelib_tzdb *tzdb, int *error_code); /** * Frees up the resources allocated by 'timelib_parse_tzfile'. */ void timelib_tzinfo_dtor(timelib_tzinfo *tz); /** * Deep-clones a timelib_tzinfo structure. * * This allocates resources that need to be freed with 'timelib_tzinfo_dtor' */ timelib_tzinfo* timelib_tzinfo_clone(timelib_tzinfo *tz); /** * Returns whether DST is active with time zone 'tz' for the time stamp 'ts'. * * Returns 0 if DST is not active, 1 if DST is active, or -1 if no transitions * were available through 'tz'. */ int timelib_timestamp_is_in_dst(timelib_sll ts, timelib_tzinfo *tz); /** * Returns offset information with time zone 'tz' for the time stamp 'ts'. * * The returned information contains: the offset in seconds East of UTC (in * 'offset'), whether DST is active ('is_dst'), what the current time zone * abbreviation is ('abbr') and the transition time that got to this state (in * 'transition_time'); */ timelib_time_offset *timelib_get_time_zone_info(timelib_sll ts, timelib_tzinfo *tz); /** * Returns the UTC offset currently applicable for the information stored in 't'. * * The value returned is the UTC offset in seconds East. */ timelib_sll timelib_get_current_offset(timelib_time *t); /** * Displays debugging information about the time zone information in 'tz'. */ void timelib_dump_tzinfo(timelib_tzinfo *tz); /** * Returns a pointer to the built-in time zone database. * * You must *not* free the returned pointer as it is part of the text segment. */ const timelib_tzdb *timelib_builtin_db(void); /** * Returns a pointer to the start of an array containing a list of timezone identifiers. * * The amount of entries in the array is returned through the 'count' OUT parameter. * * Each entry contains the time zone ID ('id' field), and the position within the time zone * information ('pos' field). The pos field should not be used. */ const timelib_tzdb_index_entry *timelib_timezone_identifiers_list(const timelib_tzdb *tzdb, int *count); /* From parse_zoneinfo.c */ /** * Scans the directory and subdirectories of 'directory' for valid time zone files and builds * a time zone database out of these files. * * Typically, the directory should point to '/usr/share/zoneinfo'. * * Unlike 'timelib_builtin_db', the return value of this function must be freed * with the 'timelib_zoneinfo_dtor' function. */ timelib_tzdb *timelib_zoneinfo(char *directory); /** * Frees up the resources as created through 'timelib_zoneinfo'. * * This function must be used to free up all the resources that have been * allocated while calling 'timelib_zoneinfo'. */ void timelib_zoneinfo_dtor(timelib_tzdb *tzdb); /* From timelib.c */ /** * Returns a static string containing an error message belonging to a specific * error code. */ const char *timelib_get_error_message(int error_code); /** * Allocates resources for the relative time structure. * * Must be freed with 'timelib_rel_time_dtor'. */ timelib_rel_time* timelib_rel_time_ctor(void); /** * Frees up the resources as allocated through 'timelib_rel_time_ctor'. */ void timelib_rel_time_dtor(timelib_rel_time* t); /** * Creates a new timelib_rel_time resource and copies over the information * from 'tz'. * * Must be freed with 'timelib_rel_time_dtor'. */ timelib_rel_time* timelib_rel_time_clone(timelib_rel_time *tz); /** * Allocates resources for the time structure. * * Must be freed with 'timelib_time_dtor'. */ timelib_time* timelib_time_ctor(void); /** * Frees up the resources as allocated through 'timelib_time_ctor'. */ void timelib_time_dtor(timelib_time* t); /** * Creates a new timelib_time resource and copies over the information * from 'orig'. * * Must be freed with 'timelib_time_dtor'. */ timelib_time* timelib_time_clone(timelib_time* orig); /** * Compares two timelib_time structures and returns which one is earlier in * time. * * To decide which comes earlier it uses the 'sse' (Seconds Since Epoch) and * 'us' (microseconds) fields. * * Returns -1 if t1 < t2, 0 if t1 == t2, and -1 if t1 > t2. */ int timelib_time_compare(timelib_time *t1, timelib_time *t2); /** * Allocates resources for the time offset structure. * * Must be freed with 'timelib_time_offset_dtor'. */ timelib_time_offset* timelib_time_offset_ctor(void); /** * Frees up the resources as allocated through 'timelib_time_offset_ctor'. */ void timelib_time_offset_dtor(timelib_time_offset* t); /** * Frees up the resources allocated while converting strings to timelib_time * structures with the timelib_strtotime and timelib_strtointerval functions. */ void timelib_error_container_dtor(timelib_error_container *errors); /** * Converts the 'sse' value of 'd' to a timelib_long type. * * If the value fits in the TIMELIB_LONG_MIN and TIMELIB_LONG_MAX range, the * value is cast to (timelib_long) and returned. If *error is not a NULL * pointer, it will be set to 0. * * If the value does *not* fit in the range, the function returns 0 and if * *error is not a NULL pointer, it will be set to 1. * * timelib_long is a 32 bit signed long integer on 32 bit platforms, and a 64 * bit signed long long integer on 64 bit platforms. In other words, it makes * sure that the value in 'sse' (which is always a signed long long 64 bit * integer) can be used safely outside of the library. */ timelib_long timelib_date_to_int(timelib_time *d, int *error); /** * Displays debugging information about the date/time information stored in 'd'. * * 'options' is a bit field, where: * - 1 controls whether the relative time portion is shown. * - 2 controls whether the zone type is shown. */ void timelib_dump_date(timelib_time *d, int options); /** * Displays debugging information about the relative time information stored * in 'd'. */ void timelib_dump_rel_time(timelib_rel_time *d); /** * Converts a decimal hour into hour/min/sec components */ void timelib_decimal_hour_to_hms(double h, int *hour, int *min, int *sec); /** * Converts hour/min/sec values into a decimal hour */ void timelib_hms_to_decimal_hour(int hour, int min, int sec, double *h); /* from astro.c */ /** * Converts the Unix Epoch time stamp 'ts' to a Julian Day * * The value returned is the number of whole days since -4714-11-24T12:00:00 UTC * (in the proleptic Gregorian calendar): * https://en.wikipedia.org/wiki/Julian_day */ double timelib_ts_to_julianday(timelib_sll ts); /** * Converts the Unix Epoch time stamp 'ts' to the J2000 epoch * * The value returned is the number of whole days since 2000-01-01T12:00:00 * UTC: https://en.wikipedia.org/wiki/Epoch_(astronomy)#Julian_years_and_J2000 */ double timelib_ts_to_j2000(timelib_sll ts); /** * Calculates when the Sun is above a certain latitude. * * Parameters: * - time: A timelib_time time describing that needs to specific midnight for a * specific day. * - lon: The longitude of the observer (East positive, West negative). * - lat: The latitude of the observer (North positive, South negative). * - altit: The altitude. Set to -35/60 for rise/set, -6 for civil twilight, * -12 for nautical, and -18 for astronomical twilight. * - upper_limb: set to non-zero for rise/set calculations, and 0 for twilight * calculations. * * Out Parameters: * - h_rise: The decimal hour when the Sun rises * - h_set: The decimal hour when the Sun sets * - ts_rise: The Unix timestamp of the Sun rising * - ts_set: The Unix timestamp of the Sun setting * - ts_transit: The Unix timestmap of the Sun transitting through South * * Return Values: * - 0: The Sun rises and sets. * - +1: The Sun is always above the horizon. (ts_rise is set to ts_transit - * (12 * 3600); ts_set is set to ts_transit + (12 * 3600). * - -1: The Sun is awlays below the horizon. (ts_rise and ts_set are set * to ts_transit) */ int timelib_astro_rise_set_altitude(timelib_time *time, double lon, double lat, double altit, int upper_limb, double *h_rise, double *h_set, timelib_sll *ts_rise, timelib_sll *ts_set, timelib_sll *ts_transit); /* from interval.c */ /** * Calculates the difference between two times * * The result is a timelib_rel_time structure that describes how you can * convert from 'one' to 'two' with 'timelib_add'. This does *not* necessarily * mean that you can go from 'two' to 'one' by using 'timelib_sub' due to the * way months and days are calculated. */ timelib_rel_time *timelib_diff(timelib_time *one, timelib_time *two); /** * Adds the relative time information 'interval' to the base time 't'. * * This can be a relative time as created by 'timelib_diff', but also by more * complex statements such as "next workday". */ timelib_time *timelib_add(timelib_time *t, timelib_rel_time *interval); /** * Subtracts the relative time information 'interval' to the base time 't'. * * This can be a relative time as created by 'timelib_diff'. Unlike with * 'timelib_add', this does not support more complex statements such as "next * workday". */ timelib_time *timelib_sub(timelib_time *t, timelib_rel_time *interval); #ifdef __cplusplus } /* extern "C" */ #endif #endif PK!j99ext/date/lib/timelib_config.hnu[#ifdef PHP_WIN32 # include "config.w32.h" #else # include #endif #include #define TIMELIB_OMIT_STDINT 1 #include "zend.h" #define timelib_malloc emalloc #define timelib_realloc erealloc #define timelib_calloc ecalloc #define timelib_strdup estrdup #define timelib_free efree PK!9vext/libxml/php_libxml.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Shane Caraveo | | Wez Furlong | +----------------------------------------------------------------------+ */ #ifndef PHP_LIBXML_H #define PHP_LIBXML_H #if HAVE_LIBXML extern zend_module_entry libxml_module_entry; #define libxml_module_ptr &libxml_module_entry #include "php_version.h" #define PHP_LIBXML_VERSION PHP_VERSION #ifdef PHP_WIN32 # define PHP_LIBXML_API __declspec(dllexport) #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_LIBXML_API __attribute__ ((visibility("default"))) #else # define PHP_LIBXML_API #endif #include "zend_smart_str.h" #include #define LIBXML_SAVE_NOEMPTYTAG 1<<2 ZEND_BEGIN_MODULE_GLOBALS(libxml) zval stream_context; smart_str error_buffer; zend_llist *error_list; struct _php_libxml_entity_resolver { zval object; zend_fcall_info fci; zend_fcall_info_cache fcc; } entity_loader; zend_bool entity_loader_disabled; ZEND_END_MODULE_GLOBALS(libxml) typedef struct _libxml_doc_props { int formatoutput; int validateonparse; int resolveexternals; int preservewhitespace; int substituteentities; int stricterror; int recover; HashTable *classmap; } libxml_doc_props; typedef struct _php_libxml_ref_obj { void *ptr; int refcount; libxml_doc_props *doc_props; } php_libxml_ref_obj; typedef struct _php_libxml_node_ptr { xmlNodePtr node; int refcount; void *_private; } php_libxml_node_ptr; typedef struct _php_libxml_node_object { php_libxml_node_ptr *node; php_libxml_ref_obj *document; HashTable *properties; zend_object std; } php_libxml_node_object; static inline php_libxml_node_object *php_libxml_node_fetch_object(zend_object *obj) { return (php_libxml_node_object *)((char*)(obj) - obj->handlers->offset); } #define Z_LIBXML_NODE_P(zv) php_libxml_node_fetch_object(Z_OBJ_P((zv))) typedef void * (*php_libxml_export_node) (zval *object); PHP_LIBXML_API int php_libxml_increment_node_ptr(php_libxml_node_object *object, xmlNodePtr node, void *private_data); PHP_LIBXML_API int php_libxml_decrement_node_ptr(php_libxml_node_object *object); PHP_LIBXML_API int php_libxml_increment_doc_ref(php_libxml_node_object *object, xmlDocPtr docp); PHP_LIBXML_API int php_libxml_decrement_doc_ref(php_libxml_node_object *object); PHP_LIBXML_API xmlNodePtr php_libxml_import_node(zval *object); PHP_LIBXML_API zval *php_libxml_register_export(zend_class_entry *ce, php_libxml_export_node export_function); /* When an explicit freeing of node and children is required */ PHP_LIBXML_API void php_libxml_node_free_list(xmlNodePtr node); PHP_LIBXML_API void php_libxml_node_free_resource(xmlNodePtr node); /* When object dtor is called as node may still be referenced */ PHP_LIBXML_API void php_libxml_node_decrement_resource(php_libxml_node_object *object); PHP_LIBXML_API void php_libxml_error_handler(void *ctx, const char *msg, ...); PHP_LIBXML_API void php_libxml_ctx_warning(void *ctx, const char *msg, ...); PHP_LIBXML_API void php_libxml_ctx_error(void *ctx, const char *msg, ...); PHP_LIBXML_API int php_libxml_xmlCheckUTF8(const unsigned char *s); PHP_LIBXML_API void php_libxml_switch_context(zval *context, zval *oldcontext); PHP_LIBXML_API void php_libxml_issue_error(int level, const char *msg); PHP_LIBXML_API zend_bool php_libxml_disable_entity_loader(zend_bool disable); /* Init/shutdown functions*/ PHP_LIBXML_API void php_libxml_initialize(void); PHP_LIBXML_API void php_libxml_shutdown(void); #define LIBXML(v) ZEND_MODULE_GLOBALS_ACCESSOR(libxml, v) #if defined(ZTS) && defined(COMPILE_DL_LIBXML) ZEND_TSRMLS_CACHE_EXTERN() #endif /* Other extension may override the global state options, these global options * are copied initially to ctxt->options. Set the options to a known good value. * See libxml2 globals.c and parserInternals.c. * The unique_name argument allows multiple sanitizes and restores within the * same function, even nested is necessary. */ #define PHP_LIBXML_SANITIZE_GLOBALS(unique_name) \ int xml_old_loadsubset_##unique_name = xmlLoadExtDtdDefaultValue; \ xmlLoadExtDtdDefaultValue = 0; \ int xml_old_validate_##unique_name = xmlDoValidityCheckingDefaultValue; \ xmlDoValidityCheckingDefaultValue = 0; \ int xml_old_pedantic_##unique_name = xmlPedanticParserDefault(0); \ int xml_old_substitute_##unique_name = xmlSubstituteEntitiesDefault(0); \ int xml_old_linenrs_##unique_name = xmlLineNumbersDefault(0); \ int xml_old_blanks_##unique_name = xmlKeepBlanksDefault(1); #define PHP_LIBXML_RESTORE_GLOBALS(unique_name) \ xmlLoadExtDtdDefaultValue = xml_old_loadsubset_##unique_name; \ xmlDoValidityCheckingDefaultValue = xml_old_validate_##unique_name; \ (void) xmlPedanticParserDefault(xml_old_pedantic_##unique_name); \ (void) xmlSubstituteEntitiesDefault(xml_old_substitute_##unique_name); \ (void) xmlLineNumbersDefault(xml_old_linenrs_##unique_name); \ (void) xmlKeepBlanksDefault(xml_old_blanks_##unique_name); /* Alternative for above, working directly on the context and not setting globals. * Generally faster because no locking is involved, and this has the advantage that it sets the options to a known good value. */ static zend_always_inline void php_libxml_sanitize_parse_ctxt_options(xmlParserCtxtPtr ctxt) { ctxt->loadsubset = 0; ctxt->validate = 0; ctxt->pedantic = 0; ctxt->replaceEntities = 0; ctxt->linenumbers = 0; ctxt->keepBlanks = 1; ctxt->options = 0; } #else /* HAVE_LIBXML */ #define libxml_module_ptr NULL #endif #define phpext_libxml_ptr libxml_module_ptr #endif /* PHP_LIBXML_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!' A A %ext/simplexml/php_simplexml_exports.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | | Marcus Boerger | | Rob Richards | +----------------------------------------------------------------------+ */ #ifndef PHP_SIMPLEXML_EXPORTS_H #define PHP_SIMPLEXML_EXPORTS_H #include "php_simplexml.h" #define SKIP_TEXT(__p) \ if ((__p)->type == XML_TEXT_NODE) { \ goto next_iter; \ } #define GET_NODE(__s, __n) { \ if ((__s)->node && (__s)->node->node) { \ __n = (__s)->node->node; \ } else { \ __n = NULL; \ php_error_docref(NULL, E_WARNING, "Node no longer exists"); \ } \ } PHP_SXE_API zend_object *sxe_object_new(zend_class_entry *ce); static inline php_sxe_object *php_sxe_fetch_object(zend_object *obj) /* {{{ */ { return (php_sxe_object *)((char*)(obj) - XtOffsetOf(php_sxe_object, zo)); } /* }}} */ #define Z_SXEOBJ_P(zv) php_sxe_fetch_object(Z_OBJ_P((zv))) typedef struct { zend_object_iterator intern; php_sxe_object *sxe; } php_sxe_iterator; PHP_SXE_API void php_sxe_rewind_iterator(php_sxe_object *sxe); PHP_SXE_API void php_sxe_move_forward_iterator(php_sxe_object *sxe); #endif /* PHP_SIMPLEXML_EXPORTS_H */ /** * Local Variables: * c-basic-offset: 4 * tab-width: 4 * indent-tabs-mode: t * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!@8 8 ext/simplexml/php_simplexml.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sterling Hughes | +----------------------------------------------------------------------+ */ #ifndef PHP_SIMPLEXML_H #define PHP_SIMPLEXML_H extern zend_module_entry simplexml_module_entry; #define phpext_simplexml_ptr &simplexml_module_entry #include "php_version.h" #define PHP_SIMPLEXML_VERSION PHP_VERSION #ifdef ZTS #include "TSRM.h" #endif #include "ext/libxml/php_libxml.h" #include #include #include #include #include #include #include #include #include #include PHP_MINIT_FUNCTION(simplexml); PHP_MSHUTDOWN_FUNCTION(simplexml); PHP_MINFO_FUNCTION(simplexml); typedef enum { SXE_ITER_NONE = 0, SXE_ITER_ELEMENT = 1, SXE_ITER_CHILD = 2, SXE_ITER_ATTRLIST = 3 } SXE_ITER; typedef struct { php_libxml_node_ptr *node; php_libxml_ref_obj *document; HashTable *properties; xmlXPathContextPtr xpath; struct { xmlChar *name; xmlChar *nsprefix; int isprefix; SXE_ITER type; zval data; } iter; zval tmp; zend_function *fptr_count; zend_object zo; } php_sxe_object; #ifdef ZTS #define SIMPLEXML_G(v) TSRMG(simplexml_globals_id, zend_simplexml_globals *, v) #else #define SIMPLEXML_G(v) (simplexml_globals.v) #endif #ifdef PHP_WIN32 # ifdef PHP_SIMPLEXML_EXPORTS # define PHP_SXE_API __declspec(dllexport) # else # define PHP_SXE_API __declspec(dllimport) # endif #else # define PHP_SXE_API ZEND_API #endif PHP_SXE_API zend_class_entry *sxe_get_element_class_entry(); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: * vim600: fdm=marker * vim: noet sw=4 ts=4 */ PK!u֋o o ext/json/php_json_scanner.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jakub Zelenka | +----------------------------------------------------------------------+ */ #ifndef PHP_JSON_SCANNER_H #define PHP_JSON_SCANNER_H #include "php.h" #include "php_json.h" typedef unsigned char php_json_ctype; typedef struct _php_json_scanner { php_json_ctype *cursor; /* cursor position */ php_json_ctype *token; /* token position */ php_json_ctype *limit; /* the last read character + 1 position */ php_json_ctype *marker; /* marker position for backtracking */ php_json_ctype *ctxmarker; /* marker position for context backtracking */ php_json_ctype *str_start; /* start position of the string */ php_json_ctype *pstr; /* string pointer for escapes conversion */ zval value; /* value */ int str_esc; /* number of extra characters for escaping */ int state; /* condition state */ int options; /* options */ php_json_error_code errcode; /* error type if there is an error */ int utf8_invalid; /* whether utf8 is invalid */ int utf8_invalid_count; /* number of extra character for invalid utf8 */ } php_json_scanner; void php_json_scanner_init(php_json_scanner *scanner, char *str, size_t str_len, int options); int php_json_scan(php_json_scanner *s); #endif /* PHP_JSON_SCANNER_H */ PK!> ext/json/php_json_parser.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jakub Zelenka | +----------------------------------------------------------------------+ */ #ifndef PHP_JSON_PARSER_H #define PHP_JSON_PARSER_H #include "php.h" #include "php_json_scanner.h" typedef struct _php_json_parser php_json_parser; typedef int (*php_json_parser_func_array_create_t)( php_json_parser *parser, zval *array); typedef int (*php_json_parser_func_array_append_t)( php_json_parser *parser, zval *array, zval *zvalue); typedef int (*php_json_parser_func_array_start_t)( php_json_parser *parser); typedef int (*php_json_parser_func_array_end_t)( php_json_parser *parser, zval *object); typedef int (*php_json_parser_func_object_create_t)( php_json_parser *parser, zval *object); typedef int (*php_json_parser_func_object_update_t)( php_json_parser *parser, zval *object, zend_string *key, zval *zvalue); typedef int (*php_json_parser_func_object_start_t)( php_json_parser *parser); typedef int (*php_json_parser_func_object_end_t)( php_json_parser *parser, zval *object); typedef struct _php_json_parser_methods { php_json_parser_func_array_create_t array_create; php_json_parser_func_array_append_t array_append; php_json_parser_func_array_start_t array_start; php_json_parser_func_array_end_t array_end; php_json_parser_func_object_create_t object_create; php_json_parser_func_object_update_t object_update; php_json_parser_func_object_start_t object_start; php_json_parser_func_object_end_t object_end; } php_json_parser_methods; struct _php_json_parser { php_json_scanner scanner; zval *return_value; int depth; int max_depth; php_json_parser_methods methods; }; PHP_JSON_API void php_json_parser_init_ex( php_json_parser *parser, zval *return_value, char *str, size_t str_len, int options, int max_depth, const php_json_parser_methods *methods); PHP_JSON_API void php_json_parser_init( php_json_parser *parser, zval *return_value, char *str, size_t str_len, int options, int max_depth); PHP_JSON_API php_json_error_code php_json_parser_error_code(const php_json_parser *parser); PHP_JSON_API int php_json_parse(php_json_parser *parser); int php_json_yyparse(php_json_parser *parser); #endif /* PHP_JSON_PARSER_H */ PK! lext/json/php_json.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Omar Kilani | | Jakub Zelenka | +----------------------------------------------------------------------+ */ #ifndef PHP_JSON_H #define PHP_JSON_H #define PHP_JSON_VERSION "1.7.0" #include "zend_smart_str_public.h" extern zend_module_entry json_module_entry; #define phpext_json_ptr &json_module_entry #if defined(PHP_WIN32) && defined(JSON_EXPORTS) #define PHP_JSON_API __declspec(dllexport) #else #define PHP_JSON_API PHPAPI #endif #ifdef ZTS #include "TSRM.h" #endif extern PHP_JSON_API zend_class_entry *php_json_serializable_ce; /* error codes */ typedef enum { PHP_JSON_ERROR_NONE = 0, PHP_JSON_ERROR_DEPTH, PHP_JSON_ERROR_STATE_MISMATCH, PHP_JSON_ERROR_CTRL_CHAR, PHP_JSON_ERROR_SYNTAX, PHP_JSON_ERROR_UTF8, PHP_JSON_ERROR_RECURSION, PHP_JSON_ERROR_INF_OR_NAN, PHP_JSON_ERROR_UNSUPPORTED_TYPE, PHP_JSON_ERROR_INVALID_PROPERTY_NAME, PHP_JSON_ERROR_UTF16 } php_json_error_code; /* json_decode() options */ #define PHP_JSON_OBJECT_AS_ARRAY (1<<0) #define PHP_JSON_BIGINT_AS_STRING (1<<1) /* json_encode() options */ #define PHP_JSON_HEX_TAG (1<<0) #define PHP_JSON_HEX_AMP (1<<1) #define PHP_JSON_HEX_APOS (1<<2) #define PHP_JSON_HEX_QUOT (1<<3) #define PHP_JSON_FORCE_OBJECT (1<<4) #define PHP_JSON_NUMERIC_CHECK (1<<5) #define PHP_JSON_UNESCAPED_SLASHES (1<<6) #define PHP_JSON_PRETTY_PRINT (1<<7) #define PHP_JSON_UNESCAPED_UNICODE (1<<8) #define PHP_JSON_PARTIAL_OUTPUT_ON_ERROR (1<<9) #define PHP_JSON_PRESERVE_ZERO_FRACTION (1<<10) #define PHP_JSON_UNESCAPED_LINE_TERMINATORS (1<<11) /* json_decode() and json_encode() common options */ #define PHP_JSON_INVALID_UTF8_IGNORE (1<<20) #define PHP_JSON_INVALID_UTF8_SUBSTITUTE (1<<21) #define PHP_JSON_THROW_ON_ERROR (1<<22) /* Internal flags */ #define PHP_JSON_OUTPUT_ARRAY 0 #define PHP_JSON_OUTPUT_OBJECT 1 /* default depth */ #define PHP_JSON_PARSER_DEFAULT_DEPTH 512 ZEND_BEGIN_MODULE_GLOBALS(json) int encoder_depth; int encode_max_depth; php_json_error_code error_code; ZEND_END_MODULE_GLOBALS(json) PHP_JSON_API ZEND_EXTERN_MODULE_GLOBALS(json) #define JSON_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(json, v) #if defined(ZTS) && defined(COMPILE_DL_JSON) ZEND_TSRMLS_CACHE_EXTERN() #endif PHP_JSON_API int php_json_encode_ex(smart_str *buf, zval *val, int options, zend_long depth); PHP_JSON_API int php_json_encode(smart_str *buf, zval *val, int options); PHP_JSON_API int php_json_decode_ex(zval *return_value, char *str, size_t str_len, zend_long options, zend_long depth); static inline int php_json_decode(zval *return_value, char *str, int str_len, zend_bool assoc, zend_long depth) { return php_json_decode_ex(return_value, str, str_len, assoc ? PHP_JSON_OBJECT_AS_ARRAY : 0, depth); } #endif /* PHP_JSON_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK! ext/sockets/php_sockets.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Chris Vandomelen | | Sterling Hughes | | | | WinSock: Daniel Beulshausen | +----------------------------------------------------------------------+ */ #ifndef PHP_SOCKETS_H #define PHP_SOCKETS_H #if HAVE_CONFIG_H # include "config.h" #endif #if HAVE_SOCKETS #include #ifdef PHP_WIN32 # include "windows_common.h" #endif #define PHP_SOCKETS_VERSION PHP_VERSION extern zend_module_entry sockets_module_entry; #define phpext_sockets_ptr &sockets_module_entry #ifdef PHP_WIN32 #include #else #if HAVE_SYS_SOCKET_H #include #endif #endif #ifndef PHP_WIN32 typedef int PHP_SOCKET; # define PHP_SOCKETS_API PHPAPI #else # define PHP_SOCKETS_API __declspec(dllexport) typedef SOCKET PHP_SOCKET; #endif typedef struct { PHP_SOCKET bsd_socket; int type; int error; int blocking; zval zstream; } php_socket; #ifdef PHP_WIN32 struct sockaddr_un { short sun_family; char sun_path[108]; }; #endif PHP_SOCKETS_API int php_sockets_le_socket(void); PHP_SOCKETS_API php_socket *php_create_socket(void); PHP_SOCKETS_API void php_destroy_socket(zend_resource *rsrc); PHP_SOCKETS_API void php_destroy_sockaddr(zend_resource *rsrc); #define php_sockets_le_socket_name "Socket" #define php_sockets_le_addrinfo_name "AddressInfo" #define PHP_SOCKET_ERROR(socket, msg, errn) \ do { \ int _err = (errn); /* save value to avoid repeated calls to WSAGetLastError() on Windows */ \ (socket)->error = _err; \ SOCKETS_G(last_error) = _err; \ if (_err != EAGAIN && _err != EWOULDBLOCK && _err != EINPROGRESS) { \ php_error_docref(NULL, E_WARNING, "%s [%d]: %s", msg, _err, sockets_strerror(_err)); \ } \ } while (0) ZEND_BEGIN_MODULE_GLOBALS(sockets) int last_error; char *strerror_buf; #ifdef PHP_WIN32 uint32_t wsa_child_count; HashTable wsa_info; #endif ZEND_END_MODULE_GLOBALS(sockets) ZEND_EXTERN_MODULE_GLOBALS(sockets) #define SOCKETS_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(sockets, v) enum sockopt_return { SOCKOPT_ERROR, SOCKOPT_CONTINUE, SOCKOPT_SUCCESS }; char *sockets_strerror(int error); php_socket *socket_import_file_descriptor(PHP_SOCKET sock); #else #define phpext_sockets_ptr NULL #endif #if defined(_AIX) && !defined(HAVE_SA_SS_FAMILY) # define ss_family __ss_family #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!ext/phar/php_phar.hnu[/* +----------------------------------------------------------------------+ | phar php single-file executable PHP extension | +----------------------------------------------------------------------+ | Copyright (c) 2005-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt. | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Gregory Beaver | | Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef PHP_PHAR_H #define PHP_PHAR_H #define PHP_PHAR_VERSION PHP_VERSION #include "ext/standard/basic_functions.h" extern zend_module_entry phar_module_entry; #define phpext_phar_ptr &phar_module_entry #ifdef PHP_WIN32 #define PHP_PHAR_API __declspec(dllexport) #else #define PHP_PHAR_API PHPAPI #endif PHP_PHAR_API int phar_resolve_alias(char *alias, size_t alias_len, char **filename, size_t *filename_len); #endif /* PHP_PHAR_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK! &Qpext/filter/php_filter.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Derick Rethans | +----------------------------------------------------------------------+ */ #ifndef PHP_FILTER_H #define PHP_FILTER_H #include "SAPI.h" #include "zend_API.h" #include "php.h" #include "php_ini.h" #include "ext/standard/info.h" #include "ext/standard/php_string.h" #include "ext/standard/html.h" #include "php_variables.h" extern zend_module_entry filter_module_entry; #define phpext_filter_ptr &filter_module_entry #ifdef ZTS #include "TSRM.h" #endif #define PHP_FILTER_VERSION PHP_VERSION PHP_MINIT_FUNCTION(filter); PHP_MSHUTDOWN_FUNCTION(filter); PHP_RINIT_FUNCTION(filter); PHP_RSHUTDOWN_FUNCTION(filter); PHP_MINFO_FUNCTION(filter); PHP_FUNCTION(filter_input); PHP_FUNCTION(filter_var); PHP_FUNCTION(filter_input_array); PHP_FUNCTION(filter_var_array); PHP_FUNCTION(filter_list); PHP_FUNCTION(filter_has_var); PHP_FUNCTION(filter_id); ZEND_BEGIN_MODULE_GLOBALS(filter) zval post_array; zval get_array; zval cookie_array; zval env_array; zval server_array; #if 0 zval session_array; #endif zend_long default_filter; zend_long default_filter_flags; ZEND_END_MODULE_GLOBALS(filter) #if defined(COMPILE_DL_FILTER) && defined(ZTS) ZEND_TSRMLS_CACHE_EXTERN() #endif #define IF_G(v) ZEND_MODULE_GLOBALS_ACCESSOR(filter, v) #define PHP_INPUT_FILTER_PARAM_DECL zval *value, zend_long flags, zval *option_array, char *charset void php_filter_int(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_boolean(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_float(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_validate_regexp(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_validate_domain(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_validate_url(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_validate_email(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_validate_ip(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_validate_mac(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_string(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_encoded(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_special_chars(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_full_special_chars(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_unsafe_raw(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_email(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_url(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_number_int(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_number_float(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_add_slashes(PHP_INPUT_FILTER_PARAM_DECL); void php_filter_callback(PHP_INPUT_FILTER_PARAM_DECL); #endif /* FILTER_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ PK!$ext/mbstring/php_onig_compat.hnu[#ifndef _PHP_ONIG_COMPAT_H #define _PHP_ONIG_COMPAT_H #define re_pattern_buffer php_mb_re_pattern_buffer #define regex_t php_mb_regex_t #define re_registers php_mb_re_registers #endif /* _PHP_ONIG_COMPAT_H */ PK!,?XX"ext/mbstring/oniguruma/oniguruma.hnu[#ifndef ONIGURUMA_H #define ONIGURUMA_H /********************************************************************** oniguruma.h - Oniguruma (regular expression library) **********************************************************************/ /*- * Copyright (c) 2002-2019 K.Kosako * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #ifdef __cplusplus extern "C" { #endif #define ONIGURUMA #define ONIGURUMA_VERSION_MAJOR 6 #define ONIGURUMA_VERSION_MINOR 9 #define ONIGURUMA_VERSION_TEENY 4 #define ONIGURUMA_VERSION_INT 60904 #ifndef P_ #if defined(__STDC__) || defined(_WIN32) # define P_(args) args #else # define P_(args) () #endif #endif #ifndef PV_ # define PV_(args) args #endif #ifndef ONIG_STATIC #ifndef ONIG_EXTERN #if defined(_WIN32) && !defined(__GNUC__) #if defined(ONIGURUMA_EXPORT) #define ONIG_EXTERN extern __declspec(dllexport) #else #define ONIG_EXTERN extern __declspec(dllimport) #endif #endif #endif #ifndef ONIG_EXTERN #define ONIG_EXTERN extern #endif #else #define ONIG_EXTERN extern #endif /* PART: character encoding */ #ifndef ONIG_ESCAPE_UCHAR_COLLISION #define UChar OnigUChar #endif typedef unsigned int OnigCodePoint; typedef unsigned char OnigUChar; typedef unsigned int OnigCtype; typedef unsigned int OnigLen; #define ONIG_INFINITE_DISTANCE ~((OnigLen )0) typedef unsigned int OnigCaseFoldType; /* case fold flag */ ONIG_EXTERN OnigCaseFoldType OnigDefaultCaseFoldFlag; /* #define ONIGENC_CASE_FOLD_HIRAGANA_KATAKANA (1<<1) */ /* #define ONIGENC_CASE_FOLD_KATAKANA_WIDTH (1<<2) */ #define ONIGENC_CASE_FOLD_TURKISH_AZERI (1<<20) #define INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR (1<<30) #define ONIGENC_CASE_FOLD_MIN INTERNAL_ONIGENC_CASE_FOLD_MULTI_CHAR #define ONIGENC_CASE_FOLD_DEFAULT OnigDefaultCaseFoldFlag #define ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN 3 #define ONIGENC_GET_CASE_FOLD_CODES_MAX_NUM 13 /* 13 => Unicode:0x1ffc */ /* code range */ #define ONIGENC_CODE_RANGE_NUM(range) ((int )range[0]) #define ONIGENC_CODE_RANGE_FROM(range,i) range[((i)*2) + 1] #define ONIGENC_CODE_RANGE_TO(range,i) range[((i)*2) + 2] typedef struct { int byte_len; /* argument(original) character(s) byte length */ int code_len; /* number of code */ OnigCodePoint code[ONIGENC_MAX_COMP_CASE_FOLD_CODE_LEN]; } OnigCaseFoldCodeItem; typedef struct { OnigCodePoint esc; OnigCodePoint anychar; OnigCodePoint anytime; OnigCodePoint zero_or_one_time; OnigCodePoint one_or_more_time; OnigCodePoint anychar_anytime; } OnigMetaCharTableType; typedef int (*OnigApplyAllCaseFoldFunc)(OnigCodePoint from, OnigCodePoint* to, int to_len, void* arg); typedef struct OnigEncodingTypeST { int (*mbc_enc_len)(const OnigUChar* p); const char* name; int max_enc_len; int min_enc_len; int (*is_mbc_newline)(const OnigUChar* p, const OnigUChar* end); OnigCodePoint (*mbc_to_code)(const OnigUChar* p, const OnigUChar* end); int (*code_to_mbclen)(OnigCodePoint code); int (*code_to_mbc)(OnigCodePoint code, OnigUChar *buf); int (*mbc_case_fold)(OnigCaseFoldType flag, const OnigUChar** pp, const OnigUChar* end, OnigUChar* to); int (*apply_all_case_fold)(OnigCaseFoldType flag, OnigApplyAllCaseFoldFunc f, void* arg); int (*get_case_fold_codes_by_str)(OnigCaseFoldType flag, const OnigUChar* p, const OnigUChar* end, OnigCaseFoldCodeItem acs[]); int (*property_name_to_ctype)(struct OnigEncodingTypeST* enc, OnigUChar* p, OnigUChar* end); int (*is_code_ctype)(OnigCodePoint code, OnigCtype ctype); int (*get_ctype_code_range)(OnigCtype ctype, OnigCodePoint* sb_out, const OnigCodePoint* ranges[]); OnigUChar* (*left_adjust_char_head)(const OnigUChar* start, const OnigUChar* p); int (*is_allowed_reverse_match)(const OnigUChar* p, const OnigUChar* end); int (*init)(void); int (*is_initialized)(void); int (*is_valid_mbc_string)(const OnigUChar* s, const OnigUChar* end); unsigned int flag; OnigCodePoint sb_range; int index; } OnigEncodingType; typedef OnigEncodingType* OnigEncoding; ONIG_EXTERN OnigEncodingType OnigEncodingASCII; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_1; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_2; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_3; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_4; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_5; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_6; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_7; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_8; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_9; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_10; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_11; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_13; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_14; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_15; ONIG_EXTERN OnigEncodingType OnigEncodingISO_8859_16; ONIG_EXTERN OnigEncodingType OnigEncodingUTF8; ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_BE; ONIG_EXTERN OnigEncodingType OnigEncodingUTF16_LE; ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_BE; ONIG_EXTERN OnigEncodingType OnigEncodingUTF32_LE; ONIG_EXTERN OnigEncodingType OnigEncodingEUC_JP; ONIG_EXTERN OnigEncodingType OnigEncodingEUC_TW; ONIG_EXTERN OnigEncodingType OnigEncodingEUC_KR; ONIG_EXTERN OnigEncodingType OnigEncodingEUC_CN; ONIG_EXTERN OnigEncodingType OnigEncodingSJIS; ONIG_EXTERN OnigEncodingType OnigEncodingKOI8; ONIG_EXTERN OnigEncodingType OnigEncodingKOI8_R; ONIG_EXTERN OnigEncodingType OnigEncodingCP1251; ONIG_EXTERN OnigEncodingType OnigEncodingBIG5; ONIG_EXTERN OnigEncodingType OnigEncodingGB18030; #define ONIG_ENCODING_ASCII (&OnigEncodingASCII) #define ONIG_ENCODING_ISO_8859_1 (&OnigEncodingISO_8859_1) #define ONIG_ENCODING_ISO_8859_2 (&OnigEncodingISO_8859_2) #define ONIG_ENCODING_ISO_8859_3 (&OnigEncodingISO_8859_3) #define ONIG_ENCODING_ISO_8859_4 (&OnigEncodingISO_8859_4) #define ONIG_ENCODING_ISO_8859_5 (&OnigEncodingISO_8859_5) #define ONIG_ENCODING_ISO_8859_6 (&OnigEncodingISO_8859_6) #define ONIG_ENCODING_ISO_8859_7 (&OnigEncodingISO_8859_7) #define ONIG_ENCODING_ISO_8859_8 (&OnigEncodingISO_8859_8) #define ONIG_ENCODING_ISO_8859_9 (&OnigEncodingISO_8859_9) #define ONIG_ENCODING_ISO_8859_10 (&OnigEncodingISO_8859_10) #define ONIG_ENCODING_ISO_8859_11 (&OnigEncodingISO_8859_11) #define ONIG_ENCODING_ISO_8859_13 (&OnigEncodingISO_8859_13) #define ONIG_ENCODING_ISO_8859_14 (&OnigEncodingISO_8859_14) #define ONIG_ENCODING_ISO_8859_15 (&OnigEncodingISO_8859_15) #define ONIG_ENCODING_ISO_8859_16 (&OnigEncodingISO_8859_16) #define ONIG_ENCODING_UTF8 (&OnigEncodingUTF8) #define ONIG_ENCODING_UTF16_BE (&OnigEncodingUTF16_BE) #define ONIG_ENCODING_UTF16_LE (&OnigEncodingUTF16_LE) #define ONIG_ENCODING_UTF32_BE (&OnigEncodingUTF32_BE) #define ONIG_ENCODING_UTF32_LE (&OnigEncodingUTF32_LE) #define ONIG_ENCODING_EUC_JP (&OnigEncodingEUC_JP) #define ONIG_ENCODING_EUC_TW (&OnigEncodingEUC_TW) #define ONIG_ENCODING_EUC_KR (&OnigEncodingEUC_KR) #define ONIG_ENCODING_EUC_CN (&OnigEncodingEUC_CN) #define ONIG_ENCODING_SJIS (&OnigEncodingSJIS) #define ONIG_ENCODING_KOI8 (&OnigEncodingKOI8) #define ONIG_ENCODING_KOI8_R (&OnigEncodingKOI8_R) #define ONIG_ENCODING_CP1251 (&OnigEncodingCP1251) #define ONIG_ENCODING_BIG5 (&OnigEncodingBIG5) #define ONIG_ENCODING_GB18030 (&OnigEncodingGB18030) #define ONIG_ENCODING_UNDEF ((OnigEncoding )0) /* work size */ #define ONIGENC_CODE_TO_MBC_MAXLEN 7 #define ONIGENC_MBC_CASE_FOLD_MAXLEN 18 /* 18: 6(max-byte) * 3(case-fold chars) */ /* character types */ typedef enum { ONIGENC_CTYPE_NEWLINE = 0, ONIGENC_CTYPE_ALPHA = 1, ONIGENC_CTYPE_BLANK = 2, ONIGENC_CTYPE_CNTRL = 3, ONIGENC_CTYPE_DIGIT = 4, ONIGENC_CTYPE_GRAPH = 5, ONIGENC_CTYPE_LOWER = 6, ONIGENC_CTYPE_PRINT = 7, ONIGENC_CTYPE_PUNCT = 8, ONIGENC_CTYPE_SPACE = 9, ONIGENC_CTYPE_UPPER = 10, ONIGENC_CTYPE_XDIGIT = 11, ONIGENC_CTYPE_WORD = 12, ONIGENC_CTYPE_ALNUM = 13, /* alpha || digit */ ONIGENC_CTYPE_ASCII = 14 } OnigEncCtype; #define ONIGENC_MAX_STD_CTYPE ONIGENC_CTYPE_ASCII #define onig_enc_len(enc,p,end) ONIGENC_MBC_ENC_LEN(enc,p) #define ONIGENC_IS_UNDEF(enc) ((enc) == ONIG_ENCODING_UNDEF) #define ONIGENC_IS_SINGLEBYTE(enc) (ONIGENC_MBC_MAXLEN(enc) == 1) #define ONIGENC_IS_MBC_HEAD(enc,p) (ONIGENC_MBC_ENC_LEN(enc,p) != 1) #define ONIGENC_IS_MBC_ASCII(p) (*(p) < 128) #define ONIGENC_IS_CODE_ASCII(code) ((code) < 128) #define ONIGENC_IS_MBC_WORD(enc,s,end) \ ONIGENC_IS_CODE_WORD(enc,ONIGENC_MBC_TO_CODE(enc,s,end)) #define ONIGENC_IS_MBC_WORD_ASCII(enc,s,end) onigenc_is_mbc_word_ascii(enc,s,end) #define ONIGENC_NAME(enc) ((enc)->name) #define ONIGENC_MBC_CASE_FOLD(enc,flag,pp,end,buf) \ (enc)->mbc_case_fold(flag,(const OnigUChar** )pp,end,buf) #define ONIGENC_IS_ALLOWED_REVERSE_MATCH(enc,s,end) \ (enc)->is_allowed_reverse_match(s,end) #define ONIGENC_LEFT_ADJUST_CHAR_HEAD(enc,start,s) \ (enc)->left_adjust_char_head(start, s) #define ONIGENC_IS_VALID_MBC_STRING(enc,s,end) \ (enc)->is_valid_mbc_string(s,end) #define ONIGENC_APPLY_ALL_CASE_FOLD(enc,case_fold_flag,f,arg) \ (enc)->apply_all_case_fold(case_fold_flag,f,arg) #define ONIGENC_GET_CASE_FOLD_CODES_BY_STR(enc,case_fold_flag,p,end,acs) \ (enc)->get_case_fold_codes_by_str(case_fold_flag,p,end,acs) #define ONIGENC_STEP_BACK(enc,start,s,n) \ onigenc_step_back((enc),(start),(s),(n)) #define ONIGENC_MBC_ENC_LEN(enc,p) (enc)->mbc_enc_len(p) #define ONIGENC_MBC_MAXLEN(enc) ((enc)->max_enc_len) #define ONIGENC_MBC_MAXLEN_DIST(enc) ONIGENC_MBC_MAXLEN(enc) #define ONIGENC_MBC_MINLEN(enc) ((enc)->min_enc_len) #define ONIGENC_IS_MBC_NEWLINE(enc,p,end) (enc)->is_mbc_newline((p),(end)) #define ONIGENC_MBC_TO_CODE(enc,p,end) (enc)->mbc_to_code((p),(end)) #define ONIGENC_CODE_TO_MBCLEN(enc,code) (enc)->code_to_mbclen(code) #define ONIGENC_CODE_TO_MBC(enc,code,buf) (enc)->code_to_mbc(code,buf) #define ONIGENC_PROPERTY_NAME_TO_CTYPE(enc,p,end) \ (enc)->property_name_to_ctype(enc,p,end) #define ONIGENC_IS_CODE_CTYPE(enc,code,ctype) (enc)->is_code_ctype(code,ctype) #define ONIGENC_IS_CODE_NEWLINE(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_NEWLINE) #define ONIGENC_IS_CODE_GRAPH(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_GRAPH) #define ONIGENC_IS_CODE_PRINT(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PRINT) #define ONIGENC_IS_CODE_ALNUM(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALNUM) #define ONIGENC_IS_CODE_ALPHA(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_ALPHA) #define ONIGENC_IS_CODE_LOWER(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_LOWER) #define ONIGENC_IS_CODE_UPPER(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_UPPER) #define ONIGENC_IS_CODE_CNTRL(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_CNTRL) #define ONIGENC_IS_CODE_PUNCT(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_PUNCT) #define ONIGENC_IS_CODE_SPACE(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_SPACE) #define ONIGENC_IS_CODE_BLANK(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_BLANK) #define ONIGENC_IS_CODE_DIGIT(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_DIGIT) #define ONIGENC_IS_CODE_XDIGIT(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_XDIGIT) #define ONIGENC_IS_CODE_WORD(enc,code) \ ONIGENC_IS_CODE_CTYPE(enc,code,ONIGENC_CTYPE_WORD) #define ONIGENC_GET_CTYPE_CODE_RANGE(enc,ctype,sbout,ranges) \ (enc)->get_ctype_code_range(ctype,sbout,ranges) ONIG_EXTERN OnigUChar* onigenc_step_back P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, int n)); /* encoding API */ ONIG_EXTERN int onigenc_init P_((void)); ONIG_EXTERN int onig_initialize_encoding P_((OnigEncoding enc)); ONIG_EXTERN int onigenc_set_default_encoding P_((OnigEncoding enc)); ONIG_EXTERN OnigEncoding onigenc_get_default_encoding P_((void)); ONIG_EXTERN void onigenc_set_default_caseconv_table P_((const OnigUChar* table)); ONIG_EXTERN OnigUChar* onigenc_get_right_adjust_char_head_with_prev P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s, const OnigUChar** prev)); ONIG_EXTERN OnigUChar* onigenc_get_prev_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s)); ONIG_EXTERN OnigUChar* onigenc_get_left_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s)); ONIG_EXTERN OnigUChar* onigenc_get_right_adjust_char_head P_((OnigEncoding enc, const OnigUChar* start, const OnigUChar* s)); ONIG_EXTERN int onigenc_strlen P_((OnigEncoding enc, const OnigUChar* p, const OnigUChar* end)); ONIG_EXTERN int onigenc_strlen_null P_((OnigEncoding enc, const OnigUChar* p)); ONIG_EXTERN int onigenc_str_bytelen_null P_((OnigEncoding enc, const OnigUChar* p)); ONIG_EXTERN int onigenc_is_valid_mbc_string P_((OnigEncoding enc, const OnigUChar* s, const OnigUChar* end)); ONIG_EXTERN OnigUChar* onigenc_strdup P_((OnigEncoding enc, const OnigUChar* s, const OnigUChar* end)); /* PART: regular expression */ /* config parameters */ #define ONIG_NREGION 10 #define ONIG_MAX_CAPTURE_NUM 2147483647 /* 2**31 - 1 */ #define ONIG_MAX_BACKREF_NUM 1000 #define ONIG_MAX_REPEAT_NUM 100000 #define ONIG_MAX_MULTI_BYTE_RANGES_NUM 10000 /* constants */ #define ONIG_MAX_ERROR_MESSAGE_LEN 90 typedef unsigned int OnigOptionType; #define ONIG_OPTION_DEFAULT ONIG_OPTION_NONE /* options */ #define ONIG_OPTION_NONE 0U /* options (compile time) */ #define ONIG_OPTION_IGNORECASE 1U #define ONIG_OPTION_EXTEND (ONIG_OPTION_IGNORECASE << 1) #define ONIG_OPTION_MULTILINE (ONIG_OPTION_EXTEND << 1) #define ONIG_OPTION_SINGLELINE (ONIG_OPTION_MULTILINE << 1) #define ONIG_OPTION_FIND_LONGEST (ONIG_OPTION_SINGLELINE << 1) #define ONIG_OPTION_FIND_NOT_EMPTY (ONIG_OPTION_FIND_LONGEST << 1) #define ONIG_OPTION_NEGATE_SINGLELINE (ONIG_OPTION_FIND_NOT_EMPTY << 1) #define ONIG_OPTION_DONT_CAPTURE_GROUP (ONIG_OPTION_NEGATE_SINGLELINE << 1) #define ONIG_OPTION_CAPTURE_GROUP (ONIG_OPTION_DONT_CAPTURE_GROUP << 1) /* options (search time) */ #define ONIG_OPTION_NOTBOL (ONIG_OPTION_CAPTURE_GROUP << 1) #define ONIG_OPTION_NOTEOL (ONIG_OPTION_NOTBOL << 1) #define ONIG_OPTION_POSIX_REGION (ONIG_OPTION_NOTEOL << 1) #define ONIG_OPTION_CHECK_VALIDITY_OF_STRING (ONIG_OPTION_POSIX_REGION << 1) /* #define ONIG_OPTION_CRLF_AS_LINE_SEPARATOR (ONIG_OPTION_CHECK_VALIDITY_OF_STRING << 1) */ /* options (compile time) */ #define ONIG_OPTION_WORD_IS_ASCII (ONIG_OPTION_CHECK_VALIDITY_OF_STRING << 4) #define ONIG_OPTION_DIGIT_IS_ASCII (ONIG_OPTION_WORD_IS_ASCII << 1) #define ONIG_OPTION_SPACE_IS_ASCII (ONIG_OPTION_DIGIT_IS_ASCII << 1) #define ONIG_OPTION_POSIX_IS_ASCII (ONIG_OPTION_SPACE_IS_ASCII << 1) #define ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER (ONIG_OPTION_POSIX_IS_ASCII << 1) #define ONIG_OPTION_TEXT_SEGMENT_WORD (ONIG_OPTION_TEXT_SEGMENT_EXTENDED_GRAPHEME_CLUSTER << 1) #define ONIG_OPTION_MAXBIT ONIG_OPTION_TEXT_SEGMENT_WORD /* limit */ #define ONIG_OPTION_ON(options,regopt) ((options) |= (regopt)) #define ONIG_OPTION_OFF(options,regopt) ((options) &= ~(regopt)) #define ONIG_IS_OPTION_ON(options,option) ((options) & (option)) /* syntax */ typedef struct { unsigned int op; unsigned int op2; unsigned int behavior; OnigOptionType options; /* default option */ OnigMetaCharTableType meta_char_table; } OnigSyntaxType; ONIG_EXTERN OnigSyntaxType OnigSyntaxASIS; ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixBasic; ONIG_EXTERN OnigSyntaxType OnigSyntaxPosixExtended; ONIG_EXTERN OnigSyntaxType OnigSyntaxEmacs; ONIG_EXTERN OnigSyntaxType OnigSyntaxGrep; ONIG_EXTERN OnigSyntaxType OnigSyntaxGnuRegex; ONIG_EXTERN OnigSyntaxType OnigSyntaxJava; ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl; ONIG_EXTERN OnigSyntaxType OnigSyntaxPerl_NG; ONIG_EXTERN OnigSyntaxType OnigSyntaxRuby; ONIG_EXTERN OnigSyntaxType OnigSyntaxOniguruma; /* predefined syntaxes (see regsyntax.c) */ #define ONIG_SYNTAX_ASIS (&OnigSyntaxASIS) #define ONIG_SYNTAX_POSIX_BASIC (&OnigSyntaxPosixBasic) #define ONIG_SYNTAX_POSIX_EXTENDED (&OnigSyntaxPosixExtended) #define ONIG_SYNTAX_EMACS (&OnigSyntaxEmacs) #define ONIG_SYNTAX_GREP (&OnigSyntaxGrep) #define ONIG_SYNTAX_GNU_REGEX (&OnigSyntaxGnuRegex) #define ONIG_SYNTAX_JAVA (&OnigSyntaxJava) #define ONIG_SYNTAX_PERL (&OnigSyntaxPerl) #define ONIG_SYNTAX_PERL_NG (&OnigSyntaxPerl_NG) #define ONIG_SYNTAX_RUBY (&OnigSyntaxRuby) #define ONIG_SYNTAX_ONIGURUMA (&OnigSyntaxOniguruma) /* default syntax */ ONIG_EXTERN OnigSyntaxType* OnigDefaultSyntax; #define ONIG_SYNTAX_DEFAULT OnigDefaultSyntax /* syntax (operators) */ #define ONIG_SYN_OP_VARIABLE_META_CHARACTERS (1U<<0) #define ONIG_SYN_OP_DOT_ANYCHAR (1U<<1) /* . */ #define ONIG_SYN_OP_ASTERISK_ZERO_INF (1U<<2) /* * */ #define ONIG_SYN_OP_ESC_ASTERISK_ZERO_INF (1U<<3) #define ONIG_SYN_OP_PLUS_ONE_INF (1U<<4) /* + */ #define ONIG_SYN_OP_ESC_PLUS_ONE_INF (1U<<5) #define ONIG_SYN_OP_QMARK_ZERO_ONE (1U<<6) /* ? */ #define ONIG_SYN_OP_ESC_QMARK_ZERO_ONE (1U<<7) #define ONIG_SYN_OP_BRACE_INTERVAL (1U<<8) /* {lower,upper} */ #define ONIG_SYN_OP_ESC_BRACE_INTERVAL (1U<<9) /* \{lower,upper\} */ #define ONIG_SYN_OP_VBAR_ALT (1U<<10) /* | */ #define ONIG_SYN_OP_ESC_VBAR_ALT (1U<<11) /* \| */ #define ONIG_SYN_OP_LPAREN_SUBEXP (1U<<12) /* (...) */ #define ONIG_SYN_OP_ESC_LPAREN_SUBEXP (1U<<13) /* \(...\) */ #define ONIG_SYN_OP_ESC_AZ_BUF_ANCHOR (1U<<14) /* \A, \Z, \z */ #define ONIG_SYN_OP_ESC_CAPITAL_G_BEGIN_ANCHOR (1U<<15) /* \G */ #define ONIG_SYN_OP_DECIMAL_BACKREF (1U<<16) /* \num */ #define ONIG_SYN_OP_BRACKET_CC (1U<<17) /* [...] */ #define ONIG_SYN_OP_ESC_W_WORD (1U<<18) /* \w, \W */ #define ONIG_SYN_OP_ESC_LTGT_WORD_BEGIN_END (1U<<19) /* \<. \> */ #define ONIG_SYN_OP_ESC_B_WORD_BOUND (1U<<20) /* \b, \B */ #define ONIG_SYN_OP_ESC_S_WHITE_SPACE (1U<<21) /* \s, \S */ #define ONIG_SYN_OP_ESC_D_DIGIT (1U<<22) /* \d, \D */ #define ONIG_SYN_OP_LINE_ANCHOR (1U<<23) /* ^, $ */ #define ONIG_SYN_OP_POSIX_BRACKET (1U<<24) /* [:xxxx:] */ #define ONIG_SYN_OP_QMARK_NON_GREEDY (1U<<25) /* ??,*?,+?,{n,m}? */ #define ONIG_SYN_OP_ESC_CONTROL_CHARS (1U<<26) /* \n,\r,\t,\a ... */ #define ONIG_SYN_OP_ESC_C_CONTROL (1U<<27) /* \cx */ #define ONIG_SYN_OP_ESC_OCTAL3 (1U<<28) /* \OOO */ #define ONIG_SYN_OP_ESC_X_HEX2 (1U<<29) /* \xHH */ #define ONIG_SYN_OP_ESC_X_BRACE_HEX8 (1U<<30) /* \x{7HHHHHHH} */ #define ONIG_SYN_OP_ESC_O_BRACE_OCTAL (1U<<31) /* \o{1OOOOOOOOOO} */ #define ONIG_SYN_OP2_ESC_CAPITAL_Q_QUOTE (1U<<0) /* \Q...\E */ #define ONIG_SYN_OP2_QMARK_GROUP_EFFECT (1U<<1) /* (?...) */ #define ONIG_SYN_OP2_OPTION_PERL (1U<<2) /* (?imsx),(?-imsx) */ #define ONIG_SYN_OP2_OPTION_RUBY (1U<<3) /* (?imx), (?-imx) */ #define ONIG_SYN_OP2_PLUS_POSSESSIVE_REPEAT (1U<<4) /* ?+,*+,++ */ #define ONIG_SYN_OP2_PLUS_POSSESSIVE_INTERVAL (1U<<5) /* {n,m}+ */ #define ONIG_SYN_OP2_CCLASS_SET_OP (1U<<6) /* [...&&..[..]..] */ #define ONIG_SYN_OP2_QMARK_LT_NAMED_GROUP (1U<<7) /* (?...) */ #define ONIG_SYN_OP2_ESC_K_NAMED_BACKREF (1U<<8) /* \k */ #define ONIG_SYN_OP2_ESC_G_SUBEXP_CALL (1U<<9) /* \g, \g */ #define ONIG_SYN_OP2_ATMARK_CAPTURE_HISTORY (1U<<10) /* (?@..),(?@..) */ #define ONIG_SYN_OP2_ESC_CAPITAL_C_BAR_CONTROL (1U<<11) /* \C-x */ #define ONIG_SYN_OP2_ESC_CAPITAL_M_BAR_META (1U<<12) /* \M-x */ #define ONIG_SYN_OP2_ESC_V_VTAB (1U<<13) /* \v as VTAB */ #define ONIG_SYN_OP2_ESC_U_HEX4 (1U<<14) /* \uHHHH */ #define ONIG_SYN_OP2_ESC_GNU_BUF_ANCHOR (1U<<15) /* \`, \' */ #define ONIG_SYN_OP2_ESC_P_BRACE_CHAR_PROPERTY (1U<<16) /* \p{...}, \P{...} */ #define ONIG_SYN_OP2_ESC_P_BRACE_CIRCUMFLEX_NOT (1U<<17) /* \p{^..}, \P{^..} */ /* #define ONIG_SYN_OP2_CHAR_PROPERTY_PREFIX_IS (1U<<18) */ #define ONIG_SYN_OP2_ESC_H_XDIGIT (1U<<19) /* \h, \H */ #define ONIG_SYN_OP2_INEFFECTIVE_ESCAPE (1U<<20) /* \ */ #define ONIG_SYN_OP2_QMARK_LPAREN_IF_ELSE (1U<<21) /* (?(n)) (?(...)...|...) */ #define ONIG_SYN_OP2_ESC_CAPITAL_K_KEEP (1U<<22) /* \K */ #define ONIG_SYN_OP2_ESC_CAPITAL_R_GENERAL_NEWLINE (1U<<23) /* \R \r\n else [\x0a-\x0d] */ #define ONIG_SYN_OP2_ESC_CAPITAL_N_O_SUPER_DOT (1U<<24) /* \N (?-m:.), \O (?m:.) */ #define ONIG_SYN_OP2_QMARK_TILDE_ABSENT_GROUP (1U<<25) /* (?~...) */ #define ONIG_SYN_OP2_ESC_X_Y_GRAPHEME_CLUSTER (1U<<26) /* obsoleted: use next */ #define ONIG_SYN_OP2_ESC_X_Y_TEXT_SEGMENT (1U<<26) /* \X \y \Y */ #define ONIG_SYN_OP2_QMARK_PERL_SUBEXP_CALL (1U<<27) /* (?R), (?&name)... */ #define ONIG_SYN_OP2_QMARK_BRACE_CALLOUT_CONTENTS (1U<<28) /* (?{...}) (?{{...}}) */ #define ONIG_SYN_OP2_ASTERISK_CALLOUT_NAME (1U<<29) /* (*name) (*name{a,..}) */ #define ONIG_SYN_OP2_OPTION_ONIGURUMA (1U<<30) /* (?imxWDSPy) */ /* syntax (behavior) */ #define ONIG_SYN_CONTEXT_INDEP_ANCHORS (1U<<31) /* not implemented */ #define ONIG_SYN_CONTEXT_INDEP_REPEAT_OPS (1U<<0) /* ?, *, +, {n,m} */ #define ONIG_SYN_CONTEXT_INVALID_REPEAT_OPS (1U<<1) /* error or ignore */ #define ONIG_SYN_ALLOW_UNMATCHED_CLOSE_SUBEXP (1U<<2) /* ...)... */ #define ONIG_SYN_ALLOW_INVALID_INTERVAL (1U<<3) /* {??? */ #define ONIG_SYN_ALLOW_INTERVAL_LOW_ABBREV (1U<<4) /* {,n} => {0,n} */ #define ONIG_SYN_STRICT_CHECK_BACKREF (1U<<5) /* /(\1)/,/\1()/ ..*/ #define ONIG_SYN_DIFFERENT_LEN_ALT_LOOK_BEHIND (1U<<6) /* (?<=a|bc) */ #define ONIG_SYN_CAPTURE_ONLY_NAMED_GROUP (1U<<7) /* see doc/RE */ #define ONIG_SYN_ALLOW_MULTIPLEX_DEFINITION_NAME (1U<<8) /* (?)(?) */ #define ONIG_SYN_FIXED_INTERVAL_IS_GREEDY_ONLY (1U<<9) /* a{n}?=(?:a{n})? */ /* syntax (behavior) in char class [...] */ #define ONIG_SYN_NOT_NEWLINE_IN_NEGATIVE_CC (1U<<20) /* [^...] */ #define ONIG_SYN_BACKSLASH_ESCAPE_IN_CC (1U<<21) /* [..\w..] etc.. */ #define ONIG_SYN_ALLOW_EMPTY_RANGE_IN_CC (1U<<22) #define ONIG_SYN_ALLOW_DOUBLE_RANGE_OP_IN_CC (1U<<23) /* [0-9-a]=[0-9\-a] */ #define ONIG_SYN_ALLOW_INVALID_CODE_END_OF_RANGE_IN_CC (1U<<26) /* syntax (behavior) warning */ #define ONIG_SYN_WARN_CC_OP_NOT_ESCAPED (1U<<24) /* [,-,] */ #define ONIG_SYN_WARN_REDUNDANT_NESTED_REPEAT (1U<<25) /* (?:a*)+ */ /* meta character specifiers (onig_set_meta_char()) */ #define ONIG_META_CHAR_ESCAPE 0 #define ONIG_META_CHAR_ANYCHAR 1 #define ONIG_META_CHAR_ANYTIME 2 #define ONIG_META_CHAR_ZERO_OR_ONE_TIME 3 #define ONIG_META_CHAR_ONE_OR_MORE_TIME 4 #define ONIG_META_CHAR_ANYCHAR_ANYTIME 5 #define ONIG_INEFFECTIVE_META_CHAR 0 /* error codes */ #define ONIG_IS_PATTERN_ERROR(ecode) ((ecode) <= -100 && (ecode) > -1000) /* normal return */ #define ONIG_NORMAL 0 #define ONIG_MISMATCH -1 #define ONIG_NO_SUPPORT_CONFIG -2 #define ONIG_ABORT -3 /* internal error */ #define ONIGERR_MEMORY -5 #define ONIGERR_TYPE_BUG -6 #define ONIGERR_PARSER_BUG -11 #define ONIGERR_STACK_BUG -12 #define ONIGERR_UNDEFINED_BYTECODE -13 #define ONIGERR_UNEXPECTED_BYTECODE -14 #define ONIGERR_MATCH_STACK_LIMIT_OVER -15 #define ONIGERR_PARSE_DEPTH_LIMIT_OVER -16 #define ONIGERR_RETRY_LIMIT_IN_MATCH_OVER -17 #define ONIGERR_DEFAULT_ENCODING_IS_NOT_SETTED -21 #define ONIGERR_SPECIFIED_ENCODING_CANT_CONVERT_TO_WIDE_CHAR -22 #define ONIGERR_FAIL_TO_INITIALIZE -23 /* general error */ #define ONIGERR_INVALID_ARGUMENT -30 /* syntax error */ #define ONIGERR_END_PATTERN_AT_LEFT_BRACE -100 #define ONIGERR_END_PATTERN_AT_LEFT_BRACKET -101 #define ONIGERR_EMPTY_CHAR_CLASS -102 #define ONIGERR_PREMATURE_END_OF_CHAR_CLASS -103 #define ONIGERR_END_PATTERN_AT_ESCAPE -104 #define ONIGERR_END_PATTERN_AT_META -105 #define ONIGERR_END_PATTERN_AT_CONTROL -106 #define ONIGERR_META_CODE_SYNTAX -108 #define ONIGERR_CONTROL_CODE_SYNTAX -109 #define ONIGERR_CHAR_CLASS_VALUE_AT_END_OF_RANGE -110 #define ONIGERR_CHAR_CLASS_VALUE_AT_START_OF_RANGE -111 #define ONIGERR_UNMATCHED_RANGE_SPECIFIER_IN_CHAR_CLASS -112 #define ONIGERR_TARGET_OF_REPEAT_OPERATOR_NOT_SPECIFIED -113 #define ONIGERR_TARGET_OF_REPEAT_OPERATOR_INVALID -114 #define ONIGERR_NESTED_REPEAT_OPERATOR -115 #define ONIGERR_UNMATCHED_CLOSE_PARENTHESIS -116 #define ONIGERR_END_PATTERN_WITH_UNMATCHED_PARENTHESIS -117 #define ONIGERR_END_PATTERN_IN_GROUP -118 #define ONIGERR_UNDEFINED_GROUP_OPTION -119 #define ONIGERR_INVALID_POSIX_BRACKET_TYPE -121 #define ONIGERR_INVALID_LOOK_BEHIND_PATTERN -122 #define ONIGERR_INVALID_REPEAT_RANGE_PATTERN -123 /* values error (syntax error) */ #define ONIGERR_TOO_BIG_NUMBER -200 #define ONIGERR_TOO_BIG_NUMBER_FOR_REPEAT_RANGE -201 #define ONIGERR_UPPER_SMALLER_THAN_LOWER_IN_REPEAT_RANGE -202 #define ONIGERR_EMPTY_RANGE_IN_CHAR_CLASS -203 #define ONIGERR_MISMATCH_CODE_LENGTH_IN_CLASS_RANGE -204 #define ONIGERR_TOO_MANY_MULTI_BYTE_RANGES -205 #define ONIGERR_TOO_SHORT_MULTI_BYTE_STRING -206 #define ONIGERR_TOO_BIG_BACKREF_NUMBER -207 #define ONIGERR_INVALID_BACKREF -208 #define ONIGERR_NUMBERED_BACKREF_OR_CALL_NOT_ALLOWED -209 #define ONIGERR_TOO_MANY_CAPTURES -210 #define ONIGERR_TOO_LONG_WIDE_CHAR_VALUE -212 #define ONIGERR_EMPTY_GROUP_NAME -214 #define ONIGERR_INVALID_GROUP_NAME -215 #define ONIGERR_INVALID_CHAR_IN_GROUP_NAME -216 #define ONIGERR_UNDEFINED_NAME_REFERENCE -217 #define ONIGERR_UNDEFINED_GROUP_REFERENCE -218 #define ONIGERR_MULTIPLEX_DEFINED_NAME -219 #define ONIGERR_MULTIPLEX_DEFINITION_NAME_CALL -220 #define ONIGERR_NEVER_ENDING_RECURSION -221 #define ONIGERR_GROUP_NUMBER_OVER_FOR_CAPTURE_HISTORY -222 #define ONIGERR_INVALID_CHAR_PROPERTY_NAME -223 #define ONIGERR_INVALID_IF_ELSE_SYNTAX -224 #define ONIGERR_INVALID_ABSENT_GROUP_PATTERN -225 #define ONIGERR_INVALID_ABSENT_GROUP_GENERATOR_PATTERN -226 #define ONIGERR_INVALID_CALLOUT_PATTERN -227 #define ONIGERR_INVALID_CALLOUT_NAME -228 #define ONIGERR_UNDEFINED_CALLOUT_NAME -229 #define ONIGERR_INVALID_CALLOUT_BODY -230 #define ONIGERR_INVALID_CALLOUT_TAG_NAME -231 #define ONIGERR_INVALID_CALLOUT_ARG -232 #define ONIGERR_INVALID_CODE_POINT_VALUE -400 #define ONIGERR_INVALID_WIDE_CHAR_VALUE -400 #define ONIGERR_TOO_BIG_WIDE_CHAR_VALUE -401 #define ONIGERR_NOT_SUPPORTED_ENCODING_COMBINATION -402 #define ONIGERR_INVALID_COMBINATION_OF_OPTIONS -403 #define ONIGERR_TOO_MANY_USER_DEFINED_OBJECTS -404 #define ONIGERR_TOO_LONG_PROPERTY_NAME -405 #define ONIGERR_LIBRARY_IS_NOT_INITIALIZED -500 /* errors related to thread */ /* #define ONIGERR_OVER_THREAD_PASS_LIMIT_COUNT -1001 */ /* must be smaller than MEM_STATUS_BITS_NUM (unsigned int * 8) */ #define ONIG_MAX_CAPTURE_HISTORY_GROUP 31 #define ONIG_IS_CAPTURE_HISTORY_GROUP(r, i) \ ((i) <= ONIG_MAX_CAPTURE_HISTORY_GROUP && (r)->list && (r)->list[i]) typedef struct OnigCaptureTreeNodeStruct { int group; /* group number */ int beg; int end; int allocated; int num_childs; struct OnigCaptureTreeNodeStruct** childs; } OnigCaptureTreeNode; /* match result region type */ struct re_registers { int allocated; int num_regs; int* beg; int* end; /* extended */ OnigCaptureTreeNode* history_root; /* capture history tree root */ }; /* capture tree traverse */ #define ONIG_TRAVERSE_CALLBACK_AT_FIRST 1 #define ONIG_TRAVERSE_CALLBACK_AT_LAST 2 #define ONIG_TRAVERSE_CALLBACK_AT_BOTH \ ( ONIG_TRAVERSE_CALLBACK_AT_FIRST | ONIG_TRAVERSE_CALLBACK_AT_LAST ) #define ONIG_REGION_NOTPOS -1 typedef struct re_registers OnigRegion; typedef struct { OnigEncoding enc; OnigUChar* par; OnigUChar* par_end; } OnigErrorInfo; typedef struct { int lower; int upper; } OnigRepeatRange; typedef void (*OnigWarnFunc) P_((const char* s)); extern void onig_null_warn P_((const char* s)); #define ONIG_NULL_WARN onig_null_warn #define ONIG_CHAR_TABLE_SIZE 256 struct re_pattern_buffer; typedef struct re_pattern_buffer OnigRegexType; typedef OnigRegexType* OnigRegex; #ifndef ONIG_ESCAPE_REGEX_T_COLLISION typedef OnigRegexType regex_t; #endif struct OnigRegSetStruct; typedef struct OnigRegSetStruct OnigRegSet; typedef enum { ONIG_REGSET_POSITION_LEAD = 0, ONIG_REGSET_REGEX_LEAD = 1, ONIG_REGSET_PRIORITY_TO_REGEX_ORDER = 2 } OnigRegSetLead; typedef struct { int num_of_elements; OnigEncoding pattern_enc; OnigEncoding target_enc; OnigSyntaxType* syntax; OnigOptionType option; OnigCaseFoldType case_fold_flag; } OnigCompileInfo; /* types for callout */ typedef enum { ONIG_CALLOUT_IN_PROGRESS = 1, /* 1<<0 */ ONIG_CALLOUT_IN_RETRACTION = 2 /* 1<<1 */ } OnigCalloutIn; #define ONIG_CALLOUT_IN_BOTH (ONIG_CALLOUT_IN_PROGRESS | ONIG_CALLOUT_IN_RETRACTION) typedef enum { ONIG_CALLOUT_OF_CONTENTS = 0, ONIG_CALLOUT_OF_NAME = 1 } OnigCalloutOf; typedef enum { ONIG_CALLOUT_TYPE_SINGLE = 0, ONIG_CALLOUT_TYPE_START_CALL = 1, ONIG_CALLOUT_TYPE_BOTH_CALL = 2, ONIG_CALLOUT_TYPE_START_MARK_END_CALL = 3, } OnigCalloutType; #define ONIG_NON_NAME_ID -1 #define ONIG_NON_CALLOUT_NUM 0 #define ONIG_CALLOUT_MAX_ARGS_NUM 4 #define ONIG_CALLOUT_DATA_SLOT_NUM 5 struct OnigCalloutArgsStruct; typedef struct OnigCalloutArgsStruct OnigCalloutArgs; typedef int (*OnigCalloutFunc)(OnigCalloutArgs* args, void* user_data); /* callout function return values (less than -1: error code) */ typedef enum { ONIG_CALLOUT_FAIL = 1, ONIG_CALLOUT_SUCCESS = 0 } OnigCalloutResult; typedef enum { ONIG_TYPE_VOID = 0, ONIG_TYPE_LONG = 1<<0, ONIG_TYPE_CHAR = 1<<1, ONIG_TYPE_STRING = 1<<2, ONIG_TYPE_POINTER = 1<<3, ONIG_TYPE_TAG = 1<<4, } OnigType; typedef union { long l; OnigCodePoint c; struct { OnigUChar* start; OnigUChar* end; } s; void* p; int tag; /* tag -> callout_num */ } OnigValue; struct OnigMatchParamStruct; typedef struct OnigMatchParamStruct OnigMatchParam; /* Oniguruma Native API */ ONIG_EXTERN int onig_initialize P_((OnigEncoding encodings[], int number_of_encodings)); /* onig_init(): deprecated function. Use onig_initialize(). */ ONIG_EXTERN int onig_init P_((void)); ONIG_EXTERN int onig_error_code_to_str PV_((OnigUChar* s, int err_code, ...)); ONIG_EXTERN int onig_is_error_code_needs_param PV_((int code)); ONIG_EXTERN void onig_set_warn_func P_((OnigWarnFunc f)); ONIG_EXTERN void onig_set_verb_warn_func P_((OnigWarnFunc f)); ONIG_EXTERN int onig_new P_((OnigRegex*, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); ONIG_EXTERN int onig_reg_init P_((OnigRegex reg, OnigOptionType option, OnigCaseFoldType case_fold_flag, OnigEncoding enc, OnigSyntaxType* syntax)); int onig_new_without_alloc P_((OnigRegex, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigOptionType option, OnigEncoding enc, OnigSyntaxType* syntax, OnigErrorInfo* einfo)); ONIG_EXTERN int onig_new_deluxe P_((OnigRegex* reg, const OnigUChar* pattern, const OnigUChar* pattern_end, OnigCompileInfo* ci, OnigErrorInfo* einfo)); ONIG_EXTERN void onig_free P_((OnigRegex)); ONIG_EXTERN void onig_free_body P_((OnigRegex)); ONIG_EXTERN int onig_scan(OnigRegex reg, const OnigUChar* str, const OnigUChar* end, OnigRegion* region, OnigOptionType option, int (*scan_callback)(int, int, OnigRegion*, void*), void* callback_arg); ONIG_EXTERN int onig_search P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option)); ONIG_EXTERN int onig_search_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp)); ONIG_EXTERN int onig_match P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option)); ONIG_EXTERN int onig_match_with_param P_((OnigRegex, const OnigUChar* str, const OnigUChar* end, const OnigUChar* at, OnigRegion* region, OnigOptionType option, OnigMatchParam* mp)); ONIG_EXTERN int onig_regset_new P_((OnigRegSet** rset, int n, regex_t* regs[])); ONIG_EXTERN int onig_regset_add P_((OnigRegSet* set, regex_t* reg)); ONIG_EXTERN int onig_regset_replace P_((OnigRegSet* set, int at, regex_t* reg)); ONIG_EXTERN void onig_regset_free P_((OnigRegSet* set)); ONIG_EXTERN int onig_regset_number_of_regex P_((OnigRegSet* set)); ONIG_EXTERN regex_t* onig_regset_get_regex P_((OnigRegSet* set, int at)); ONIG_EXTERN OnigRegion* onig_regset_get_region P_((OnigRegSet* set, int at)); ONIG_EXTERN int onig_regset_search P_((OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, int* rmatch_pos)); ONIG_EXTERN int onig_regset_search_with_param P_((OnigRegSet* set, const OnigUChar* str, const OnigUChar* end, const OnigUChar* start, const OnigUChar* range, OnigRegSetLead lead, OnigOptionType option, OnigMatchParam* mps[], int* rmatch_pos)); ONIG_EXTERN OnigRegion* onig_region_new P_((void)); ONIG_EXTERN void onig_region_init P_((OnigRegion* region)); ONIG_EXTERN void onig_region_free P_((OnigRegion* region, int free_self)); ONIG_EXTERN void onig_region_copy P_((OnigRegion* to, OnigRegion* from)); ONIG_EXTERN void onig_region_clear P_((OnigRegion* region)); ONIG_EXTERN int onig_region_resize P_((OnigRegion* region, int n)); ONIG_EXTERN int onig_region_set P_((OnigRegion* region, int at, int beg, int end)); ONIG_EXTERN int onig_name_to_group_numbers P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, int** nums)); ONIG_EXTERN int onig_name_to_backref_number P_((OnigRegex reg, const OnigUChar* name, const OnigUChar* name_end, OnigRegion *region)); ONIG_EXTERN int onig_foreach_name P_((OnigRegex reg, int (*func)(const OnigUChar*, const OnigUChar*,int,int*,OnigRegex,void*), void* arg)); ONIG_EXTERN int onig_number_of_names P_((OnigRegex reg)); ONIG_EXTERN int onig_number_of_captures P_((OnigRegex reg)); ONIG_EXTERN int onig_number_of_capture_histories P_((OnigRegex reg)); ONIG_EXTERN OnigCaptureTreeNode* onig_get_capture_tree P_((OnigRegion* region)); ONIG_EXTERN int onig_capture_tree_traverse P_((OnigRegion* region, int at, int(*callback_func)(int,int,int,int,int,void*), void* arg)); ONIG_EXTERN int onig_noname_group_capture_is_active P_((OnigRegex reg)); ONIG_EXTERN OnigEncoding onig_get_encoding P_((OnigRegex reg)); ONIG_EXTERN OnigOptionType onig_get_options P_((OnigRegex reg)); ONIG_EXTERN OnigCaseFoldType onig_get_case_fold_flag P_((OnigRegex reg)); ONIG_EXTERN OnigSyntaxType* onig_get_syntax P_((OnigRegex reg)); ONIG_EXTERN int onig_set_default_syntax P_((OnigSyntaxType* syntax)); ONIG_EXTERN void onig_copy_syntax P_((OnigSyntaxType* to, OnigSyntaxType* from)); ONIG_EXTERN unsigned int onig_get_syntax_op P_((OnigSyntaxType* syntax)); ONIG_EXTERN unsigned int onig_get_syntax_op2 P_((OnigSyntaxType* syntax)); ONIG_EXTERN unsigned int onig_get_syntax_behavior P_((OnigSyntaxType* syntax)); ONIG_EXTERN OnigOptionType onig_get_syntax_options P_((OnigSyntaxType* syntax)); ONIG_EXTERN void onig_set_syntax_op P_((OnigSyntaxType* syntax, unsigned int op)); ONIG_EXTERN void onig_set_syntax_op2 P_((OnigSyntaxType* syntax, unsigned int op2)); ONIG_EXTERN void onig_set_syntax_behavior P_((OnigSyntaxType* syntax, unsigned int behavior)); ONIG_EXTERN void onig_set_syntax_options P_((OnigSyntaxType* syntax, OnigOptionType options)); ONIG_EXTERN int onig_set_meta_char P_((OnigSyntaxType* syntax, unsigned int what, OnigCodePoint code)); ONIG_EXTERN void onig_copy_encoding P_((OnigEncoding to, OnigEncoding from)); ONIG_EXTERN OnigCaseFoldType onig_get_default_case_fold_flag P_((void)); ONIG_EXTERN int onig_set_default_case_fold_flag P_((OnigCaseFoldType case_fold_flag)); ONIG_EXTERN unsigned int onig_get_match_stack_limit_size P_((void)); ONIG_EXTERN int onig_set_match_stack_limit_size P_((unsigned int size)); ONIG_EXTERN unsigned long onig_get_retry_limit_in_match P_((void)); ONIG_EXTERN int onig_set_retry_limit_in_match P_((unsigned long n)); ONIG_EXTERN unsigned int onig_get_parse_depth_limit P_((void)); ONIG_EXTERN int onig_set_capture_num_limit P_((int num)); ONIG_EXTERN int onig_set_parse_depth_limit P_((unsigned int depth)); ONIG_EXTERN int onig_unicode_define_user_property P_((const char* name, OnigCodePoint* ranges)); ONIG_EXTERN int onig_end P_((void)); ONIG_EXTERN const char* onig_version P_((void)); ONIG_EXTERN const char* onig_copyright P_((void)); /* for OnigMatchParam */ ONIG_EXTERN OnigMatchParam* onig_new_match_param P_((void)); ONIG_EXTERN void onig_free_match_param P_((OnigMatchParam* p)); ONIG_EXTERN void onig_free_match_param_content P_((OnigMatchParam* p)); ONIG_EXTERN int onig_initialize_match_param P_((OnigMatchParam* mp)); ONIG_EXTERN int onig_set_match_stack_limit_size_of_match_param P_((OnigMatchParam* param, unsigned int limit)); ONIG_EXTERN int onig_set_retry_limit_in_match_of_match_param P_((OnigMatchParam* param, unsigned long limit)); ONIG_EXTERN int onig_set_progress_callout_of_match_param P_((OnigMatchParam* param, OnigCalloutFunc f)); ONIG_EXTERN int onig_set_retraction_callout_of_match_param P_((OnigMatchParam* param, OnigCalloutFunc f)); ONIG_EXTERN int onig_set_callout_user_data_of_match_param P_((OnigMatchParam* param, void* user_data)); /* for callout functions */ ONIG_EXTERN OnigCalloutFunc onig_get_progress_callout P_((void)); ONIG_EXTERN int onig_set_progress_callout P_((OnigCalloutFunc f)); ONIG_EXTERN OnigCalloutFunc onig_get_retraction_callout P_((void)); ONIG_EXTERN int onig_set_retraction_callout P_((OnigCalloutFunc f)); ONIG_EXTERN int onig_set_callout_of_name P_((OnigEncoding enc, OnigCalloutType type, OnigUChar* name, OnigUChar* name_end, int callout_in, OnigCalloutFunc callout, OnigCalloutFunc end_callout, int arg_num, unsigned int arg_types[], int optional_arg_num, OnigValue opt_defaults[])); ONIG_EXTERN OnigUChar* onig_get_callout_name_by_name_id P_((int id)); ONIG_EXTERN int onig_get_callout_num_by_tag P_((OnigRegex reg, const OnigUChar* tag, const OnigUChar* tag_end)); ONIG_EXTERN int onig_get_callout_data_by_tag P_((OnigRegex reg, OnigMatchParam* mp, const OnigUChar* tag, const OnigUChar* tag_end, int slot, OnigType* type, OnigValue* val)); ONIG_EXTERN int onig_set_callout_data_by_tag P_((OnigRegex reg, OnigMatchParam* mp, const OnigUChar* tag, const OnigUChar* tag_end, int slot, OnigType type, OnigValue* val)); /* used in callout functions */ ONIG_EXTERN int onig_get_callout_num_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN OnigCalloutIn onig_get_callout_in_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN int onig_get_name_id_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN const OnigUChar* onig_get_contents_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN const OnigUChar* onig_get_contents_end_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN int onig_get_args_num_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN int onig_get_passed_args_num_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN int onig_get_arg_by_callout_args P_((OnigCalloutArgs* args, int index, OnigType* type, OnigValue* val)); ONIG_EXTERN const OnigUChar* onig_get_string_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN const OnigUChar* onig_get_string_end_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN const OnigUChar* onig_get_start_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN const OnigUChar* onig_get_right_range_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN const OnigUChar* onig_get_current_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN OnigRegex onig_get_regex_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN unsigned long onig_get_retry_counter_by_callout_args P_((OnigCalloutArgs* args)); ONIG_EXTERN int onig_callout_tag_is_exist_at_callout_num P_((OnigRegex reg, int callout_num)); ONIG_EXTERN const OnigUChar* onig_get_callout_tag_start P_((OnigRegex reg, int callout_num)); ONIG_EXTERN const OnigUChar* onig_get_callout_tag_end P_((OnigRegex reg, int callout_num)); ONIG_EXTERN int onig_get_callout_data_dont_clear_old P_((OnigRegex reg, OnigMatchParam* mp, int callout_num, int slot, OnigType* type, OnigValue* val)); ONIG_EXTERN int onig_get_callout_data_by_callout_args_self_dont_clear_old P_((OnigCalloutArgs* args, int slot, OnigType* type, OnigValue* val)); ONIG_EXTERN int onig_get_callout_data P_((OnigRegex reg, OnigMatchParam* mp, int callout_num, int slot, OnigType* type, OnigValue* val)); ONIG_EXTERN int onig_get_callout_data_by_callout_args P_((OnigCalloutArgs* args, int callout_num, int slot, OnigType* type, OnigValue* val)); ONIG_EXTERN int onig_get_callout_data_by_callout_args_self P_((OnigCalloutArgs* args, int slot, OnigType* type, OnigValue* val)); ONIG_EXTERN int onig_set_callout_data P_((OnigRegex reg, OnigMatchParam* mp, int callout_num, int slot, OnigType type, OnigValue* val)); ONIG_EXTERN int onig_set_callout_data_by_callout_args P_((OnigCalloutArgs* args, int callout_num, int slot, OnigType type, OnigValue* val)); ONIG_EXTERN int onig_set_callout_data_by_callout_args_self P_((OnigCalloutArgs* args, int slot, OnigType type, OnigValue* val)); ONIG_EXTERN int onig_get_capture_range_in_callout P_((OnigCalloutArgs* args, int mem_num, int* begin, int* end)); ONIG_EXTERN int onig_get_used_stack_size_in_callout P_((OnigCalloutArgs* args, int* used_num, int* used_bytes)); /* builtin callout functions */ ONIG_EXTERN int onig_builtin_fail P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_builtin_mismatch P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_builtin_error P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_builtin_count P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_builtin_total_count P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_builtin_max P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_builtin_cmp P_((OnigCalloutArgs* args, void* user_data)); ONIG_EXTERN int onig_setup_builtin_monitors_by_ascii_encoded_name P_((void* fp)); #ifdef __cplusplus } #endif #endif /* ONIGURUMA_H */ PK! | +----------------------------------------------------------------------+ */ #ifndef _PHP_MBREGEX_H #define _PHP_MBREGEX_H #if HAVE_MBREGEX #include "php.h" #include "zend.h" /* {{{ PHP_MBREGEX_FUNCTION_ENTRIES */ #define PHP_MBREGEX_FUNCTION_ENTRIES \ PHP_FE(mb_regex_encoding, arginfo_mb_regex_encoding) \ PHP_FE(mb_regex_set_options, arginfo_mb_regex_set_options) \ PHP_FE(mb_ereg, arginfo_mb_ereg) \ PHP_FE(mb_eregi, arginfo_mb_eregi) \ PHP_FE(mb_ereg_replace, arginfo_mb_ereg_replace) \ PHP_FE(mb_eregi_replace, arginfo_mb_eregi_replace) \ PHP_FE(mb_ereg_replace_callback, arginfo_mb_ereg_replace_callback) \ PHP_FE(mb_split, arginfo_mb_split) \ PHP_FE(mb_ereg_match, arginfo_mb_ereg_match) \ PHP_FE(mb_ereg_search, arginfo_mb_ereg_search) \ PHP_FE(mb_ereg_search_pos, arginfo_mb_ereg_search_pos) \ PHP_FE(mb_ereg_search_regs, arginfo_mb_ereg_search_regs) \ PHP_FE(mb_ereg_search_init, arginfo_mb_ereg_search_init) \ PHP_FE(mb_ereg_search_getregs, arginfo_mb_ereg_search_getregs) \ PHP_FE(mb_ereg_search_getpos, arginfo_mb_ereg_search_getpos) \ PHP_FE(mb_ereg_search_setpos, arginfo_mb_ereg_search_setpos) \ PHP_DEP_FALIAS(mbregex_encoding, mb_regex_encoding, arginfo_mb_regex_encoding) \ PHP_DEP_FALIAS(mbereg, mb_ereg, arginfo_mb_ereg) \ PHP_DEP_FALIAS(mberegi, mb_eregi, arginfo_mb_eregi) \ PHP_DEP_FALIAS(mbereg_replace, mb_ereg_replace, arginfo_mb_ereg_replace) \ PHP_DEP_FALIAS(mberegi_replace, mb_eregi_replace, arginfo_mb_eregi_replace) \ PHP_DEP_FALIAS(mbsplit, mb_split, arginfo_mb_split) \ PHP_DEP_FALIAS(mbereg_match, mb_ereg_match, arginfo_mb_ereg_match) \ PHP_DEP_FALIAS(mbereg_search, mb_ereg_search, arginfo_mb_ereg_search) \ PHP_DEP_FALIAS(mbereg_search_pos, mb_ereg_search_pos, arginfo_mb_ereg_search_pos) \ PHP_DEP_FALIAS(mbereg_search_regs, mb_ereg_search_regs, arginfo_mb_ereg_search_regs) \ PHP_DEP_FALIAS(mbereg_search_init, mb_ereg_search_init, arginfo_mb_ereg_search_init) \ PHP_DEP_FALIAS(mbereg_search_getregs, mb_ereg_search_getregs, arginfo_mb_ereg_search_getregs) \ PHP_DEP_FALIAS(mbereg_search_getpos, mb_ereg_search_getpos, arginfo_mb_ereg_search_getpos) \ PHP_DEP_FALIAS(mbereg_search_setpos, mb_ereg_search_setpos, arginfo_mb_ereg_search_setpos) /* }}} */ #define PHP_MBREGEX_MAXCACHE 50 PHP_MINIT_FUNCTION(mb_regex); PHP_MSHUTDOWN_FUNCTION(mb_regex); PHP_RINIT_FUNCTION(mb_regex); PHP_RSHUTDOWN_FUNCTION(mb_regex); PHP_MINFO_FUNCTION(mb_regex); typedef struct _zend_mb_regex_globals zend_mb_regex_globals; zend_mb_regex_globals *php_mb_regex_globals_alloc(void); void php_mb_regex_globals_free(zend_mb_regex_globals *pglobals); int php_mb_regex_set_mbctype(const char *enc); int php_mb_regex_set_default_mbctype(const char *encname); const char *php_mb_regex_get_mbctype(void); const char *php_mb_regex_get_default_mbctype(void); PHP_FUNCTION(mb_regex_encoding); PHP_FUNCTION(mb_ereg); PHP_FUNCTION(mb_eregi); PHP_FUNCTION(mb_ereg_replace); PHP_FUNCTION(mb_eregi_replace); PHP_FUNCTION(mb_ereg_replace_callback); PHP_FUNCTION(mb_split); PHP_FUNCTION(mb_ereg_match); PHP_FUNCTION(mb_ereg_search); PHP_FUNCTION(mb_ereg_search_pos); PHP_FUNCTION(mb_ereg_search_regs); PHP_FUNCTION(mb_ereg_search_init); PHP_FUNCTION(mb_ereg_search_getregs); PHP_FUNCTION(mb_ereg_search_getpos); PHP_FUNCTION(mb_ereg_search_setpos); PHP_FUNCTION(mb_regex_set_options); #endif /* HAVE_MBREGEX */ #endif /* _PHP_MBREGEX_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!Next/mbstring/libmbfl/config.hnu[#include "php_config.h" PK!_[%ext/mbstring/libmbfl/mbfl/eaw_table.hnu[static const struct { int begin; int end; } mbfl_eaw_table[] = { { 0x1100, 0x115f }, { 0x11a3, 0x11a7 }, { 0x11fa, 0x11ff }, { 0x2329, 0x232a }, { 0x2e80, 0x2e99 }, { 0x2e9b, 0x2ef3 }, { 0x2f00, 0x2fd5 }, { 0x2ff0, 0x2ffb }, { 0x3000, 0x303e }, { 0x3041, 0x3096 }, { 0x3099, 0x30ff }, { 0x3105, 0x312d }, { 0x3131, 0x318e }, { 0x3190, 0x31ba }, { 0x31c0, 0x31e3 }, { 0x31f0, 0x321e }, { 0x3220, 0x3247 }, { 0x3250, 0x32fe }, { 0x3300, 0x4dbf }, { 0x4e00, 0xa48c }, { 0xa490, 0xa4c6 }, { 0xa960, 0xa97c }, { 0xac00, 0xd7a3 }, { 0xd7b0, 0xd7c6 }, { 0xd7cb, 0xd7fb }, { 0xf900, 0xfaff }, { 0xfe10, 0xfe19 }, { 0xfe30, 0xfe52 }, { 0xfe54, 0xfe66 }, { 0xfe68, 0xfe6b }, { 0xff01, 0xff60 }, { 0xffe0, 0xffe6 }, { 0x1b000, 0x1b001 }, { 0x1f200, 0x1f202 }, { 0x1f210, 0x1f23a }, { 0x1f240, 0x1f248 }, { 0x1f250, 0x1f251 }, { 0x20000, 0x2fffd }, { 0x30000, 0x3fffd } }; PK!9__.ext/mbstring/libmbfl/mbfl/mbfl_filter_output.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_FILTER_OUTPUT_H #define MBFL_FILTER_OUTPUT_H MBFLAPI extern int mbfl_filter_output_pipe(int c, void* data); MBFLAPI extern int mbfl_filter_output_pipe_flush(void* data); MBFLAPI extern int mbfl_filter_output_null(int c, void* data); #endif /* MBFL_FILTER_OUTPUT_H */ PK!BlXX)ext/mbstring/libmbfl/mbfl/mbfilter_pass.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.c * by moriyoshi koizumi on 4 dec 2002. * */ #ifndef MBFL_MBFILTER_PASS_H #define MBFL_MBFILTER_PASS_H #include "mbfl_defs.h" #include "mbfilter.h" MBFLAPI extern const mbfl_encoding mbfl_encoding_pass; MBFLAPI extern const struct mbfl_convert_vtbl vtbl_pass; MBFLAPI extern int mbfl_filt_conv_pass(int c, mbfl_convert_filter *filter); #endif /* MBFL_MBFILTER_PASS_H */ PK!CF!'ext/mbstring/libmbfl/mbfl/mbfl_string.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_STRING_H #define MBFL_STRING_H #include #include "mbfl_defs.h" #include "mbfl_encoding.h" #include "mbfl_language.h" /* * string object */ typedef struct _mbfl_string { enum mbfl_no_language no_language; const mbfl_encoding *encoding; unsigned char *val; size_t len; } mbfl_string; MBFLAPI extern void mbfl_string_init(mbfl_string *string); MBFLAPI extern void mbfl_string_init_set(mbfl_string *string, mbfl_language_id no_language, const mbfl_encoding *encoding); MBFLAPI extern void mbfl_string_clear(mbfl_string *string); #ifndef NULL #define NULL 0 #endif #endif /* MBFL_STRING_H */ PK!WqPP+ext/mbstring/libmbfl/mbfl/mbfl_allocators.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_ALLOCATORS_H #define MBFL_ALLOCATORS_H #include #include "mbfl_defs.h" typedef struct _mbfl_allocators { void *(*malloc)(size_t); void *(*realloc)(void *, size_t); void *(*calloc)(size_t, size_t); void (*free)(void *); void *(*pmalloc)(size_t); void *(*prealloc)(void *, size_t); void (*pfree)(void *); } mbfl_allocators; MBFLAPI extern mbfl_allocators *__mbfl_allocators; #define mbfl_malloc (__mbfl_allocators->malloc) #define mbfl_realloc (__mbfl_allocators->realloc) #define mbfl_calloc (__mbfl_allocators->calloc) #define mbfl_free (__mbfl_allocators->free) #define mbfl_pmalloc (__mbfl_allocators->pmalloc) #define mbfl_prealloc (__mbfl_allocators->preallloc) #define mbfl_pfree (__mbfl_allocators->pfree) #endif /* MBFL_ALLOCATORS_H */ PK![M (ext/mbstring/libmbfl/mbfl/mbfl_convert.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_CONVERT_H #define MBFL_CONVERT_H #include "mbfl_defs.h" #include "mbfl_encoding.h" #include "mbfl_memory_device.h" typedef struct _mbfl_convert_filter mbfl_convert_filter; struct _mbfl_convert_filter { void (*filter_ctor)(mbfl_convert_filter *filter); void (*filter_dtor)(mbfl_convert_filter *filter); void (*filter_copy)(mbfl_convert_filter *src, mbfl_convert_filter *dest); int (*filter_function)(int c, mbfl_convert_filter *filter); int (*filter_flush)(mbfl_convert_filter *filter); int (*output_function)(int c, void *data); int (*flush_function)(void *data); void *data; int status; int cache; const mbfl_encoding *from; const mbfl_encoding *to; int illegal_mode; int illegal_substchar; size_t num_illegalchar; void *opaque; }; MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new( const mbfl_encoding *from, const mbfl_encoding *to, int (*output_function)(int, void *), int (*flush_function)(void *), void *data ); MBFLAPI extern mbfl_convert_filter *mbfl_convert_filter_new2( const struct mbfl_convert_vtbl *vtbl, int (*output_function)(int, void *), int (*flush_function)(void *), void *data ); MBFLAPI extern void mbfl_convert_filter_delete(mbfl_convert_filter *filter); MBFLAPI extern int mbfl_convert_filter_feed(int c, mbfl_convert_filter *filter); MBFLAPI extern int mbfl_convert_filter_feed_string(mbfl_convert_filter *filter, const unsigned char *p, size_t len); MBFLAPI extern int mbfl_convert_filter_flush(mbfl_convert_filter *filter); MBFLAPI extern void mbfl_convert_filter_reset(mbfl_convert_filter *filter, const mbfl_encoding *from, const mbfl_encoding *to); MBFLAPI extern void mbfl_convert_filter_copy(mbfl_convert_filter *src, mbfl_convert_filter *dist); MBFLAPI extern int mbfl_filt_conv_illegal_output(int c, mbfl_convert_filter *filter); MBFLAPI extern const struct mbfl_convert_vtbl * mbfl_convert_filter_get_vtbl(const mbfl_encoding *from, const mbfl_encoding *to); MBFLAPI extern void mbfl_filt_conv_common_ctor(mbfl_convert_filter *filter); MBFLAPI extern int mbfl_filt_conv_common_flush(mbfl_convert_filter *filter); MBFLAPI extern void mbfl_filt_conv_common_dtor(mbfl_convert_filter *filter); MBFLAPI extern int mbfl_convert_filter_devcat(mbfl_convert_filter *filter, mbfl_memory_device *src); MBFLAPI extern int mbfl_convert_filter_strcat(mbfl_convert_filter *filter, const unsigned char *p); #endif /* MBFL_CONVERT_H */ PK!c{tt)ext/mbstring/libmbfl/mbfl/mbfl_encoding.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_ENCODING_H #define MBFL_ENCODING_H #include "mbfl_defs.h" enum mbfl_no_encoding { mbfl_no_encoding_invalid = -1, mbfl_no_encoding_pass, mbfl_no_encoding_wchar, mbfl_no_encoding_byte2be, mbfl_no_encoding_byte2le, mbfl_no_encoding_byte4be, mbfl_no_encoding_byte4le, mbfl_no_encoding_base64, mbfl_no_encoding_uuencode, mbfl_no_encoding_html_ent, mbfl_no_encoding_qprint, mbfl_no_encoding_7bit, mbfl_no_encoding_8bit, mbfl_no_encoding_charset_min, mbfl_no_encoding_ucs4, mbfl_no_encoding_ucs4be, mbfl_no_encoding_ucs4le, mbfl_no_encoding_ucs2, mbfl_no_encoding_ucs2be, mbfl_no_encoding_ucs2le, mbfl_no_encoding_utf32, mbfl_no_encoding_utf32be, mbfl_no_encoding_utf32le, mbfl_no_encoding_utf16, mbfl_no_encoding_utf16be, mbfl_no_encoding_utf16le, mbfl_no_encoding_utf8, mbfl_no_encoding_utf8_docomo, mbfl_no_encoding_utf8_kddi_a, mbfl_no_encoding_utf8_kddi_b, mbfl_no_encoding_utf8_sb, mbfl_no_encoding_utf7, mbfl_no_encoding_utf7imap, mbfl_no_encoding_ascii, mbfl_no_encoding_euc_jp, mbfl_no_encoding_eucjp2004, mbfl_no_encoding_sjis, mbfl_no_encoding_eucjp_win, mbfl_no_encoding_sjis_open, mbfl_no_encoding_sjis_docomo, mbfl_no_encoding_sjis_kddi, mbfl_no_encoding_sjis_sb, mbfl_no_encoding_sjis_mac, mbfl_no_encoding_sjis2004, mbfl_no_encoding_cp932, mbfl_no_encoding_cp51932, mbfl_no_encoding_jis, mbfl_no_encoding_2022jp, mbfl_no_encoding_2022jp_2004, mbfl_no_encoding_2022jp_kddi, mbfl_no_encoding_2022jpms, mbfl_no_encoding_gb18030, mbfl_no_encoding_cp1252, mbfl_no_encoding_cp1254, mbfl_no_encoding_8859_1, mbfl_no_encoding_8859_2, mbfl_no_encoding_8859_3, mbfl_no_encoding_8859_4, mbfl_no_encoding_8859_5, mbfl_no_encoding_8859_6, mbfl_no_encoding_8859_7, mbfl_no_encoding_8859_8, mbfl_no_encoding_8859_9, mbfl_no_encoding_8859_10, mbfl_no_encoding_8859_13, mbfl_no_encoding_8859_14, mbfl_no_encoding_8859_15, mbfl_no_encoding_euc_cn, mbfl_no_encoding_cp936, mbfl_no_encoding_euc_tw, mbfl_no_encoding_big5, mbfl_no_encoding_cp950, mbfl_no_encoding_euc_kr, mbfl_no_encoding_2022kr, mbfl_no_encoding_uhc, mbfl_no_encoding_hz, mbfl_no_encoding_cp1251, mbfl_no_encoding_cp866, mbfl_no_encoding_koi8r, mbfl_no_encoding_koi8u, mbfl_no_encoding_8859_16, mbfl_no_encoding_armscii8, mbfl_no_encoding_cp850, mbfl_no_encoding_jis_ms, mbfl_no_encoding_cp50220, mbfl_no_encoding_cp50220raw, mbfl_no_encoding_cp50221, mbfl_no_encoding_cp50222, mbfl_no_encoding_charset_max }; typedef enum mbfl_no_encoding mbfl_encoding_id; struct _mbfl_convert_filter; struct mbfl_convert_vtbl { enum mbfl_no_encoding from; enum mbfl_no_encoding to; void (*filter_ctor)(struct _mbfl_convert_filter *filter); void (*filter_dtor)(struct _mbfl_convert_filter *filter); int (*filter_function)(int c, struct _mbfl_convert_filter *filter); int (*filter_flush)(struct _mbfl_convert_filter *filter); void (*filter_copy)(struct _mbfl_convert_filter *src, struct _mbfl_convert_filter *dest); }; /* * encoding */ typedef struct _mbfl_encoding { enum mbfl_no_encoding no_encoding; const char *name; const char *mime_name; const char *(*aliases)[]; const unsigned char *mblen_table; unsigned int flag; const struct mbfl_convert_vtbl *input_filter; const struct mbfl_convert_vtbl *output_filter; } mbfl_encoding; MBFLAPI extern const mbfl_encoding * mbfl_name2encoding(const char *name); MBFLAPI extern const mbfl_encoding * mbfl_no2encoding(enum mbfl_no_encoding no_encoding); MBFLAPI extern enum mbfl_no_encoding mbfl_name2no_encoding(const char *name); MBFLAPI extern const mbfl_encoding ** mbfl_get_supported_encodings(); MBFLAPI extern const char * mbfl_no_encoding2name(enum mbfl_no_encoding no_encoding); MBFLAPI extern const char * mbfl_no2preferred_mime_name(enum mbfl_no_encoding no_encoding); MBFLAPI extern int mbfl_is_support_encoding(const char *name); #endif /* MBFL_ENCODING_H */ PK!r- 3 3 &ext/mbstring/libmbfl/mbfl/mbfl_ident.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_IDENT_H #define MBFL_IDENT_H #include "mbfl_defs.h" #include "mbfl_encoding.h" /* * identify filter */ typedef struct _mbfl_identify_filter mbfl_identify_filter; struct _mbfl_identify_filter { void (*filter_ctor)(mbfl_identify_filter *filter); void (*filter_dtor)(mbfl_identify_filter *filter); int (*filter_function)(int c, mbfl_identify_filter *filter); int status; int flag; int score; const mbfl_encoding *encoding; }; struct mbfl_identify_vtbl { enum mbfl_no_encoding encoding; void (*filter_ctor)(mbfl_identify_filter *filter); void (*filter_dtor)(mbfl_identify_filter *filter); int (*filter_function)(int c, mbfl_identify_filter *filter); }; MBFLAPI extern const struct mbfl_identify_vtbl * mbfl_identify_filter_get_vtbl(enum mbfl_no_encoding encoding); MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new(enum mbfl_no_encoding encoding); MBFLAPI extern mbfl_identify_filter * mbfl_identify_filter_new2(const mbfl_encoding *encoding); MBFLAPI extern void mbfl_identify_filter_delete(mbfl_identify_filter *filter); MBFLAPI extern int mbfl_identify_filter_init(mbfl_identify_filter *filter, enum mbfl_no_encoding encoding); MBFLAPI extern int mbfl_identify_filter_init2(mbfl_identify_filter *filter, const mbfl_encoding *encoding); MBFLAPI void mbfl_identify_filter_cleanup(mbfl_identify_filter *filter); MBFLAPI extern void mbfl_filt_ident_common_ctor(mbfl_identify_filter *filter); MBFLAPI extern void mbfl_filt_ident_common_dtor(mbfl_identify_filter *filter); MBFLAPI extern void mbfl_filt_ident_false_ctor(mbfl_identify_filter *filter); MBFLAPI extern int mbfl_filt_ident_false(int c, mbfl_identify_filter *filter); MBFLAPI extern int mbfl_filt_ident_true(int c, mbfl_identify_filter *filter); #endif /* MBFL_IDENT_H */ PK!Ѩ )ext/mbstring/libmbfl/mbfl/mbfilter_8bit.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.c * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.c is included in this package . * */ #ifndef MBFL_MBFILTER_8BIT_H #define MBFL_MBFILTER_8BIT_H #include "mbfl_defs.h" #include "mbfilter.h" MBFLAPI extern const mbfl_encoding mbfl_encoding_8bit; #endif /* MBFL_MBFILTER_8BIT_H */ PK!w .ext/mbstring/libmbfl/mbfl/mbfl_memory_device.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_MEMORY_DEVICE_H #define MBFL_MEMORY_DEVICE_H #include "mbfl_defs.h" #include "mbfl_string.h" #define MBFL_MEMORY_DEVICE_ALLOC_SIZE 64 typedef struct _mbfl_memory_device { unsigned char *buffer; size_t length; size_t pos; size_t allocsz; } mbfl_memory_device; typedef struct _mbfl_wchar_device { unsigned int *buffer; size_t length; size_t pos; size_t allocsz; } mbfl_wchar_device; MBFLAPI extern void mbfl_memory_device_init( mbfl_memory_device *device, size_t initsz, size_t allocsz); MBFLAPI extern void mbfl_memory_device_realloc( mbfl_memory_device *device, size_t initsz, size_t allocsz); MBFLAPI extern void mbfl_memory_device_clear(mbfl_memory_device *device); MBFLAPI extern void mbfl_memory_device_reset(mbfl_memory_device *device); MBFLAPI extern mbfl_string * mbfl_memory_device_result( mbfl_memory_device *device, mbfl_string *result); MBFLAPI extern void mbfl_memory_device_unput(mbfl_memory_device *device); MBFLAPI extern int mbfl_memory_device_output(int c, void *data); MBFLAPI extern int mbfl_memory_device_output2(int c, void *data); MBFLAPI extern int mbfl_memory_device_output4(int c, void *data); MBFLAPI extern int mbfl_memory_device_strcat(mbfl_memory_device *device, const char *psrc); MBFLAPI extern int mbfl_memory_device_strncat( mbfl_memory_device *device, const char *psrc, size_t len); MBFLAPI extern int mbfl_memory_device_devcat(mbfl_memory_device *dest, mbfl_memory_device *src); MBFLAPI extern void mbfl_wchar_device_init(mbfl_wchar_device *device); MBFLAPI extern int mbfl_wchar_device_output(int c, void *data); MBFLAPI extern void mbfl_wchar_device_clear(mbfl_wchar_device *device); #endif /* MBFL_MEMORY_DEVICE_H */ PK!e  *ext/mbstring/libmbfl/mbfl/mbfilter_wchar.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.c * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.c is included in this package . * */ #ifndef MBFL_MBFILTER_WCHAR_H #define MBFL_MBFILTER_WCHAR_H #include "mbfl_defs.h" #include "mbfilter.h" MBFLAPI extern const mbfl_encoding mbfl_encoding_wchar; #endif /* MBFL_MBFILTER_WCHAR_H */ PK!_99'ext/mbstring/libmbfl/mbfl/mbfl_consts.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_CONSTS_H #define MBFL_CONSTS_H #define MBFL_ENCTYPE_SBCS 0x00000001 #define MBFL_ENCTYPE_MBCS 0x00000002 #define MBFL_ENCTYPE_WCS2BE 0x00000010 #define MBFL_ENCTYPE_WCS2LE 0x00000020 #define MBFL_ENCTYPE_MWC2BE 0x00000040 #define MBFL_ENCTYPE_MWC2LE 0x00000080 #define MBFL_ENCTYPE_WCS4BE 0x00000100 #define MBFL_ENCTYPE_WCS4LE 0x00000200 #define MBFL_ENCTYPE_MWC4BE 0x00000400 #define MBFL_ENCTYPE_MWC4LE 0x00000800 #define MBFL_ENCTYPE_SHFTCODE 0x00001000 #define MBFL_ENCTYPE_ENC_STRM 0x00002000 #define MBFL_ENCTYPE_GL_UNSAFE 0x00004000 /* wchar plane, special character */ #define MBFL_WCSPLANE_MASK 0xffff #define MBFL_WCSPLANE_UCS2MAX 0x00010000 #define MBFL_WCSPLANE_UTF32MAX 0x00110000 #define MBFL_WCSPLANE_SUPMIN 0x00010000 #define MBFL_WCSPLANE_SUPMAX 0x00200000 #define MBFL_WCSPLANE_JIS0213 0x70e00000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_JIS0208 0x70e10000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_JIS0212 0x70e20000 /* JIS HEX : 2121h - 7E7Eh */ #define MBFL_WCSPLANE_WINCP932 0x70e30000 /* JIS HEX : 2121h - 9898h */ #define MBFL_WCSPLANE_8859_1 0x70e40000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_2 0x70e50000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_3 0x70e60000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_4 0x70e70000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_5 0x70e80000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_6 0x70e90000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_7 0x70ea0000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_8 0x70eb0000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_9 0x70ec0000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_10 0x70ed0000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_13 0x70ee0000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_14 0x70ef0000 /* 00h - FFh */ #define MBFL_WCSPLANE_8859_15 0x70f00000 /* 00h - FFh */ #define MBFL_WCSPLANE_KSC5601 0x70f10000 /* 2121h - 7E7Eh */ #define MBFL_WCSPLANE_GB2312 0x70f20000 /* 2121h - 7E7Eh */ #define MBFL_WCSPLANE_WINCP936 0x70f30000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_BIG5 0x70f40000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_CNS11643 0x70f50000 /* 2121h - 9898h */ #define MBFL_WCSPLANE_UHC 0x70f60000 /* 8141h - fefeh */ #define MBFL_WCSPLANE_CP1251 0x70f70000 #define MBFL_WCSPLANE_CP866 0x70f80000 #define MBFL_WCSPLANE_KOI8R 0x70f90000 #define MBFL_WCSPLANE_8859_16 0x70fa0000 /* 00h - FFh */ #define MBFL_WCSPLANE_ARMSCII8 0x70fb0000 #define MBFL_WCSPLANE_KOI8U 0x70fc0000 #define MBFL_WCSPLANE_CP1254 0x70fd0000 /* 00h - FFh */ #define MBFL_WCSPLANE_CP850 0x70fe0000 /* 00h - FFh */ #define MBFL_WCSPLANE_GB18030 0x70ff0000 /* a1a1h-e3329a35h */ #define MBFL_WCSGROUP_MASK 0xffffff #define MBFL_WCSGROUP_UCS4MAX 0x70000000 #define MBFL_WCSGROUP_WCHARMAX 0x78000000 #define MBFL_WCSGROUP_THROUGH 0x78000000 /* 000000h - FFFFFFh */ #define MBFL_QPRINT_STS_MIME_HEADER 0x1000000 #define MBFL_BASE64_STS_MIME_HEADER 0x1000000 #endif /* MBFL_CONSTS_H */ PK!{8 8 )ext/mbstring/libmbfl/mbfl/mbfl_language.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_LANGUAGE_H #define MBFL_LANGUAGE_H #include "mbfl_defs.h" #include "mbfl_encoding.h" enum mbfl_no_language { mbfl_no_language_invalid = -1, mbfl_no_language_neutral, mbfl_no_language_uni, mbfl_no_language_min, mbfl_no_language_catalan, /* ca */ mbfl_no_language_danish, /* da */ mbfl_no_language_german, /* de */ mbfl_no_language_english, /* en */ mbfl_no_language_estonian, /* et */ mbfl_no_language_greek, /* el */ mbfl_no_language_spanish, /* es */ mbfl_no_language_french, /* fr */ mbfl_no_language_italian, /* it */ mbfl_no_language_japanese, /* ja */ mbfl_no_language_korean, /* ko */ mbfl_no_language_dutch, /* nl */ mbfl_no_language_polish, /* pl */ mbfl_no_language_portuguese, /* pt */ mbfl_no_language_swedish, /* sv */ mbfl_no_language_simplified_chinese, /* zh-cn */ mbfl_no_language_traditional_chinese, /* zh-tw */ mbfl_no_language_russian, /* ru */ mbfl_no_language_ukrainian, /* ua */ mbfl_no_language_armenian, /* hy */ mbfl_no_language_turkish, /* tr */ mbfl_no_language_max }; typedef enum mbfl_no_language mbfl_language_id; /* * language */ typedef struct _mbfl_language { enum mbfl_no_language no_language; const char *name; const char *short_name; const char *(*aliases)[]; enum mbfl_no_encoding mail_charset; enum mbfl_no_encoding mail_header_encoding; enum mbfl_no_encoding mail_body_encoding; } mbfl_language; MBFLAPI extern const mbfl_language * mbfl_name2language(const char *name); MBFLAPI extern const mbfl_language * mbfl_no2language(enum mbfl_no_language no_language); MBFLAPI extern enum mbfl_no_language mbfl_name2no_language(const char *name); MBFLAPI extern const char * mbfl_no_language2name(enum mbfl_no_language no_language); #endif /* MBFL_LANGUAGE_H */ PK!2pp%ext/mbstring/libmbfl/mbfl/mbfl_defs.hnu[/* * "streamable kanji code filter and converter" * Copyright (c) 1998-2002 HappySize, Inc. All rights reserved. * * LICENSE NOTICES * * This file is part of "streamable kanji code filter and converter", * which is distributed under the terms of GNU Lesser General Public * License (version 2) as published by the Free Software Foundation. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with "streamable kanji code filter and converter"; * if not, write to the Free Software Foundation, Inc., 59 Temple Place, * Suite 330, Boston, MA 02111-1307 USA * * The author of this file: * */ /* * The source code included in this files was separated from mbfilter.h * by Moriyoshi Koizumi on 20 Dec 2002. The file * mbfilter.h is included in this package . * */ #ifndef MBFL_DEFS_H #define MBFL_DEFS_H #ifndef NULL #ifdef __cplusplus #define NULL (0L) #else #define NULL (void *)(0L) #endif #endif #ifndef SIZE_MAX #define SIZE_MAX ((size_t)~0) #endif #ifdef WIN32 #ifdef MBFL_DLL_EXPORT #define MBFLAPI __declspec(dllexport) #else #define MBFLAPI __declspec(dllimport) #endif /* MBFL_DLL_EXPORT */ #else #if defined(__GNUC__) && __GNUC__ >= 4 #define MBFLAPI __attribute__((visibility("default"))) #else #define MBFLAPI #endif /* defined(__GNUC__) && __GNUC__ >= 4 */ #endif /* WIN32 */ #endif /* MBFL_DEFS_H */ PK!z(($ext/mbstring/libmbfl/mbfl/mbfilter.hnu[/* charset=UTF-8 * vim: encoding=utf-8: * */ /* * "streamable kanji code filter and converter" * * Copyright (c) 1998,1999,2000,2001 HappySize, Inc. All rights reserved. * * This software is released under the GNU Lesser General Public License. * (Version 2.1, February 1999) * Please read the following detail of the licence (in japanese). * * ◆使用許諾条件◆ * * このソフトウェアは株式会社ハッピーサイズによって開発されました。株式会社ハッ * ピーサイズは、著作権法および万国著作権条約の定めにより、このソフトウェアに関 * するすべての権利を留保する権利を持ち、ここに行使します。株式会社ハッピーサイ * ズは以下に明記した条件に従って、このソフトウェアを使用する排他的ではない権利 * をお客様に許諾します。何人たりとも、以下の条件に反してこのソフトウェアを使用 * することはできません。 * * このソフトウェアを「GNU Lesser General Public License (Version 2.1, February * 1999)」に示された条件で使用することを、全ての方に許諾します。「GNU Lesser * General Public License」を満たさない使用には、株式会社ハッピーサイズから書面 * による許諾を得る必要があります。 * * 「GNU Lesser General Public License」の全文は以下のウェブページから取得でき * ます。「GNU Lesser General Public License」とは、これまでLibrary General * Public Licenseと呼ばれていたものです。 * http://www.gnu.org/ --- GNUウェブサイト * http://www.gnu.org/copyleft/lesser.html --- ライセンス文面 * このライセンスの内容がわからない方、守れない方には使用を許諾しません。 * * しかしながら、当社とGNUプロジェクトとの特定の関係を示唆または主張するもので * はありません。 * * ◆保証内容◆ * * このソフトウェアは、期待された動作・機能・性能を持つことを目標として設計され * 開発されていますが、これを保証するものではありません。このソフトウェアは「こ * のまま」の状態で提供されており、たとえばこのソフトウェアの有用性ないし特定の * 目的に合致することといった、何らかの保証内容が、明示されたり暗黙に示されてい * る場合であっても、その保証は無効です。このソフトウェアを使用した結果ないし使 * 用しなかった結果によって、直接あるいは間接に受けた身体的な傷害、財産上の損害 * 、データの損失あるいはその他の全ての損害については、その損害の可能性が使用者 * 、当社あるいは第三者によって警告されていた場合であっても、当社はその損害の賠 * 償および補填を行いません。この規定は他の全ての、書面上または書面に無い保証・ * 契約・規定に優先します。 * * ◆著作権者の連絡先および使用条件についての問い合わせ先◆ * * 〒102-0073 * 東京都千代田区九段北1-13-5日本地所第一ビル4F * 株式会社ハッピーサイズ * Phone: 03-3512-3655, Fax: 03-3512-3656 * Email: sales@happysize.co.jp * Web: http://happysize.com/ * * ◆著者◆ * * 金本 茂 * * ◆履歴◆ * * 1998/11/10 sgk implementation in C++ * 1999/4/25 sgk Cで書きなおし。 * 1999/4/26 sgk 入力フィルタを実装。漢字コードを推定しながらフィルタを追加。 * 1999/6/?? Unicodeサポート。 * 1999/6/22 sgk ライセンスをLGPLに変更。 * */ /* * Unicode support * * Portions copyright (c) 1999,2000,2001 by the PHP3 internationalization team. * All rights reserved. * */ /* * * streamable kanji code filter and converter * mbfl : Multi Byte FiLter Liblary * */ #ifndef MBFL_MBFILTER_H #define MBFL_MBFILTER_H #include "mbfl_defs.h" #include "mbfl_consts.h" #include "mbfl_allocators.h" #include "mbfl_encoding.h" #include "mbfl_language.h" #include "mbfl_string.h" #include "mbfl_convert.h" #include "mbfl_ident.h" /* Prefer local fix, otherwise need to include too much. */ #ifndef ssize_t #if defined(_WIN64) #define ssize_t __int64 #elif defined(_WIN32) #define ssize_t __int32 #elif defined(__GNUC__) && __GNUC__ >= 4 #define ssize_t long #endif #endif /* * version information */ #define MBFL_VERSION_MAJOR 1 #define MBFL_VERSION_MINOR 3 #define MBFL_VERSION_TEENY 2 /* * convert filter */ #define MBFL_OUTPUTFILTER_ILLEGAL_MODE_NONE 0 #define MBFL_OUTPUTFILTER_ILLEGAL_MODE_CHAR 1 #define MBFL_OUTPUTFILTER_ILLEGAL_MODE_LONG 2 #define MBFL_OUTPUTFILTER_ILLEGAL_MODE_ENTITY 3 /* * convenience macros */ #ifndef MIN #define MIN(a,b) ((a)<(b)?(a):(b)) #endif /* * buffering converter */ typedef struct _mbfl_buffer_converter mbfl_buffer_converter; struct _mbfl_buffer_converter { mbfl_convert_filter *filter1; mbfl_convert_filter *filter2; mbfl_memory_device device; const mbfl_encoding *from; const mbfl_encoding *to; }; MBFLAPI extern mbfl_buffer_converter * mbfl_buffer_converter_new(const mbfl_encoding *from, const mbfl_encoding *to, size_t buf_initsz); MBFLAPI extern void mbfl_buffer_converter_delete(mbfl_buffer_converter *convd); MBFLAPI extern void mbfl_buffer_converter_reset(mbfl_buffer_converter *convd); MBFLAPI extern int mbfl_buffer_converter_illegal_mode(mbfl_buffer_converter *convd, int mode); MBFLAPI extern int mbfl_buffer_converter_illegal_substchar(mbfl_buffer_converter *convd, int substchar); MBFLAPI extern int mbfl_buffer_converter_strncat(mbfl_buffer_converter *convd, const unsigned char *p, size_t n); MBFLAPI extern int mbfl_buffer_converter_feed(mbfl_buffer_converter *convd, mbfl_string *string); MBFLAPI extern int mbfl_buffer_converter_feed2(mbfl_buffer_converter *convd, mbfl_string *string, size_t *loc); MBFLAPI extern int mbfl_buffer_converter_flush(mbfl_buffer_converter *convd); MBFLAPI extern mbfl_string * mbfl_buffer_converter_getbuffer(mbfl_buffer_converter *convd, mbfl_string *result); MBFLAPI extern mbfl_string * mbfl_buffer_converter_result(mbfl_buffer_converter *convd, mbfl_string *result); MBFLAPI extern mbfl_string * mbfl_buffer_converter_feed_result(mbfl_buffer_converter *convd, mbfl_string *string, mbfl_string *result); MBFLAPI extern size_t mbfl_buffer_illegalchars(mbfl_buffer_converter *convd); /* * encoding detector */ typedef struct _mbfl_encoding_detector mbfl_encoding_detector; struct _mbfl_encoding_detector { mbfl_identify_filter **filter_list; int filter_list_size; int strict; }; MBFLAPI extern mbfl_encoding_detector * mbfl_encoding_detector_new(const mbfl_encoding **elist, int elistsz, int strict); MBFLAPI extern void mbfl_encoding_detector_delete(mbfl_encoding_detector *identd); MBFLAPI extern int mbfl_encoding_detector_feed(mbfl_encoding_detector *identd, mbfl_string *string); MBFLAPI extern const mbfl_encoding *mbfl_encoding_detector_judge(mbfl_encoding_detector *identd); /* * encoding converter */ MBFLAPI extern mbfl_string * mbfl_convert_encoding(mbfl_string *string, mbfl_string *result, const mbfl_encoding *toenc); /* * identify encoding */ MBFLAPI extern const mbfl_encoding * mbfl_identify_encoding(mbfl_string *string, const mbfl_encoding **elist, int elistsz, int strict); /* Lengths -1 through -16 are reserved for error return values */ static inline int mbfl_is_error(size_t len) { return len >= (size_t) -16; } /* * strlen */ MBFLAPI extern size_t mbfl_strlen(mbfl_string *string); /* * oddlen */ MBFLAPI extern size_t mbfl_oddlen(mbfl_string *string); /* * strpos */ MBFLAPI extern size_t mbfl_strpos(mbfl_string *haystack, mbfl_string *needle, ssize_t offset, int reverse); /* * substr_count */ MBFLAPI extern size_t mbfl_substr_count(mbfl_string *haystack, mbfl_string *needle); /* * If specified as length, the substr until the end of the string is taken. */ #define MBFL_SUBSTR_UNTIL_END ((size_t) -1) /* * substr */ MBFLAPI extern mbfl_string * mbfl_substr(mbfl_string *string, mbfl_string *result, size_t from, size_t length); /* * strcut */ MBFLAPI extern mbfl_string * mbfl_strcut(mbfl_string *string, mbfl_string *result, size_t from, size_t length); /* * strwidth */ MBFLAPI extern size_t mbfl_strwidth(mbfl_string *string); /* * strimwidth */ MBFLAPI extern mbfl_string * mbfl_strimwidth(mbfl_string *string, mbfl_string *marker, mbfl_string *result, size_t from, size_t width); /* * MIME header encode */ struct mime_header_encoder_data; /* forward declaration */ MBFLAPI extern struct mime_header_encoder_data * mime_header_encoder_new( const mbfl_encoding *incode, const mbfl_encoding *outcode, const mbfl_encoding *encoding); MBFLAPI extern void mime_header_encoder_delete(struct mime_header_encoder_data *pe); MBFLAPI extern int mime_header_encoder_feed(int c, struct mime_header_encoder_data *pe); MBFLAPI extern mbfl_string * mime_header_encoder_result(struct mime_header_encoder_data *pe, mbfl_string *result); MBFLAPI extern mbfl_string * mbfl_mime_header_encode( mbfl_string *string, mbfl_string *result, const mbfl_encoding *outcode, const mbfl_encoding *encoding, const char *linefeed, int indent); /* * MIME header decode */ struct mime_header_decoder_data; /* forward declaration */ MBFLAPI extern struct mime_header_decoder_data * mime_header_decoder_new(const mbfl_encoding *outcode); MBFLAPI extern void mime_header_decoder_delete(struct mime_header_decoder_data *pd); MBFLAPI extern int mime_header_decoder_feed(int c, struct mime_header_decoder_data *pd); MBFLAPI extern mbfl_string * mime_header_decoder_result(struct mime_header_decoder_data *pd, mbfl_string *result); MBFLAPI extern mbfl_string * mbfl_mime_header_decode( mbfl_string *string, mbfl_string *result, const mbfl_encoding *outcode); /* * convert HTML numeric entity */ MBFLAPI extern mbfl_string * mbfl_html_numeric_entity(mbfl_string *string, mbfl_string *result, int *convmap, int mapsize, int type); /* * convert of harfwidth and fullwidth for japanese */ MBFLAPI extern mbfl_string * mbfl_ja_jp_hantozen(mbfl_string *string, mbfl_string *result, int mode); #endif /* MBFL_MBFILTER_H */ PK!,ext/mbstring/mbstring.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Tsukada Takuya | | Hironori Sato | | Shigeru Kanemoto | +----------------------------------------------------------------------+ */ #ifndef _MBSTRING_H #define _MBSTRING_H #ifdef COMPILE_DL_MBSTRING #undef HAVE_MBSTRING #define HAVE_MBSTRING 1 #endif #include "php_version.h" #define PHP_MBSTRING_VERSION PHP_VERSION #ifdef PHP_WIN32 # undef MBSTRING_API # ifdef MBSTRING_EXPORTS # define MBSTRING_API __declspec(dllexport) # elif defined(COMPILE_DL_MBSTRING) # define MBSTRING_API __declspec(dllimport) # else # define MBSTRING_API /* nothing special */ # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # undef MBSTRING_API # define MBSTRING_API __attribute__ ((visibility("default"))) #else # undef MBSTRING_API # define MBSTRING_API /* nothing special */ #endif #if HAVE_MBSTRING #include "libmbfl/mbfl/mbfilter.h" #include "SAPI.h" #define PHP_MBSTRING_API 20021024 extern zend_module_entry mbstring_module_entry; #define mbstring_module_ptr &mbstring_module_entry PHP_MINIT_FUNCTION(mbstring); PHP_MSHUTDOWN_FUNCTION(mbstring); PHP_RINIT_FUNCTION(mbstring); PHP_RSHUTDOWN_FUNCTION(mbstring); PHP_MINFO_FUNCTION(mbstring); /* functions in php_unicode.c */ PHP_FUNCTION(mb_convert_case); PHP_FUNCTION(mb_strtoupper); PHP_FUNCTION(mb_strtolower); /* php function registration */ PHP_FUNCTION(mb_language); PHP_FUNCTION(mb_internal_encoding); PHP_FUNCTION(mb_http_input); PHP_FUNCTION(mb_http_output); PHP_FUNCTION(mb_detect_order); PHP_FUNCTION(mb_substitute_character); PHP_FUNCTION(mb_preferred_mime_name); PHP_FUNCTION(mb_parse_str); PHP_FUNCTION(mb_output_handler); PHP_FUNCTION(mb_strlen); PHP_FUNCTION(mb_strpos); PHP_FUNCTION(mb_strrpos); PHP_FUNCTION(mb_stripos); PHP_FUNCTION(mb_strripos); PHP_FUNCTION(mb_strstr); PHP_FUNCTION(mb_strrchr); PHP_FUNCTION(mb_stristr); PHP_FUNCTION(mb_strrichr); PHP_FUNCTION(mb_substr_count); PHP_FUNCTION(mb_substr); PHP_FUNCTION(mb_strcut); PHP_FUNCTION(mb_strwidth); PHP_FUNCTION(mb_strimwidth); PHP_FUNCTION(mb_convert_encoding); PHP_FUNCTION(mb_detect_encoding); PHP_FUNCTION(mb_list_encodings); PHP_FUNCTION(mb_encoding_aliases); PHP_FUNCTION(mb_convert_kana); PHP_FUNCTION(mb_encode_mimeheader); PHP_FUNCTION(mb_decode_mimeheader); PHP_FUNCTION(mb_convert_variables); PHP_FUNCTION(mb_encode_numericentity); PHP_FUNCTION(mb_decode_numericentity); PHP_FUNCTION(mb_send_mail); PHP_FUNCTION(mb_get_info); PHP_FUNCTION(mb_check_encoding); PHP_FUNCTION(mb_ord); PHP_FUNCTION(mb_chr); PHP_FUNCTION(mb_scrub); MBSTRING_API char *php_mb_safe_strrchr_ex(const char *s, unsigned int c, size_t nbytes, const mbfl_encoding *enc); MBSTRING_API char *php_mb_safe_strrchr(const char *s, unsigned int c, size_t nbytes); MBSTRING_API char *php_mb_convert_encoding_ex( const char *input, size_t length, const mbfl_encoding *to_encoding, const mbfl_encoding *from_encoding, size_t *output_len); MBSTRING_API char * php_mb_convert_encoding(const char *input, size_t length, const char *_to_encoding, const char *_from_encodings, size_t *output_len); MBSTRING_API int php_mb_check_encoding_list(const char *encoding_list); MBSTRING_API size_t php_mb_mbchar_bytes_ex(const char *s, const mbfl_encoding *enc); MBSTRING_API size_t php_mb_mbchar_bytes(const char *s); MBSTRING_API size_t php_mb_stripos(int mode, const char *old_haystack, size_t old_haystack_len, const char *old_needle, size_t old_needle_len, zend_long offset, const char *from_encoding); MBSTRING_API int php_mb_check_encoding(const char *input, size_t length, const char *enc); /* internal use only */ int _php_mb_ini_mbstring_internal_encoding_set(const char *new_value, size_t new_value_length); ZEND_BEGIN_MODULE_GLOBALS(mbstring) char *internal_encoding_name; const mbfl_encoding *internal_encoding; const mbfl_encoding *current_internal_encoding; const mbfl_encoding *http_output_encoding; const mbfl_encoding *current_http_output_encoding; const mbfl_encoding *http_input_identify; const mbfl_encoding *http_input_identify_get; const mbfl_encoding *http_input_identify_post; const mbfl_encoding *http_input_identify_cookie; const mbfl_encoding *http_input_identify_string; const mbfl_encoding **http_input_list; size_t http_input_list_size; const mbfl_encoding **detect_order_list; size_t detect_order_list_size; const mbfl_encoding **current_detect_order_list; size_t current_detect_order_list_size; enum mbfl_no_encoding *default_detect_order_list; size_t default_detect_order_list_size; int filter_illegal_mode; int filter_illegal_substchar; int current_filter_illegal_mode; int current_filter_illegal_substchar; zend_long func_overload; enum mbfl_no_language language; zend_bool encoding_translation; zend_bool strict_detection; size_t illegalchars; mbfl_buffer_converter *outconv; void *http_output_conv_mimetypes; #if HAVE_MBREGEX struct _zend_mb_regex_globals *mb_regex_globals; zend_long regex_stack_limit; #endif char *last_used_encoding_name; const mbfl_encoding *last_used_encoding; ZEND_END_MODULE_GLOBALS(mbstring) #define MB_OVERLOAD_MAIL 1 #define MB_OVERLOAD_STRING 2 #define MB_OVERLOAD_REGEX 4 struct mb_overload_def { int type; char *orig_func; char *ovld_func; char *save_func; }; #define MBSTRG(v) ZEND_MODULE_GLOBALS_ACCESSOR(mbstring, v) #if defined(ZTS) && defined(COMPILE_DL_MBSTRING) ZEND_TSRMLS_CACHE_EXTERN() #endif #else /* HAVE_MBSTRING */ #define mbstring_module_ptr NULL #endif /* HAVE_MBSTRING */ #define phpext_mbstring_ptr mbstring_module_ptr #endif /* _MBSTRING_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: */ PK!BG ext/pdo/php_pdo.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ #ifndef PHP_PDO_H #define PHP_PDO_H #include "zend.h" extern zend_module_entry pdo_module_entry; #define phpext_pdo_ptr &pdo_module_entry #include "php_version.h" #define PHP_PDO_VERSION PHP_VERSION #ifdef PHP_WIN32 # if defined(PDO_EXPORTS) || (!defined(COMPILE_DL_PDO)) # define PDO_API __declspec(dllexport) # elif defined(COMPILE_DL_PDO) # define PDO_API __declspec(dllimport) # else # define PDO_API /* nothing special */ # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # define PDO_API __attribute__ ((visibility("default"))) #else # define PDO_API /* nothing special */ #endif #ifdef ZTS # include "TSRM.h" #endif PHP_MINIT_FUNCTION(pdo); PHP_MSHUTDOWN_FUNCTION(pdo); PHP_MINFO_FUNCTION(pdo); ZEND_BEGIN_MODULE_GLOBALS(pdo) zend_long global_value; ZEND_END_MODULE_GLOBALS(pdo) #ifdef ZTS # define PDOG(v) TSRMG(pdo_globals_id, zend_pdo_globals *, v) #else # define PDOG(v) (pdo_globals.v) #endif #define REGISTER_PDO_CLASS_CONST_LONG(const_name, value) \ zend_declare_class_constant_long(php_pdo_get_dbh_ce(), const_name, sizeof(const_name)-1, (zend_long)value); #define REGISTER_PDO_CLASS_CONST_STRING(const_name, value) \ zend_declare_class_constant_stringl(php_pdo_get_dbh_ce(), const_name, sizeof(const_name)-1, value, sizeof(value)-1); #define PDO_CONSTRUCT_CHECK \ if (!dbh->driver) { \ pdo_raise_impl_error(dbh, NULL, "00000", "PDO constructor was not called"); \ return; \ } \ #endif /* PHP_PDO_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!mzaaext/pdo/php_pdo_driver.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ #ifndef PHP_PDO_DRIVER_H #define PHP_PDO_DRIVER_H #include "php_pdo.h" /* forward declarations */ typedef struct _pdo_dbh_t pdo_dbh_t; typedef struct _pdo_dbh_object_t pdo_dbh_object_t; typedef struct _pdo_stmt_t pdo_stmt_t; typedef struct _pdo_row_t pdo_row_t; struct pdo_bound_param_data; #ifdef PHP_WIN32 typedef __int64 pdo_int64_t; typedef unsigned __int64 pdo_uint64_t; #else typedef long long int pdo_int64_t; typedef unsigned long long int pdo_uint64_t; #endif PDO_API char *php_pdo_int64_to_str(pdo_int64_t i64); #ifndef TRUE # define TRUE 1 #endif #ifndef FALSE # define FALSE 0 #endif #define PDO_DRIVER_API 20170320 enum pdo_param_type { PDO_PARAM_NULL, /* int as in long (the php native int type). * If you mark a column as an int, PDO expects get_col to return * a pointer to a long */ PDO_PARAM_INT, /* get_col ptr should point to start of the string buffer */ PDO_PARAM_STR, /* get_col: when len is 0 ptr should point to a php_stream *, * otherwise it should behave like a string. Indicate a NULL field * value by setting the ptr to NULL */ PDO_PARAM_LOB, /* get_col: will expect the ptr to point to a new PDOStatement object handle, * but this isn't wired up yet */ PDO_PARAM_STMT, /* hierarchical result set */ /* get_col ptr should point to a zend_bool */ PDO_PARAM_BOOL, /* get_col ptr should point to a zval* and the driver is responsible for adding correct type information to get_column_meta() */ PDO_PARAM_ZVAL, /* magic flag to denote a parameter as being input/output */ PDO_PARAM_INPUT_OUTPUT = 0x80000000, /* magic flag to denote a string that uses the national character set see section 4.2.1 of SQL-92: http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt */ PDO_PARAM_STR_NATL = 0x40000000, /* magic flag to denote a string that uses the regular character set */ PDO_PARAM_STR_CHAR = 0x20000000, }; #define PDO_PARAM_FLAGS 0xFFFF0000 #define PDO_PARAM_TYPE(x) ((x) & ~PDO_PARAM_FLAGS) enum pdo_fetch_type { PDO_FETCH_USE_DEFAULT, PDO_FETCH_LAZY, PDO_FETCH_ASSOC, PDO_FETCH_NUM, PDO_FETCH_BOTH, PDO_FETCH_OBJ, PDO_FETCH_BOUND, /* return true/false only; rely on bound columns */ PDO_FETCH_COLUMN, /* fetch a numbered column only */ PDO_FETCH_CLASS, /* create an instance of named class, call ctor and set properties */ PDO_FETCH_INTO, /* fetch row into an existing object */ PDO_FETCH_FUNC, /* fetch into function and return its result */ PDO_FETCH_NAMED, /* like PDO_FETCH_ASSOC, but can handle duplicate names */ PDO_FETCH_KEY_PAIR, /* fetch into an array where the 1st column is a key and all subsequent columns are values */ PDO_FETCH__MAX /* must be last */ }; #define PDO_FETCH_FLAGS 0xFFFF0000 /* fetchAll() modes or'd to PDO_FETCH_XYZ */ #define PDO_FETCH_GROUP 0x00010000 /* fetch into groups */ #define PDO_FETCH_UNIQUE 0x00030000 /* fetch into groups assuming first col is unique */ #define PDO_FETCH_CLASSTYPE 0x00040000 /* fetch class gets its class name from 1st column */ #define PDO_FETCH_SERIALIZE 0x00080000 /* fetch class instances by calling serialize */ #define PDO_FETCH_PROPS_LATE 0x00100000 /* fetch props after calling ctor */ /* fetch orientation for scrollable cursors */ enum pdo_fetch_orientation { PDO_FETCH_ORI_NEXT, /* default: fetch the next available row */ PDO_FETCH_ORI_PRIOR, /* scroll back to prior row and fetch that */ PDO_FETCH_ORI_FIRST, /* scroll to the first row and fetch that */ PDO_FETCH_ORI_LAST, /* scroll to the last row and fetch that */ PDO_FETCH_ORI_ABS, /* scroll to an absolute numbered row and fetch that */ PDO_FETCH_ORI_REL /* scroll relative to the current row, and fetch that */ }; enum pdo_attribute_type { PDO_ATTR_AUTOCOMMIT, /* use to turn on or off auto-commit mode */ PDO_ATTR_PREFETCH, /* configure the prefetch size for drivers that support it. Size is in KB */ PDO_ATTR_TIMEOUT, /* connection timeout in seconds */ PDO_ATTR_ERRMODE, /* control how errors are handled */ PDO_ATTR_SERVER_VERSION, /* database server version */ PDO_ATTR_CLIENT_VERSION, /* client library version */ PDO_ATTR_SERVER_INFO, /* server information */ PDO_ATTR_CONNECTION_STATUS, /* connection status */ PDO_ATTR_CASE, /* control case folding for portability */ PDO_ATTR_CURSOR_NAME, /* name a cursor for use in "WHERE CURRENT OF " */ PDO_ATTR_CURSOR, /* cursor type */ PDO_ATTR_ORACLE_NULLS, /* convert empty strings to NULL */ PDO_ATTR_PERSISTENT, /* pconnect style connection */ PDO_ATTR_STATEMENT_CLASS, /* array(classname, array(ctor_args)) to specify the class of the constructed statement */ PDO_ATTR_FETCH_TABLE_NAMES, /* include table names in the column names, where available */ PDO_ATTR_FETCH_CATALOG_NAMES, /* include the catalog/db name names in the column names, where available */ PDO_ATTR_DRIVER_NAME, /* name of the driver (as used in the constructor) */ PDO_ATTR_STRINGIFY_FETCHES, /* converts integer/float types to strings during fetch */ PDO_ATTR_MAX_COLUMN_LEN, /* make database calculate maximum length of data found in a column */ PDO_ATTR_DEFAULT_FETCH_MODE, /* Set the default fetch mode */ PDO_ATTR_EMULATE_PREPARES, /* use query emulation rather than native */ PDO_ATTR_DEFAULT_STR_PARAM, /* set the default string parameter type (see the PDO::PARAM_STR_* magic flags) */ /* this defines the start of the range for driver specific options. * Drivers should define their own attribute constants beginning with this * value. */ PDO_ATTR_DRIVER_SPECIFIC = 1000 }; enum pdo_cursor_type { PDO_CURSOR_FWDONLY, /* forward only cursor (default) */ PDO_CURSOR_SCROLL /* scrollable cursor */ }; /* SQL-92 SQLSTATE error codes. The character string value returned for an SQLSTATE consists of a two-character class value followed by a three-character subclass value. A class value of 01 indicates a warning and is accompanied by a return code of SQL_SUCCESS_WITH_INFO. Class values other than '01', except for the class 'IM', indicate an error and are accompanied by a return code of SQL_ERROR. The class 'IM' is specific to warnings and errors that derive from the implementation of ODBC itself. The subclass value '000' in any class indicates that there is no subclass for that SQLSTATE. The assignment of class and subclass values is defined by SQL-92. */ typedef char pdo_error_type[6]; /* SQLSTATE */ #define PDO_ERR_NONE "00000" enum pdo_error_mode { PDO_ERRMODE_SILENT, /* just set error codes */ PDO_ERRMODE_WARNING, /* raise E_WARNING */ PDO_ERRMODE_EXCEPTION /* throw exceptions */ }; enum pdo_case_conversion { PDO_CASE_NATURAL, PDO_CASE_UPPER, PDO_CASE_LOWER }; /* oracle interop settings */ enum pdo_null_handling { PDO_NULL_NATURAL = 0, PDO_NULL_EMPTY_STRING = 1, PDO_NULL_TO_STRING = 2 }; /* {{{ utils for reading attributes set as driver_options */ static inline zend_long pdo_attr_lval(zval *options, enum pdo_attribute_type option_name, zend_long defval) { zval *v; if (options && (v = zend_hash_index_find(Z_ARRVAL_P(options), option_name))) { return zval_get_long(v); } return defval; } static inline zend_string *pdo_attr_strval(zval *options, enum pdo_attribute_type option_name, zend_string *defval) { zval *v; if (options && (v = zend_hash_index_find(Z_ARRVAL_P(options), option_name))) { return zval_get_string(v); } return defval ? zend_string_copy(defval) : NULL; } /* }}} */ /* This structure is registered with PDO when a PDO driver extension is * initialized */ typedef struct { const char *driver_name; size_t driver_name_len; zend_ulong api_version; /* needs to be compatible with PDO */ #define PDO_DRIVER_HEADER(name) \ #name, sizeof(#name)-1, \ PDO_DRIVER_API /* create driver specific portion of the database handle and stash it into * the dbh. dbh contains the data source string and flags for this * instance. You MUST respect dbh->is_persistent and pass that flag to * pemalloc() for all allocations that are stored in the dbh or your instance * data in the db, otherwise you will crash PHP when persistent connections * are used. */ int (*db_handle_factory)(pdo_dbh_t *dbh, zval *driver_options); } pdo_driver_t; /* {{{ methods for a database handle */ /* close or otherwise disconnect the database */ typedef int (*pdo_dbh_close_func)(pdo_dbh_t *dbh); /* prepare a statement and stash driver specific portion into stmt */ typedef int (*pdo_dbh_prepare_func)(pdo_dbh_t *dbh, const char *sql, size_t sql_len, pdo_stmt_t *stmt, zval *driver_options); /* execute a statement (that does not return a result set) */ typedef zend_long (*pdo_dbh_do_func)(pdo_dbh_t *dbh, const char *sql, size_t sql_len); /* quote a string */ typedef int (*pdo_dbh_quote_func)(pdo_dbh_t *dbh, const char *unquoted, size_t unquotedlen, char **quoted, size_t *quotedlen, enum pdo_param_type paramtype); /* transaction related */ typedef int (*pdo_dbh_txn_func)(pdo_dbh_t *dbh); /* setting of attributes */ typedef int (*pdo_dbh_set_attr_func)(pdo_dbh_t *dbh, zend_long attr, zval *val); /* return last insert id. NULL indicates error condition, otherwise, the return value * MUST be an emalloc'd NULL terminated string. */ typedef char *(*pdo_dbh_last_id_func)(pdo_dbh_t *dbh, const char *name, size_t *len); /* fetch error information. if stmt is not null, fetch information pertaining * to the statement, otherwise fetch global error information. The driver * should add the following information to the array "info" in this order: * - native error code * - string representation of the error code ... any other optional driver * specific data ... */ typedef int (*pdo_dbh_fetch_error_func)(pdo_dbh_t *dbh, pdo_stmt_t *stmt, zval *info); /* fetching of attributes */ typedef int (*pdo_dbh_get_attr_func)(pdo_dbh_t *dbh, zend_long attr, zval *val); /* checking/pinging persistent connections; return SUCCESS if the connection * is still alive and ready to be used, FAILURE otherwise. * You may set this handler to NULL, which is equivalent to returning SUCCESS. */ typedef int (*pdo_dbh_check_liveness_func)(pdo_dbh_t *dbh); /* called at request end for each persistent dbh; this gives the driver * the opportunity to safely release resources that only have per-request * scope */ typedef void (*pdo_dbh_request_shutdown)(pdo_dbh_t *dbh); /* for adding methods to the dbh or stmt objects pointer to a list of driver specific functions. The convention is to prefix the function names using the PDO driver name; this will reduce the chance of collisions with future functionality in the PDO class or in user code (they can extend the PDO object). */ enum { PDO_DBH_DRIVER_METHOD_KIND_DBH = 0, PDO_DBH_DRIVER_METHOD_KIND_STMT, PDO_DBH_DRIVER_METHOD_KIND__MAX }; typedef const zend_function_entry *(*pdo_dbh_get_driver_methods_func)(pdo_dbh_t *dbh, int kind); struct pdo_dbh_methods { pdo_dbh_close_func closer; pdo_dbh_prepare_func preparer; pdo_dbh_do_func doer; pdo_dbh_quote_func quoter; pdo_dbh_txn_func begin; pdo_dbh_txn_func commit; pdo_dbh_txn_func rollback; pdo_dbh_set_attr_func set_attribute; pdo_dbh_last_id_func last_id; pdo_dbh_fetch_error_func fetch_err; pdo_dbh_get_attr_func get_attribute; pdo_dbh_check_liveness_func check_liveness; pdo_dbh_get_driver_methods_func get_driver_methods; pdo_dbh_request_shutdown persistent_shutdown; pdo_dbh_txn_func in_transaction; }; /* }}} */ /* {{{ methods for a statement handle */ /* free the statement handle */ typedef int (*pdo_stmt_dtor_func)(pdo_stmt_t *stmt); /* start the query */ typedef int (*pdo_stmt_execute_func)(pdo_stmt_t *stmt); /* causes the next row in the set to be fetched; indicates if there are no * more rows. The ori and offset params modify which row should be returned, * if the stmt represents a scrollable cursor */ typedef int (*pdo_stmt_fetch_func)(pdo_stmt_t *stmt, enum pdo_fetch_orientation ori, zend_long offset); /* queries information about the type of a column, by index (0 based). * Driver should populate stmt->columns[colno] with appropriate info */ typedef int (*pdo_stmt_describe_col_func)(pdo_stmt_t *stmt, int colno); /* retrieves pointer and size of the value for a column. * Note that PDO expects the driver to manage the lifetime of this data; * it will copy the value into a zval on behalf of the script. * If the driver sets caller_frees, ptr should point to emalloc'd memory * and PDO will free it as soon as it is done using it. */ typedef int (*pdo_stmt_get_col_data_func)(pdo_stmt_t *stmt, int colno, char **ptr, size_t *len, int *caller_frees); /* hook for bound params */ enum pdo_param_event { PDO_PARAM_EVT_ALLOC, PDO_PARAM_EVT_FREE, PDO_PARAM_EVT_EXEC_PRE, PDO_PARAM_EVT_EXEC_POST, PDO_PARAM_EVT_FETCH_PRE, PDO_PARAM_EVT_FETCH_POST, PDO_PARAM_EVT_NORMALIZE }; typedef int (*pdo_stmt_param_hook_func)(pdo_stmt_t *stmt, struct pdo_bound_param_data *param, enum pdo_param_event event_type); /* setting of attributes */ typedef int (*pdo_stmt_set_attr_func)(pdo_stmt_t *stmt, zend_long attr, zval *val); /* fetching of attributes */ typedef int (*pdo_stmt_get_attr_func)(pdo_stmt_t *stmt, zend_long attr, zval *val); /* retrieves meta data for a numbered column. * Returns SUCCESS/FAILURE. * On SUCCESS, fill in return_value with an array with the following fields. * If a particular field is not supported, then the driver simply does not add it to * the array, so that scripts can use isset() to check for it. * * ### this is just a rough first cut, and subject to change ### * * these are added by PDO itself, based on data from the describe handler: * name => the column name * len => the length/size of the column * precision => precision of the column * pdo_type => an integer, one of the PDO_PARAM_XXX values * * scale => the floating point scale * table => the table for that column * type => a string representation of the type, mapped to the PHP equivalent type name * native_type => a string representation of the type, native style, if different from * the mapped name. * flags => an array of flags including zero or more of the following: * primary_key, not_null, unique_key, multiple_key, unsigned, auto_increment, blob * * Any driver specific data should be returned using a prefixed key or value. * Eg: custom data for the mysql driver would use either * 'mysql:foobar' => 'some data' // to add a new key to the array * or * 'flags' => array('not_null', 'mysql:some_flag'); // to add data to an existing key */ typedef int (*pdo_stmt_get_column_meta_func)(pdo_stmt_t *stmt, zend_long colno, zval *return_value); /* advances the statement to the next rowset of the batch. * If it returns 1, PDO will tear down its idea of columns * and meta data. If it returns 0, PDO will indicate an error * to the caller. */ typedef int (*pdo_stmt_next_rowset_func)(pdo_stmt_t *stmt); /* closes the active cursor on a statement, leaving the prepared * statement ready for re-execution. Useful to explicitly state * that you are done with a given rowset, without having to explicitly * fetch all the rows. */ typedef int (*pdo_stmt_cursor_closer_func)(pdo_stmt_t *stmt); struct pdo_stmt_methods { pdo_stmt_dtor_func dtor; pdo_stmt_execute_func executer; pdo_stmt_fetch_func fetcher; pdo_stmt_describe_col_func describer; pdo_stmt_get_col_data_func get_col; pdo_stmt_param_hook_func param_hook; pdo_stmt_set_attr_func set_attribute; pdo_stmt_get_attr_func get_attribute; pdo_stmt_get_column_meta_func get_column_meta; pdo_stmt_next_rowset_func next_rowset; pdo_stmt_cursor_closer_func cursor_closer; }; /* }}} */ enum pdo_placeholder_support { PDO_PLACEHOLDER_NONE=0, PDO_PLACEHOLDER_NAMED=1, PDO_PLACEHOLDER_POSITIONAL=2 }; struct _pdo_dbh_t { /* driver specific methods */ const struct pdo_dbh_methods *methods; /* driver specific data */ void *driver_data; /* credentials */ char *username, *password; /* if true, then data stored and pointed at by this handle must all be * persistently allocated */ unsigned is_persistent:1; /* if true, driver should act as though a COMMIT were executed between * each executed statement; otherwise, COMMIT must be carried out manually * */ unsigned auto_commit:1; /* if true, the handle has been closed and will not function anymore */ unsigned is_closed:1; /* if true, the driver requires that memory be allocated explicitly for * the columns that are returned */ unsigned alloc_own_columns:1; /* if true, commit or rollBack is allowed to be called */ unsigned in_txn:1; /* max length a single character can become after correct quoting */ unsigned max_escaped_char_length:3; /* oracle compat; see enum pdo_null_handling */ unsigned oracle_nulls:2; /* when set, convert int/floats to strings */ unsigned stringify:1; /* bitmap for pdo_param_event(s) to skip in dispatch_param_event */ unsigned skip_param_evt:7; /* the sum of the number of bits here and the bit fields preceding should * equal 32 */ unsigned _reserved_flags:14; /* data source string used to open this handle */ const char *data_source; size_t data_source_len; /* the global error code. */ pdo_error_type error_code; enum pdo_error_mode error_mode; enum pdo_case_conversion native_case, desired_case; /* persistent hash key associated with this handle */ const char *persistent_id; size_t persistent_id_len; unsigned int refcount; /* driver specific "class" methods for the dbh and stmt */ HashTable *cls_methods[PDO_DBH_DRIVER_METHOD_KIND__MAX]; pdo_driver_t *driver; zend_class_entry *def_stmt_ce; zval def_stmt_ctor_args; /* when calling PDO::query(), we need to keep the error * context from the statement around until we next clear it. * This will allow us to report the correct error message * when PDO::query() fails */ pdo_stmt_t *query_stmt; zval query_stmt_zval; /* defaults for fetches */ enum pdo_fetch_type default_fetch_type; }; /* represents a connection to a database */ struct _pdo_dbh_object_t { pdo_dbh_t *inner; /* these items must appear in this order at the beginning of the struct so that this can be cast as a zend_object. we need this to allow the extending class to escape all the custom handlers that PDO declares. */ zend_object std; }; static inline pdo_dbh_t *php_pdo_dbh_fetch_inner(zend_object *obj) { return (pdo_dbh_t *)(((pdo_dbh_object_t *)((char*)(obj) - XtOffsetOf(pdo_dbh_object_t, std)))->inner); } static inline pdo_dbh_object_t *php_pdo_dbh_fetch_object(zend_object *obj) { return (pdo_dbh_object_t *)((char*)(obj) - XtOffsetOf(pdo_dbh_object_t, std)); } #define Z_PDO_DBH_P(zv) php_pdo_dbh_fetch_inner(Z_OBJ_P((zv))) #define Z_PDO_OBJECT_P(zv) php_pdo_dbh_fetch_object(Z_OBJ_P((zv))) /* describes a column */ struct pdo_column_data { zend_string *name; size_t maxlen; zend_ulong precision; enum pdo_param_type param_type; }; /* describes a bound parameter */ struct pdo_bound_param_data { zval parameter; /* the variable itself */ zval driver_params; /* optional parameter(s) for the driver */ zend_long paramno; /* if -1, then it has a name, and we don't know the index *yet* */ zend_string *name; zend_long max_value_len; /* as a hint for pre-allocation */ void *driver_data; pdo_stmt_t *stmt; /* for convenience in dtor */ enum pdo_param_type param_type; /* desired or suggested variable type */ int is_param; /* parameter or column ? */ }; /* represents a prepared statement */ struct _pdo_stmt_t { /* driver specifics */ const struct pdo_stmt_methods *methods; void *driver_data; /* if true, we've already successfully executed this statement at least * once */ unsigned executed:1; /* if true, the statement supports placeholders and can implement * bindParam() for its prepared statements, if false, PDO should * emulate prepare and bind on its behalf */ unsigned supports_placeholders:2; unsigned _reserved:29; /* the number of columns in the result set; not valid until after * the statement has been executed at least once. In some cases, might * not be valid until fetch (at the driver level) has been called at least once. * */ int column_count; struct pdo_column_data *columns; /* we want to keep the dbh alive while we live, so we own a reference */ zval database_object_handle; pdo_dbh_t *dbh; /* keep track of bound input parameters. Some drivers support * input/output parameters, but you can't rely on that working */ HashTable *bound_params; /* When rewriting from named to positional, this maps positions to names */ HashTable *bound_param_map; /* keep track of PHP variables bound to named (or positional) columns * in the result set */ HashTable *bound_columns; /* not always meaningful */ zend_long row_count; /* used to hold the statement's current query */ char *query_string; size_t query_stringlen; /* the copy of the query with expanded binds ONLY for emulated-prepare drivers */ char *active_query_string; size_t active_query_stringlen; /* the cursor specific error code. */ pdo_error_type error_code; /* for lazy fetches, we always return the same lazy object handle. * Let's keep it here. */ zval lazy_object_ref; zend_ulong refcount; /* defaults for fetches */ enum pdo_fetch_type default_fetch_type; union { int column; struct { zval ctor_args; /* freed */ zend_fcall_info fci; zend_fcall_info_cache fcc; zval retval; zend_class_entry *ce; } cls; struct { zval fetch_args; /* freed */ zend_fcall_info fci; zend_fcall_info_cache fcc; zval object; zval function; zval *values; /* freed */ } func; zval into; } fetch; /* used by the query parser for driver specific * parameter naming (see pgsql driver for example) */ const char *named_rewrite_template; /* these items must appear in this order at the beginning of the struct so that this can be cast as a zend_object. we need this to allow the extending class to escape all the custom handlers that PDO declares. */ zend_object std; }; static inline pdo_stmt_t *php_pdo_stmt_fetch_object(zend_object *obj) { return (pdo_stmt_t *)((char*)(obj) - XtOffsetOf(pdo_stmt_t, std)); } #define Z_PDO_STMT_P(zv) php_pdo_stmt_fetch_object(Z_OBJ_P((zv))) struct _pdo_row_t { zend_object std; pdo_stmt_t *stmt; }; /* call this in MINIT to register your PDO driver */ PDO_API int php_pdo_register_driver(const pdo_driver_t *driver); /* call this in MSHUTDOWN to unregister your PDO driver */ PDO_API void php_pdo_unregister_driver(const pdo_driver_t *driver); /* For the convenience of drivers, this function will parse a data source * string, of the form "name=value; name2=value2" and populate variables * according to the data you pass in and array of pdo_data_src_parser structures */ struct pdo_data_src_parser { const char *optname; char *optval; int freeme; }; PDO_API int php_pdo_parse_data_source(const char *data_source, zend_ulong data_source_len, struct pdo_data_src_parser *parsed, int nparams); PDO_API zend_class_entry *php_pdo_get_dbh_ce(void); PDO_API zend_class_entry *php_pdo_get_exception(void); PDO_API int pdo_parse_params(pdo_stmt_t *stmt, char *inquery, size_t inquery_len, char **outquery, size_t *outquery_len); PDO_API void pdo_raise_impl_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt, const char *sqlstate, const char *supp); PDO_API void php_pdo_dbh_addref(pdo_dbh_t *dbh); PDO_API void php_pdo_dbh_delref(pdo_dbh_t *dbh); PDO_API void php_pdo_free_statement(pdo_stmt_t *stmt); PDO_API void pdo_throw_exception(unsigned int driver_errcode, char *driver_errmsg, pdo_error_type *pdo_error); #endif /* PHP_PDO_DRIVER_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!tzQext/pdo/php_pdo_error.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ #ifndef PHP_PDO_ERROR_H #define PHP_PDO_ERROR_H #include "php_pdo_driver.h" PDO_API void pdo_handle_error(pdo_dbh_t *dbh, pdo_stmt_t *stmt); #define PDO_DBH_CLEAR_ERR() do { \ strlcpy(dbh->error_code, PDO_ERR_NONE, sizeof(PDO_ERR_NONE)); \ if (dbh->query_stmt) { \ dbh->query_stmt = NULL; \ zval_ptr_dtor(&dbh->query_stmt_zval); \ } \ } while (0) #define PDO_STMT_CLEAR_ERR() strcpy(stmt->error_code, PDO_ERR_NONE) #define PDO_HANDLE_DBH_ERR() if (strcmp(dbh->error_code, PDO_ERR_NONE)) { pdo_handle_error(dbh, NULL); } #define PDO_HANDLE_STMT_ERR() if (strcmp(stmt->error_code, PDO_ERR_NONE)) { pdo_handle_error(stmt->dbh, stmt); } #endif /* PHP_PDO_ERROR_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!GNNmain/php_content_types.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ */ #ifndef PHP_CONTENT_TYPES_H #define PHP_CONTENT_TYPES_H #define DEFAULT_POST_CONTENT_TYPE "application/x-www-form-urlencoded" SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader); SAPI_API SAPI_POST_HANDLER_FUNC(php_std_post_handler); int php_startup_sapi_content_types(void); int php_setup_sapi_content_types(void); #endif /* PHP_CONTENT_TYPES_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!ewضOOmain/php_compat.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ */ #ifndef PHP_COMPAT_H #define PHP_COMPAT_H #ifdef PHP_WIN32 #include "config.w32.h" #else #include #endif #if defined(HAVE_BUNDLED_PCRE) || !defined(PHP_VERSION) #define pcre2_jit_callback_8 php_pcre2_jit_callback #define pcre2_callout_enumerate_8 php_pcre2_callout_enumerate #define pcre2_code_copy_8 php_pcre2_code_copy #define pcre2_code_copy_with_tables_8 php_pcre2_code_copy_with_tables #define pcre2_code_free_8 php_pcre2_code_free #define pcre2_compile_8 php_pcre2_compile #define pcre2_compile_context_copy_8 php_pcre2_compile_context_copy #define pcre2_compile_context_create_8 php_pcre2_compile_context_create #define pcre2_compile_context_free_8 php_pcre2_compile_context_free #define pcre2_config_8 php_pcre2_config #define pcre2_convert_context_copy_8 php_pcre2_convert_context_copy #define pcre2_convert_context_create_8 php_pcre2_convert_context_create #define pcre2_convert_context_free_8 php_pcre2_convert_context_free #define pcre2_dfa_match_8 php_pcre2_dfa_match #define pcre2_general_context_copy_8 php_pcre2_general_context_copy #define pcre2_general_context_create_8 php_pcre2_general_context_create #define pcre2_general_context_free_8 php_pcre2_general_context_free #define pcre2_get_error_message_8 php_pcre2_get_error_message #define pcre2_get_mark_8 php_pcre2_get_mark #define pcre2_get_ovector_pointer_8 php_pcre2_get_ovector_pointer #define pcre2_get_ovector_count_8 php_pcre2_get_ovector_count #define pcre2_get_startchar_8 php_pcre2_get_startchar #define pcre2_jit_compile_8 php_pcre2_jit_compile #define pcre2_jit_match_8 php_pcre2_jit_match #define pcre2_jit_free_unused_memory_8 php_pcre2_jit_free_unused_memory #define pcre2_jit_stack_assign_8 php_pcre2_jit_stack_assign #define pcre2_jit_stack_create_8 php_pcre2_jit_stack_create #define pcre2_jit_stack_free_8 php_pcre2_jit_stack_free #define pcre2_maketables_8 php_pcre2_maketables #define pcre2_match_8 php_pcre2_match #define pcre2_match_context_copy_8 php_pcre2_match_context_copy #define pcre2_match_context_create_8 php_pcre2_match_context_create #define pcre2_match_context_free_8 php_pcre2_match_context_free #define pcre2_match_data_create_8 php_pcre2_match_data_create #define pcre2_match_data_create_from_pattern_8 php_pcre2_match_data_create_from_pattern #define pcre2_match_data_free_8 php_pcre2_match_data_free #define pcre2_pattern_info_8 php_pcre2_pattern_info #define pcre2_serialize_decode_8 php_pcre2_serialize_decode #define pcre2_serialize_encode_8 php_pcre2_serialize_encode #define pcre2_serialize_free_8 php_pcre2_serialize_free #define pcre2_serialize_get_number_of_codes_8 php_pcre2_serialize_get_number_of_codes #define pcre2_set_bsr_8 php_pcre2_set_bsr #define pcre2_set_callout_8 php_pcre2_set_callout #define pcre2_set_character_tables_8 php_pcre2_set_character_tables #define pcre2_set_compile_extra_options_8 php_pcre2_set_compile_extra_options #define pcre2_set_compile_recursion_guard_8 php_pcre2_set_compile_recursion_guard #define pcre2_set_depth_limit_8 php_pcre2_set_depth_limit #define pcre2_set_glob_escape_8 php_pcre2_set_glob_escape #define pcre2_set_glob_separator_8 php_pcre2_set_glob_separator #define pcre2_set_heap_limit_8 php_pcre2_set_heap_limit #define pcre2_set_match_limit_8 php_pcre2_set_match_limit #define pcre2_set_max_pattern_length_8 php_pcre2_set_max_pattern_length #define pcre2_set_newline_8 php_pcre2_set_newline #define pcre2_set_parens_nest_limit_8 php_pcre2_set_parens_nest_limit #define pcre2_set_offset_limit_8 php_pcre2_set_offset_limit #define pcre2_substitute_8 php_pcre2_substitute #define pcre2_substring_copy_byname_8 php_pcre2_substring_copy_byname #define pcre2_substring_copy_bynumber_8 php_pcre2_substring_copy_bynumber #define pcre2_substring_free_8 php_pcre2_substring_free #define pcre2_substring_get_byname_8 php_pcre2_substring_get_byname #define pcre2_substring_get_bynumber_8 php_pcre2_substring_get_bynumber #define pcre2_substring_length_byname_8 php_pcre2_substring_length_byname #define pcre2_substring_length_bynumber_8 php_pcre2_substring_length_bynumber #define pcre2_substring_list_get_8 php_pcre2_substring_list_get #define pcre2_substring_list_free_8 php_pcre2_substring_list_free #define pcre2_substring_nametable_scan_8 php_pcre2_substring_nametable_scan #define pcre2_substring_number_from_name_8 php_pcre2_substring_number_from_name #define pcre2_set_recursion_limit_8 php_pcre2_set_recursion_limit #define pcre2_set_recursion_memory_management_8 php_pcre2_set_recursion_memory_management #endif #define lookup php_lookup #define hashTableInit php_hashTableInit #define hashTableDestroy php_hashTableDestroy #define hashTableIterInit php_hashTableIterInit #define hashTableIterNext php_hashTableIterNext #if defined(HAVE_LIBXML) && (defined(HAVE_XML) || defined(HAVE_XMLRPC)) && !defined(HAVE_LIBEXPAT) #define XML_DefaultCurrent php_XML_DefaultCurrent #define XML_ErrorString php_XML_ErrorString #define XML_ExpatVersion php_XML_ExpatVersion #define XML_ExpatVersionInfo php_XML_ExpatVersionInfo #define XML_ExternalEntityParserCreate php_XML_ExternalEntityParserCreate #define XML_GetBase php_XML_GetBase #define XML_GetBuffer php_XML_GetBuffer #define XML_GetCurrentByteCount php_XML_GetCurrentByteCount #define XML_GetCurrentByteIndex php_XML_GetCurrentByteIndex #define XML_GetCurrentColumnNumber php_XML_GetCurrentColumnNumber #define XML_GetCurrentLineNumber php_XML_GetCurrentLineNumber #define XML_GetErrorCode php_XML_GetErrorCode #define XML_GetIdAttributeIndex php_XML_GetIdAttributeIndex #define XML_GetInputContext php_XML_GetInputContext #define XML_GetSpecifiedAttributeCount php_XML_GetSpecifiedAttributeCount #define XmlGetUtf16InternalEncodingNS php_XmlGetUtf16InternalEncodingNS #define XmlGetUtf16InternalEncoding php_XmlGetUtf16InternalEncoding #define XmlGetUtf8InternalEncodingNS php_XmlGetUtf8InternalEncodingNS #define XmlGetUtf8InternalEncoding php_XmlGetUtf8InternalEncoding #define XmlInitEncoding php_XmlInitEncoding #define XmlInitEncodingNS php_XmlInitEncodingNS #define XmlInitUnknownEncoding php_XmlInitUnknownEncoding #define XmlInitUnknownEncodingNS php_XmlInitUnknownEncodingNS #define XML_ParseBuffer php_XML_ParseBuffer #define XML_Parse php_XML_Parse #define XML_ParserCreate_MM php_XML_ParserCreate_MM #define XML_ParserCreateNS php_XML_ParserCreateNS #define XML_ParserCreate php_XML_ParserCreate #define XML_ParserFree php_XML_ParserFree #define XmlParseXmlDecl php_XmlParseXmlDecl #define XmlParseXmlDeclNS php_XmlParseXmlDeclNS #define XmlPrologStateInitExternalEntity php_XmlPrologStateInitExternalEntity #define XmlPrologStateInit php_XmlPrologStateInit #define XML_SetAttlistDeclHandler php_XML_SetAttlistDeclHandler #define XML_SetBase php_XML_SetBase #define XML_SetCdataSectionHandler php_XML_SetCdataSectionHandler #define XML_SetCharacterDataHandler php_XML_SetCharacterDataHandler #define XML_SetCommentHandler php_XML_SetCommentHandler #define XML_SetDefaultHandlerExpand php_XML_SetDefaultHandlerExpand #define XML_SetDefaultHandler php_XML_SetDefaultHandler #define XML_SetDoctypeDeclHandler php_XML_SetDoctypeDeclHandler #define XML_SetElementDeclHandler php_XML_SetElementDeclHandler #define XML_SetElementHandler php_XML_SetElementHandler #define XML_SetEncoding php_XML_SetEncoding #define XML_SetEndCdataSectionHandler php_XML_SetEndCdataSectionHandler #define XML_SetEndDoctypeDeclHandler php_XML_SetEndDoctypeDeclHandler #define XML_SetEndElementHandler php_XML_SetEndElementHandler #define XML_SetEndNamespaceDeclHandler php_XML_SetEndNamespaceDeclHandler #define XML_SetEntityDeclHandler php_XML_SetEntityDeclHandler #define XML_SetExternalEntityRefHandlerArg php_XML_SetExternalEntityRefHandlerArg #define XML_SetExternalEntityRefHandler php_XML_SetExternalEntityRefHandler #define XML_SetNamespaceDeclHandler php_XML_SetNamespaceDeclHandler #define XML_SetNotationDeclHandler php_XML_SetNotationDeclHandler #define XML_SetNotStandaloneHandler php_XML_SetNotStandaloneHandler #define XML_SetParamEntityParsing php_XML_SetParamEntityParsing #define XML_SetProcessingInstructionHandler php_XML_SetProcessingInstructionHandler #define XML_SetReturnNSTriplet php_XML_SetReturnNSTriplet #define XML_SetStartCdataSectionHandler php_XML_SetStartCdataSectionHandler #define XML_SetStartDoctypeDeclHandler php_XML_SetStartDoctypeDeclHandler #define XML_SetStartElementHandler php_XML_SetStartElementHandler #define XML_SetStartNamespaceDeclHandler php_XML_SetStartNamespaceDeclHandler #define XML_SetUnknownEncodingHandler php_XML_SetUnknownEncodingHandler #define XML_SetUnparsedEntityDeclHandler php_XML_SetUnparsedEntityDeclHandler #define XML_SetUserData php_XML_SetUserData #define XML_SetXmlDeclHandler php_XML_SetXmlDeclHandler #define XmlSizeOfUnknownEncoding php_XmlSizeOfUnknownEncoding #define XML_UseParserAsHandlerArg php_XML_UseParserAsHandlerArg #define XmlUtf16Encode php_XmlUtf16Encode #define XmlUtf8Encode php_XmlUtf8Encode #define XML_FreeContentModel php_XML_FreeContentModel #define XML_MemMalloc php_XML_MemMalloc #define XML_MemRealloc php_XML_MemRealloc #define XML_MemFree php_XML_MemFree #define XML_UseForeignDTD php_XML_UseForeignDTD #define XML_GetFeatureList php_XML_GetFeatureList #define XML_ParserReset php_XML_ParserReset #ifdef HAVE_GD_BUNDLED #define any2eucjp php_gd_any2eucjp #define createwbmp php_gd_createwbmp #define empty_output_buffer php_gd_empty_output_buffer #define fill_input_buffer php_gd_fill_input_buffer #define freewbmp php_gd_freewbmp #define gdAlphaBlend php_gd_gdAlphaBlend #define gdCompareInt php_gd_gdCompareInt #define gdCosT php_gd_gdCosT #define gdCtxPrintf php_gd_gdCtxPrintf #define gdDPExtractData php_gd_gdDPExtractData #define gdFontGetGiant php_gd_gdFontGetGiant #define gdFontGetLarge php_gd_gdFontGetLarge #define gdFontGetMediumBold php_gd_gdFontGetMediumBold #define gdFontGetSmall php_gd_gdFontGetSmall #define gdFontGetTiny php_gd_gdFontGetTiny #define gdFontGiant php_gd_gdFontGiant #define gdFontGiantData php_gd_gdFontGiantData #define gdFontGiantRep php_gd_gdFontGiantRep #define gdFontLarge php_gd_gdFontLarge #define gdFontLargeData php_gd_gdFontLargeData #define gdFontLargeRep php_gd_gdFontLargeRep #define gdFontMediumBold php_gd_gdFontMediumBold #define gdFontMediumBoldData php_gd_gdFontMediumBoldData #define gdFontMediumBoldRep php_gd_gdFontMediumBoldRep #define gdFontSmall php_gd_gdFontSmall #define gdFontSmallData php_gd_gdFontSmallData #define gdFontSmallRep php_gd_gdFontSmallRep #define gdFontTiny php_gd_gdFontTiny #define gdFontTinyData php_gd_gdFontTinyData #define gdFontTinyRep php_gd_gdFontTinyRep #define gdGetBuf php_gd_gdGetBuf #define gdGetByte php_gd_gdGetByte #define gdGetC php_gd_gdGetC #define _gdGetColors php_gd__gdGetColors #define gd_getin php_gd_gd_getin #define gdGetInt php_gd_gdGetInt #define gdGetWord php_gd_gdGetWord #define gdImageAABlend php_gd_gdImageAABlend #define gdImageAALine php_gd_gdImageAALine #define gdImageAlphaBlending php_gd_gdImageAlphaBlending #define gdImageAntialias php_gd_gdImageAntialias #define gdImageArc php_gd_gdImageArc #define gdImageBrightness php_gd_gdImageBrightness #define gdImageChar php_gd_gdImageChar #define gdImageCharUp php_gd_gdImageCharUp #define gdImageColor php_gd_gdImageColor #define gdImageColorAllocate php_gd_gdImageColorAllocate #define gdImageColorAllocateAlpha php_gd_gdImageColorAllocateAlpha #define gdImageColorClosest php_gd_gdImageColorClosest #define gdImageColorClosestAlpha php_gd_gdImageColorClosestAlpha #define gdImageColorClosestHWB php_gd_gdImageColorClosestHWB #define gdImageColorDeallocate php_gd_gdImageColorDeallocate #define gdImageColorExact php_gd_gdImageColorExact #define gdImageColorExactAlpha php_gd_gdImageColorExactAlpha #define gdImageColorMatch php_gd_gdImageColorMatch #define gdImageColorResolve php_gd_gdImageColorResolve #define gdImageColorResolveAlpha php_gd_gdImageColorResolveAlpha #define gdImageColorTransparent php_gd_gdImageColorTransparent #define gdImageCompare php_gd_gdImageCompare #define gdImageContrast php_gd_gdImageContrast #define gdImageConvolution php_gd_gdImageConvolution #define gdImageCopy php_gd_gdImageCopy #define gdImageCopyMerge php_gd_gdImageCopyMerge #define gdImageCopyMergeGray php_gd_gdImageCopyMergeGray #define gdImageCopyResampled php_gd_gdImageCopyResampled #define gdImageCopyResized php_gd_gdImageCopyResized #define gdImageCreate php_gd_gdImageCreate #define gdImageCreateFromGd php_gd_gdImageCreateFromGd #define gdImageCreateFromGd2 php_gd_gdImageCreateFromGd2 #define gdImageCreateFromGd2Ctx php_gd_gdImageCreateFromGd2Ctx #define gdImageCreateFromGd2Part php_gd_gdImageCreateFromGd2Part #define gdImageCreateFromGd2PartCtx php_gd_gdImageCreateFromGd2PartCtx #define gdImageCreateFromGd2PartPtr php_gd_gdImageCreateFromGd2PartPtr #define gdImageCreateFromGd2Ptr php_gd_gdImageCreateFromGd2Ptr #define gdImageCreateFromGdCtx php_gd_gdImageCreateFromGdCtx #define gdImageCreateFromGdPtr php_gd_gdImageCreateFromGdPtr #define gdImageCreateFromGif php_gd_gdImageCreateFromGif #define gdImageCreateFromGifCtx php_gd_gdImageCreateFromGifCtx #define gdImageCreateFromGifSource php_gd_gdImageCreateFromGifSource #define gdImageCreateFromJpeg php_gd_gdImageCreateFromJpeg #define gdImageCreateFromJpegCtx php_gd_gdImageCreateFromJpegCtx #define gdImageCreateFromJpegPtr php_gd_gdImageCreateFromJpegPtr #define gdImageCreateFromPng php_gd_gdImageCreateFromPng #define gdImageCreateFromPngCtx php_gd_gdImageCreateFromPngCtx #define gdImageCreateFromPngPtr php_gd_gdImageCreateFromPngPtr #define gdImageCreateFromPngSource php_gd_gdImageCreateFromPngSource #define gdImageCreateFromWBMP php_gd_gdImageCreateFromWBMP #define gdImageCreateFromWBMPCtx php_gd_gdImageCreateFromWBMPCtx #define gdImageCreateFromWBMPPtr php_gd_gdImageCreateFromWBMPPtr #define gdImageCreateFromXbm php_gd_gdImageCreateFromXbm #define gdImageCreatePaletteFromTrueColor php_gd_gdImageCreatePaletteFromTrueColor #define gdImageCreateTrueColor php_gd_gdImageCreateTrueColor #define gdImageDashedLine php_gd_gdImageDashedLine #define gdImageDestroy php_gd_gdImageDestroy #define gdImageEdgeDetectQuick php_gd_gdImageEdgeDetectQuick #define gdImageEllipse php_gd_gdImageEllipse #define gdImageEmboss php_gd_gdImageEmboss #define gdImageFill php_gd_gdImageFill #define gdImageFilledArc php_gd_gdImageFilledArc #define gdImageFilledEllipse php_gd_gdImageFilledEllipse #define gdImageFilledPolygon php_gd_gdImageFilledPolygon #define gdImageFilledRectangle php_gd_gdImageFilledRectangle #define _gdImageFillTiled php_gd__gdImageFillTiled #define gdImageFillToBorder php_gd_gdImageFillToBorder #define gdImageGaussianBlur php_gd_gdImageGaussianBlur #define gdImageGd php_gd_gdImageGd #define gdImageGd2 php_gd_gdImageGd2 #define gdImageGd2Ptr php_gd_gdImageGd2Ptr #define gdImageGdPtr php_gd_gdImageGdPtr #define gdImageGetClip php_gd_gdImageGetClip #define gdImageGetPixel php_gd_gdImageGetPixel #define gdImageGetTrueColorPixel php_gd_gdImageGetTrueColorPixel #define gdImageGif php_gd_gdImageGif #define gdImageGifCtx php_gd_gdImageGifCtx #define gdImageGifPtr php_gd_gdImageGifPtr #define gdImageGrayScale php_gd_gdImageGrayScale #define gdImageInterlace php_gd_gdImageInterlace #define gdImageJpeg php_gd_gdImageJpeg #define gdImageJpegCtx php_gd_gdImageJpegCtx #define gdImageJpegPtr php_gd_gdImageJpegPtr #define gdImageLine php_gd_gdImageLine #define gdImageMeanRemoval php_gd_gdImageMeanRemoval #define gdImageNegate php_gd_gdImageNegate #define gdImagePaletteCopy php_gd_gdImagePaletteCopy #define gdImagePng php_gd_gdImagePng #define gdImagePngCtx php_gd_gdImagePngCtx #define gdImagePngCtxEx php_gd_gdImagePngCtxEx #define gdImagePngEx php_gd_gdImagePngEx #define gdImagePngPtr php_gd_gdImagePngPtr #define gdImagePngPtrEx php_gd_gdImagePngPtrEx #define gdImagePngToSink php_gd_gdImagePngToSink #define gdImagePolygon php_gd_gdImagePolygon #define gdImageRectangle php_gd_gdImageRectangle #define gdImageRotate php_gd_gdImageRotate #define gdImageRotate180 php_gd_gdImageRotate180 #define gdImageRotate270 php_gd_gdImageRotate270 #define gdImageRotate45 php_gd_gdImageRotate45 #define gdImageRotate90 php_gd_gdImageRotate90 #define gdImageSaveAlpha php_gd_gdImageSaveAlpha #define gdImageSelectiveBlur php_gd_gdImageSelectiveBlur #define gdImageSetAntiAliased php_gd_gdImageSetAntiAliased #define gdImageSetAntiAliasedDontBlend php_gd_gdImageSetAntiAliasedDontBlend #define gdImageSetBrush php_gd_gdImageSetBrush #define gdImageSetClip php_gd_gdImageSetClip #define gdImageSetPixel php_gd_gdImageSetPixel #define gdImageSetStyle php_gd_gdImageSetStyle #define gdImageSetThickness php_gd_gdImageSetThickness #define gdImageSetTile php_gd_gdImageSetTile #define gdImageSkewX php_gd_gdImageSkewX #define gdImageSkewY php_gd_gdImageSkewY #define gdImageSmooth php_gd_gdImageSmooth #define gdImageString php_gd_gdImageString #define gdImageString16 php_gd_gdImageString16 #define gdImageStringFT php_gd_gdImageStringFT #define gdImageStringFTEx php_gd_gdImageStringFTEx #define gdImageStringTTF php_gd_gdImageStringTTF #define gdImageStringUp php_gd_gdImageStringUp #define gdImageStringUp16 php_gd_gdImageStringUp16 #define gdImageTrueColorToPalette php_gd_gdImageTrueColorToPalette #define gdImageWBMP php_gd_gdImageWBMP #define gdImageWBMPCtx php_gd_gdImageWBMPCtx #define gdImageWBMPPtr php_gd_gdImageWBMPPtr #define gdImageXbmCtx php_gd_gdImageXbmCtx #define gdNewDynamicCtx php_gd_gdNewDynamicCtx #define gdNewDynamicCtxEx php_gd_gdNewDynamicCtxEx #define gdNewFileCtx php_gd_gdNewFileCtx #define gdNewSSCtx php_gd_gdNewSSCtx #define gdPutBuf php_gd_gdPutBuf #define gdPutC php_gd_gdPutC #define _gdPutColors php_gd__gdPutColors #define gdPutInt php_gd_gdPutInt #define gd_putout php_gd_gd_putout #define gdPutWord php_gd_gdPutWord #define gdSeek php_gd_gdSeek #define gdSinT php_gd_gdSinT #define gd_strtok_r php_gd_gd_strtok_r #define gdTell php_gd_gdTell #define getmbi php_gd_getmbi #define init_destination php_gd_init_destination #define init_source php_gd_init_source #define jpeg_gdIOCtx_dest php_gd_jpeg_gdIOCtx_dest #define jpeg_gdIOCtx_src php_gd_jpeg_gdIOCtx_src #define lsqrt php_gd_lsqrt #define printwbmp php_gd_printwbmp #define Putchar php_gd_Putchar #define putmbi php_gd_putmbi #define Putword php_gd_Putword #define readwbmp php_gd_readwbmp #define skipheader php_gd_skipheader #define skip_input_data php_gd_skip_input_data #define term_destination php_gd_term_destination #define term_source php_gd_term_source #define writewbmp php_gd_writewbmp #define ZeroDataBlock php_gd_ZeroDataBlock #define gdCacheCreate php_gd_gdCacheCreate #define gdCacheDelete php_gd_gdCacheDelete #define gdCacheGet php_gd_gdCacheGet #define gdFontCacheSetup php_gd_gdFontCacheSetup #define gdFontCacheShutdown php_gd_gdFontCacheShutdown #define gdFreeFontCache php_gd_gdFreeFontCache #endif /* HAVE_GD_BUNDLED */ /* Define to specify how much context to retain around the current parse point. */ #define XML_CONTEXT_BYTES 1024 /* Define to make parameter entity parsing functionality available. */ #define XML_DTD 1 /* Define to make XML Namespaces functionality available. */ #define XML_NS 1 #endif #ifdef PHP_EXPORTS #define PCRE_STATIC #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!De--main/php_ini.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_INI_H #define PHP_INI_H #include "zend_ini.h" BEGIN_EXTERN_C() PHPAPI void config_zval_dtor(zval *zvalue); int php_init_config(void); int php_shutdown_config(void); void php_ini_register_extensions(void); PHPAPI zval *cfg_get_entry_ex(zend_string *name); PHPAPI zval *cfg_get_entry(const char *name, size_t name_length); PHPAPI int cfg_get_long(const char *varname, zend_long *result); PHPAPI int cfg_get_double(const char *varname, double *result); PHPAPI int cfg_get_string(const char *varname, char **result); PHPAPI int php_parse_user_ini_file(const char *dirname, char *ini_filename, HashTable *target_hash); PHPAPI void php_ini_activate_config(HashTable *source_hash, int modify_type, int stage); PHPAPI int php_ini_has_per_dir_config(void); PHPAPI int php_ini_has_per_host_config(void); PHPAPI void php_ini_activate_per_dir_config(char *path, size_t path_len); PHPAPI void php_ini_activate_per_host_config(const char *host, size_t host_len); PHPAPI HashTable* php_ini_get_configuration_hash(void); END_EXTERN_C() #define PHP_INI_USER ZEND_INI_USER #define PHP_INI_PERDIR ZEND_INI_PERDIR #define PHP_INI_SYSTEM ZEND_INI_SYSTEM #define PHP_INI_ALL ZEND_INI_ALL #define php_ini_entry zend_ini_entry #define PHP_INI_MH ZEND_INI_MH #define PHP_INI_DISP ZEND_INI_DISP #define PHP_INI_BEGIN ZEND_INI_BEGIN #define PHP_INI_END ZEND_INI_END #define PHP_INI_ENTRY3_EX ZEND_INI_ENTRY3_EX #define PHP_INI_ENTRY3 ZEND_INI_ENTRY3 #define PHP_INI_ENTRY2_EX ZEND_INI_ENTRY2_EX #define PHP_INI_ENTRY2 ZEND_INI_ENTRY2 #define PHP_INI_ENTRY1_EX ZEND_INI_ENTRY1_EX #define PHP_INI_ENTRY1 ZEND_INI_ENTRY1 #define PHP_INI_ENTRY_EX ZEND_INI_ENTRY_EX #define PHP_INI_ENTRY ZEND_INI_ENTRY #define STD_PHP_INI_ENTRY STD_ZEND_INI_ENTRY #define STD_PHP_INI_ENTRY_EX STD_ZEND_INI_ENTRY_EX #define STD_PHP_INI_BOOLEAN STD_ZEND_INI_BOOLEAN #define PHP_INI_DISPLAY_ORIG ZEND_INI_DISPLAY_ORIG #define PHP_INI_DISPLAY_ACTIVE ZEND_INI_DISPLAY_ACTIVE #define PHP_INI_STAGE_STARTUP ZEND_INI_STAGE_STARTUP #define PHP_INI_STAGE_SHUTDOWN ZEND_INI_STAGE_SHUTDOWN #define PHP_INI_STAGE_ACTIVATE ZEND_INI_STAGE_ACTIVATE #define PHP_INI_STAGE_DEACTIVATE ZEND_INI_STAGE_DEACTIVATE #define PHP_INI_STAGE_RUNTIME ZEND_INI_STAGE_RUNTIME #define PHP_INI_STAGE_HTACCESS ZEND_INI_STAGE_HTACCESS #define php_ini_boolean_displayer_cb zend_ini_boolean_displayer_cb #define php_ini_color_displayer_cb zend_ini_color_displayer_cb #define php_alter_ini_entry zend_alter_ini_entry #define php_ini_long zend_ini_long #define php_ini_double zend_ini_double #define php_ini_string zend_ini_string #endif /* PHP_INI_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!4v main/streams/php_streams_int.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ #if ZEND_DEBUG #define emalloc_rel_orig(size) \ ( __php_stream_call_depth == 0 \ ? _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_RELAY_CC) \ : _emalloc((size) ZEND_FILE_LINE_CC ZEND_FILE_LINE_ORIG_RELAY_CC) ) #define erealloc_rel_orig(ptr, size) \ ( __php_stream_call_depth == 0 \ ? _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_RELAY_CC) \ : _erealloc((ptr), (size), 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_ORIG_RELAY_CC) ) #define pemalloc_rel_orig(size, persistent) ((persistent) ? malloc((size)) : emalloc_rel_orig((size))) #define perealloc_rel_orig(ptr, size, persistent) ((persistent) ? realloc((ptr), (size)) : erealloc_rel_orig((ptr), (size))) #else # define pemalloc_rel_orig(size, persistent) pemalloc((size), (persistent)) # define perealloc_rel_orig(ptr, size, persistent) perealloc((ptr), (size), (persistent)) # define emalloc_rel_orig(size) emalloc((size)) #endif #define STREAM_DEBUG 0 #define STREAM_WRAPPER_PLAIN_FILES ((php_stream_wrapper*)-1) #ifndef MAP_FAILED #define MAP_FAILED ((void *) -1) #endif #define CHUNK_SIZE 8192 #ifdef PHP_WIN32 # ifdef EWOULDBLOCK # undef EWOULDBLOCK # endif # define EWOULDBLOCK WSAEWOULDBLOCK # ifdef EMSGSIZE # undef EMSGSIZE # endif # define EMSGSIZE WSAEMSGSIZE #endif /* This functions transforms the first char to 'w' if it's not 'r', 'a' or 'w' * and strips any subsequent chars except '+' and 'b'. * Use this to sanitize stream->mode if you call e.g. fdopen, fopencookie or * any other function that expects standard modes and you allow non-standard * ones. result should be a char[5]. */ void php_stream_mode_sanitize_fdopen_fopencookie(php_stream *stream, char *result); void php_stream_tidy_wrapper_error_log(php_stream_wrapper *wrapper); void php_stream_display_wrapper_errors(php_stream_wrapper *wrapper, const char *path, const char *caption); PK!{c c main/streams/php_stream_mmap.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ /* Memory Mapping interface for streams. * The intention is to provide a uniform interface over the most common * operations that are used within PHP itself, rather than a complete * API for all memory mapping needs. * * ATM, we support only mmap(), but win32 memory mapping support will * follow soon. * */ typedef enum { /* Does the stream support mmap ? */ PHP_STREAM_MMAP_SUPPORTED, /* Request a range and offset to be mapped; * while mapped, you MUST NOT use any read/write functions * on the stream (win9x compatibility) */ PHP_STREAM_MMAP_MAP_RANGE, /* Unmap the last range that was mapped for the stream */ PHP_STREAM_MMAP_UNMAP } php_stream_mmap_operation_t; typedef enum { PHP_STREAM_MAP_MODE_READONLY, PHP_STREAM_MAP_MODE_READWRITE, PHP_STREAM_MAP_MODE_SHARED_READONLY, PHP_STREAM_MAP_MODE_SHARED_READWRITE } php_stream_mmap_access_t; typedef struct { /* requested offset and length. * If length is 0, the whole file is mapped */ size_t offset; size_t length; php_stream_mmap_access_t mode; /* returned mapped address */ char *mapped; } php_stream_mmap_range; #define PHP_STREAM_MMAP_ALL 0 #define php_stream_mmap_supported(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_MMAP_API, PHP_STREAM_MMAP_SUPPORTED, NULL) == 0 ? 1 : 0) /* Returns 1 if the stream in its current state can be memory mapped, * 0 otherwise */ #define php_stream_mmap_possible(stream) (!php_stream_is_filtered((stream)) && php_stream_mmap_supported((stream))) BEGIN_EXTERN_C() PHPAPI char *_php_stream_mmap_range(php_stream *stream, size_t offset, size_t length, php_stream_mmap_access_t mode, size_t *mapped_len); #define php_stream_mmap_range(stream, offset, length, mode, mapped_len) _php_stream_mmap_range((stream), (offset), (length), (mode), (mapped_len)) /* un-maps the last mapped range */ PHPAPI int _php_stream_mmap_unmap(php_stream *stream); #define php_stream_mmap_unmap(stream) _php_stream_mmap_unmap((stream)) PHPAPI int _php_stream_mmap_unmap_ex(php_stream *stream, zend_off_t readden); #define php_stream_mmap_unmap_ex(stream, readden) _php_stream_mmap_unmap_ex((stream), (readden)) END_EXTERN_C() /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!RU'main/streams/php_stream_plain_wrapper.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ /* definitions for the plain files wrapper */ /* operations for a plain file; use the php_stream_fopen_XXX funcs below */ PHPAPI extern php_stream_ops php_stream_stdio_ops; PHPAPI extern /*const*/ php_stream_wrapper php_plain_files_wrapper; BEGIN_EXTERN_C() /* like fopen, but returns a stream */ PHPAPI php_stream *_php_stream_fopen(const char *filename, const char *mode, zend_string **opened_path, int options STREAMS_DC); #define php_stream_fopen(filename, mode, opened) _php_stream_fopen((filename), (mode), (opened), 0 STREAMS_CC) PHPAPI php_stream *_php_stream_fopen_with_path(const char *filename, const char *mode, const char *path, zend_string **opened_path, int options STREAMS_DC); #define php_stream_fopen_with_path(filename, mode, path, opened) _php_stream_fopen_with_path((filename), (mode), (path), (opened), 0 STREAMS_CC) PHPAPI php_stream *_php_stream_fopen_from_file(FILE *file, const char *mode STREAMS_DC); #define php_stream_fopen_from_file(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_CC) PHPAPI php_stream *_php_stream_fopen_from_fd(int fd, const char *mode, const char *persistent_id STREAMS_DC); #define php_stream_fopen_from_fd(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_CC) PHPAPI php_stream *_php_stream_fopen_from_pipe(FILE *file, const char *mode STREAMS_DC); #define php_stream_fopen_from_pipe(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_CC) PHPAPI php_stream *_php_stream_fopen_tmpfile(int dummy STREAMS_DC); #define php_stream_fopen_tmpfile() _php_stream_fopen_tmpfile(0 STREAMS_CC) PHPAPI php_stream *_php_stream_fopen_temporary_file(const char *dir, const char *pfx, zend_string **opened_path STREAMS_DC); #define php_stream_fopen_temporary_file(dir, pfx, opened_path) _php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_CC) /* This is a utility API for extensions that are opening a stream, converting it * to a FILE* and then closing it again. Be warned that fileno() on the result * will most likely fail on systems with fopencookie. */ PHPAPI FILE * _php_stream_open_wrapper_as_file(char * path, char * mode, int options, zend_string **opened_path STREAMS_DC); #define php_stream_open_wrapper_as_file(path, mode, options, opened_path) _php_stream_open_wrapper_as_file((path), (mode), (options), (opened_path) STREAMS_CC) /* parse standard "fopen" modes into open() flags */ PHPAPI int php_stream_parse_fopen_modes(const char *mode, int *open_flags); END_EXTERN_C() /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!g**#main/streams/php_stream_transport.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ #ifdef PHP_WIN32 #include "config.w32.h" #include #endif #if HAVE_SYS_SOCKET_H # include #endif typedef php_stream *(php_stream_transport_factory_func)(const char *proto, size_t protolen, const char *resourcename, size_t resourcenamelen, const char *persistent_id, int options, int flags, struct timeval *timeout, php_stream_context *context STREAMS_DC); typedef php_stream_transport_factory_func *php_stream_transport_factory; BEGIN_EXTERN_C() PHPAPI int php_stream_xport_register(const char *protocol, php_stream_transport_factory factory); PHPAPI int php_stream_xport_unregister(const char *protocol); #define STREAM_XPORT_CLIENT 0 #define STREAM_XPORT_SERVER 1 #define STREAM_XPORT_CONNECT 2 #define STREAM_XPORT_BIND 4 #define STREAM_XPORT_LISTEN 8 #define STREAM_XPORT_CONNECT_ASYNC 16 /* Open a client or server socket connection */ PHPAPI php_stream *_php_stream_xport_create(const char *name, size_t namelen, int options, int flags, const char *persistent_id, struct timeval *timeout, php_stream_context *context, zend_string **error_string, int *error_code STREAMS_DC); #define php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode) \ _php_stream_xport_create(name, namelen, options, flags, persistent_id, timeout, context, estr, ecode STREAMS_CC) /* Bind the stream to a local address */ PHPAPI int php_stream_xport_bind(php_stream *stream, const char *name, size_t namelen, zend_string **error_text ); /* Connect to a remote address */ PHPAPI int php_stream_xport_connect(php_stream *stream, const char *name, size_t namelen, int asynchronous, struct timeval *timeout, zend_string **error_text, int *error_code ); /* Prepare to listen */ PHPAPI int php_stream_xport_listen(php_stream *stream, int backlog, zend_string **error_text ); /* Get the next client and their address as a string, or the underlying address * structure. You must efree either of these if you request them */ PHPAPI int php_stream_xport_accept(php_stream *stream, php_stream **client, zend_string **textaddr, void **addr, socklen_t *addrlen, struct timeval *timeout, zend_string **error_text ); /* Get the name of either the socket or it's peer */ PHPAPI int php_stream_xport_get_name(php_stream *stream, int want_peer, zend_string **textaddr, void **addr, socklen_t *addrlen ); enum php_stream_xport_send_recv_flags { STREAM_OOB = 1, STREAM_PEEK = 2 }; /* Similar to recv() system call; read data from the stream, optionally * peeking, optionally retrieving OOB data */ PHPAPI int php_stream_xport_recvfrom(php_stream *stream, char *buf, size_t buflen, int flags, void **addr, socklen_t *addrlen, zend_string **textaddr); /* Similar to send() system call; send data to the stream, optionally * sending it as OOB data */ PHPAPI int php_stream_xport_sendto(php_stream *stream, const char *buf, size_t buflen, int flags, void *addr, socklen_t addrlen); typedef enum { STREAM_SHUT_RD, STREAM_SHUT_WR, STREAM_SHUT_RDWR } stream_shutdown_t; /* Similar to shutdown() system call; shut down part of a full-duplex * connection */ PHPAPI int php_stream_xport_shutdown(php_stream *stream, stream_shutdown_t how); END_EXTERN_C() /* Structure definition for the set_option interface that the above functions wrap */ typedef struct _php_stream_xport_param { enum { STREAM_XPORT_OP_BIND, STREAM_XPORT_OP_CONNECT, STREAM_XPORT_OP_LISTEN, STREAM_XPORT_OP_ACCEPT, STREAM_XPORT_OP_CONNECT_ASYNC, STREAM_XPORT_OP_GET_NAME, STREAM_XPORT_OP_GET_PEER_NAME, STREAM_XPORT_OP_RECV, STREAM_XPORT_OP_SEND, STREAM_XPORT_OP_SHUTDOWN } op; unsigned int want_addr:1; unsigned int want_textaddr:1; unsigned int want_errortext:1; unsigned int how:2; struct { char *name; size_t namelen; struct timeval *timeout; struct sockaddr *addr; char *buf; size_t buflen; socklen_t addrlen; int backlog; int flags; } inputs; struct { php_stream *client; struct sockaddr *addr; socklen_t addrlen; zend_string *textaddr; zend_string *error_text; int returncode; int error_code; } outputs; } php_stream_xport_param; /* Because both client and server streams use the same mechanisms for encryption we use the LSB to denote clients. */ typedef enum { STREAM_CRYPTO_METHOD_SSLv2_CLIENT = (1 << 1 | 1), STREAM_CRYPTO_METHOD_SSLv3_CLIENT = (1 << 2 | 1), /* v23 no longer negotiates SSL2 or SSL3 */ STREAM_CRYPTO_METHOD_SSLv23_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | 1), STREAM_CRYPTO_METHOD_TLSv1_0_CLIENT = (1 << 3 | 1), STREAM_CRYPTO_METHOD_TLSv1_1_CLIENT = (1 << 4 | 1), STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT = (1 << 5 | 1), /* TLS equates to TLS_ANY as of PHP 7.2 */ STREAM_CRYPTO_METHOD_TLS_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | 1), STREAM_CRYPTO_METHOD_TLS_ANY_CLIENT = ((1 << 3) | (1 << 4) | (1 << 5) | 1), STREAM_CRYPTO_METHOD_ANY_CLIENT = ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5) | 1), STREAM_CRYPTO_METHOD_SSLv2_SERVER = (1 << 1), STREAM_CRYPTO_METHOD_SSLv3_SERVER = (1 << 2), /* v23 no longer negotiates SSL2 or SSL3 */ STREAM_CRYPTO_METHOD_SSLv23_SERVER = ((1 << 3) | (1 << 4) | (1 << 5)), STREAM_CRYPTO_METHOD_TLSv1_0_SERVER = (1 << 3), STREAM_CRYPTO_METHOD_TLSv1_1_SERVER = (1 << 4), STREAM_CRYPTO_METHOD_TLSv1_2_SERVER = (1 << 5), /* TLS equates to TLS_ANY as of PHP 7.2 */ STREAM_CRYPTO_METHOD_TLS_SERVER = ((1 << 3) | (1 << 4) | (1 << 5)), STREAM_CRYPTO_METHOD_TLS_ANY_SERVER = ((1 << 3) | (1 << 4) | (1 << 5)), STREAM_CRYPTO_METHOD_ANY_SERVER = ((1 << 1) | (1 << 2) | (1 << 3) | (1 << 4) | (1 << 5)) } php_stream_xport_crypt_method_t; /* These functions provide crypto support on the underlying transport */ BEGIN_EXTERN_C() PHPAPI int php_stream_xport_crypto_setup(php_stream *stream, php_stream_xport_crypt_method_t crypto_method, php_stream *session_stream); PHPAPI int php_stream_xport_crypto_enable(php_stream *stream, int activate); END_EXTERN_C() typedef struct _php_stream_xport_crypto_param { struct { php_stream *session; int activate; php_stream_xport_crypt_method_t method; } inputs; struct { int returncode; } outputs; enum { STREAM_XPORT_CRYPTO_OP_SETUP, STREAM_XPORT_CRYPTO_OP_ENABLE } op; } php_stream_xport_crypto_param; BEGIN_EXTERN_C() PHPAPI HashTable *php_stream_xport_get_hash(void); PHPAPI php_stream_transport_factory_func php_stream_generic_socket_factory; END_EXTERN_C() /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!r#main/streams/php_stream_userspace.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ /* for user-space streams */ PHPAPI extern const php_stream_ops php_stream_userspace_ops; PHPAPI extern const php_stream_ops php_stream_userspace_dir_ops; #define PHP_STREAM_IS_USERSPACE &php_stream_userspace_ops #define PHP_STREAM_IS_USERSPACE_DIR &php_stream_userspace_dir_ops /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!|q!main/streams/php_stream_context.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | +----------------------------------------------------------------------+ */ /* Stream context and status notification related definitions */ /* callback for status notifications */ typedef void (*php_stream_notification_func)(php_stream_context *context, int notifycode, int severity, char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr); #define PHP_STREAM_NOTIFIER_PROGRESS 1 /* Attempt to fetch context from the zval passed, If no context was passed, use the default context The default context has not yet been created, do it now. */ #define php_stream_context_from_zval(zcontext, nocontext) ( \ (zcontext) ? zend_fetch_resource_ex(zcontext, "Stream-Context", php_le_stream_context()) : \ (nocontext) ? NULL : \ FG(default_context) ? FG(default_context) : \ (FG(default_context) = php_stream_context_alloc()) ) #define php_stream_context_to_zval(context, zval) { ZVAL_RES(zval, (context)->res); GC_ADDREF((context)->res); } typedef struct _php_stream_notifier php_stream_notifier; struct _php_stream_notifier { php_stream_notification_func func; void (*dtor)(php_stream_notifier *notifier); zval ptr; int mask; size_t progress, progress_max; /* position for progress notification */ }; struct _php_stream_context { php_stream_notifier *notifier; zval options; /* hash keyed by wrapper family or specific wrapper */ zend_resource *res; /* used for auto-cleanup */ }; BEGIN_EXTERN_C() PHPAPI void php_stream_context_free(php_stream_context *context); PHPAPI php_stream_context *php_stream_context_alloc(void); PHPAPI zval *php_stream_context_get_option(php_stream_context *context, const char *wrappername, const char *optionname); PHPAPI int php_stream_context_set_option(php_stream_context *context, const char *wrappername, const char *optionname, zval *optionvalue); PHPAPI php_stream_notifier *php_stream_notification_alloc(void); PHPAPI void php_stream_notification_free(php_stream_notifier *notifier); END_EXTERN_C() /* not all notification codes are implemented */ #define PHP_STREAM_NOTIFY_RESOLVE 1 #define PHP_STREAM_NOTIFY_CONNECT 2 #define PHP_STREAM_NOTIFY_AUTH_REQUIRED 3 #define PHP_STREAM_NOTIFY_MIME_TYPE_IS 4 #define PHP_STREAM_NOTIFY_FILE_SIZE_IS 5 #define PHP_STREAM_NOTIFY_REDIRECTED 6 #define PHP_STREAM_NOTIFY_PROGRESS 7 #define PHP_STREAM_NOTIFY_COMPLETED 8 #define PHP_STREAM_NOTIFY_FAILURE 9 #define PHP_STREAM_NOTIFY_AUTH_RESULT 10 #define PHP_STREAM_NOTIFY_SEVERITY_INFO 0 #define PHP_STREAM_NOTIFY_SEVERITY_WARN 1 #define PHP_STREAM_NOTIFY_SEVERITY_ERR 2 BEGIN_EXTERN_C() PHPAPI void php_stream_notification_notify(php_stream_context *context, int notifycode, int severity, char *xmsg, int xcode, size_t bytes_sofar, size_t bytes_max, void * ptr); PHPAPI php_stream_context *php_stream_context_set(php_stream *stream, php_stream_context *context); END_EXTERN_C() #define php_stream_notify_info(context, code, xmsg, xcode) do { if ((context) && (context)->notifier) { \ php_stream_notification_notify((context), (code), PHP_STREAM_NOTIFY_SEVERITY_INFO, \ (xmsg), (xcode), 0, 0, NULL); } } while (0) #define php_stream_notify_progress(context, bsofar, bmax) do { if ((context) && (context)->notifier) { \ php_stream_notification_notify((context), PHP_STREAM_NOTIFY_PROGRESS, PHP_STREAM_NOTIFY_SEVERITY_INFO, \ NULL, 0, (bsofar), (bmax), NULL); } } while(0) #define php_stream_notify_progress_init(context, sofar, bmax) do { if ((context) && (context)->notifier) { \ (context)->notifier->progress = (sofar); \ (context)->notifier->progress_max = (bmax); \ (context)->notifier->mask |= PHP_STREAM_NOTIFIER_PROGRESS; \ php_stream_notify_progress((context), (sofar), (bmax)); } } while (0) #define php_stream_notify_progress_increment(context, dsofar, dmax) do { if ((context) && (context)->notifier && (context)->notifier->mask & PHP_STREAM_NOTIFIER_PROGRESS) { \ (context)->notifier->progress += (dsofar); \ (context)->notifier->progress_max += (dmax); \ php_stream_notify_progress((context), (context)->notifier->progress, (context)->notifier->progress_max); } } while (0) #define php_stream_notify_file_size(context, file_size, xmsg, xcode) do { if ((context) && (context)->notifier) { \ php_stream_notification_notify((context), PHP_STREAM_NOTIFY_FILE_SIZE_IS, PHP_STREAM_NOTIFY_SEVERITY_INFO, \ (xmsg), (xcode), 0, (file_size), NULL); } } while(0) #define php_stream_notify_error(context, code, xmsg, xcode) do { if ((context) && (context)->notifier) {\ php_stream_notification_notify((context), (code), PHP_STREAM_NOTIFY_SEVERITY_ERR, \ (xmsg), (xcode), 0, 0, NULL); } } while(0) /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!b  &main/streams/php_stream_glob_wrapper.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Marcus Boerger | +----------------------------------------------------------------------+ */ PHPAPI extern const php_stream_wrapper php_glob_stream_wrapper; PHPAPI extern const php_stream_ops php_glob_stream_ops; BEGIN_EXTERN_C() PHPAPI char* _php_glob_stream_get_path(php_stream *stream, int copy, size_t *plen STREAMS_DC); #define php_glob_stream_get_path(stream, copy, plen) _php_glob_stream_get_path((stream), (copy), (plen) STREAMS_CC) PHPAPI char* _php_glob_stream_get_pattern(php_stream *stream, int copy, size_t *plen STREAMS_DC); #define php_glob_stream_get_pattern(stream, copy, plen) _php_glob_stream_get_pattern((stream), (copy), (plen) STREAMS_CC) PHPAPI int _php_glob_stream_get_count(php_stream *stream, int *pflags STREAMS_DC); #define php_glob_stream_get_count(stream, pflags) _php_glob_stream_get_count((stream), (pflags) STREAMS_CC) END_EXTERN_C() /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!"vII$main/streams/php_stream_filter_api.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong | | With suggestions from: | | Moriyoshi Koizumi | | Sara Golemon | +----------------------------------------------------------------------+ */ /* The filter API works on the principle of "Bucket-Brigades". This is * partially inspired by the Apache 2 method of doing things, although * it is intentially a light-weight implementation. * * Each stream can have a chain of filters for reading and another for writing. * * When data is written to the stream, it is placed into a bucket and placed at * the start of the input brigade. * * The first filter in the chain is invoked on the brigade and (depending on * it's return value), the next filter is invoked and so on. * */ #define PHP_STREAM_FILTER_READ 0x0001 #define PHP_STREAM_FILTER_WRITE 0x0002 #define PHP_STREAM_FILTER_ALL (PHP_STREAM_FILTER_READ | PHP_STREAM_FILTER_WRITE) typedef struct _php_stream_bucket php_stream_bucket; typedef struct _php_stream_bucket_brigade php_stream_bucket_brigade; struct _php_stream_bucket { php_stream_bucket *next, *prev; php_stream_bucket_brigade *brigade; char *buf; size_t buflen; /* if non-zero, buf should be pefreed when the bucket is destroyed */ uint8_t own_buf; uint8_t is_persistent; /* destroy this struct when refcount falls to zero */ int refcount; }; struct _php_stream_bucket_brigade { php_stream_bucket *head, *tail; }; typedef enum { PSFS_ERR_FATAL, /* error in data stream */ PSFS_FEED_ME, /* filter needs more data; stop processing chain until more is available */ PSFS_PASS_ON /* filter generated output buckets; pass them on to next in chain */ } php_stream_filter_status_t; /* Buckets API. */ BEGIN_EXTERN_C() PHPAPI php_stream_bucket *php_stream_bucket_new(php_stream *stream, char *buf, size_t buflen, uint8_t own_buf, uint8_t buf_persistent); PHPAPI int php_stream_bucket_split(php_stream_bucket *in, php_stream_bucket **left, php_stream_bucket **right, size_t length); PHPAPI void php_stream_bucket_delref(php_stream_bucket *bucket); #define php_stream_bucket_addref(bucket) (bucket)->refcount++ PHPAPI void php_stream_bucket_prepend(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket); PHPAPI void php_stream_bucket_append(php_stream_bucket_brigade *brigade, php_stream_bucket *bucket); PHPAPI void php_stream_bucket_unlink(php_stream_bucket *bucket); PHPAPI php_stream_bucket *php_stream_bucket_make_writeable(php_stream_bucket *bucket); END_EXTERN_C() #define PSFS_FLAG_NORMAL 0 /* regular read/write */ #define PSFS_FLAG_FLUSH_INC 1 /* an incremental flush */ #define PSFS_FLAG_FLUSH_CLOSE 2 /* final flush prior to closing */ typedef struct _php_stream_filter_ops { php_stream_filter_status_t (*filter)( php_stream *stream, php_stream_filter *thisfilter, php_stream_bucket_brigade *buckets_in, php_stream_bucket_brigade *buckets_out, size_t *bytes_consumed, int flags ); void (*dtor)(php_stream_filter *thisfilter); const char *label; } php_stream_filter_ops; typedef struct _php_stream_filter_chain { php_stream_filter *head, *tail; /* Owning stream */ php_stream *stream; } php_stream_filter_chain; struct _php_stream_filter { const php_stream_filter_ops *fops; zval abstract; /* for use by filter implementation */ php_stream_filter *next; php_stream_filter *prev; int is_persistent; /* link into stream and chain */ php_stream_filter_chain *chain; /* buffered buckets */ php_stream_bucket_brigade buffer; /* filters are auto_registered when they're applied */ zend_resource *res; }; /* stack filter onto a stream */ BEGIN_EXTERN_C() PHPAPI void _php_stream_filter_prepend(php_stream_filter_chain *chain, php_stream_filter *filter); PHPAPI int php_stream_filter_prepend_ex(php_stream_filter_chain *chain, php_stream_filter *filter); PHPAPI void _php_stream_filter_append(php_stream_filter_chain *chain, php_stream_filter *filter); PHPAPI int php_stream_filter_append_ex(php_stream_filter_chain *chain, php_stream_filter *filter); PHPAPI int _php_stream_filter_flush(php_stream_filter *filter, int finish); PHPAPI php_stream_filter *php_stream_filter_remove(php_stream_filter *filter, int call_dtor); PHPAPI void php_stream_filter_free(php_stream_filter *filter); PHPAPI php_stream_filter *_php_stream_filter_alloc(const php_stream_filter_ops *fops, void *abstract, uint8_t persistent STREAMS_DC); END_EXTERN_C() #define php_stream_filter_alloc(fops, thisptr, persistent) _php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_CC) #define php_stream_filter_alloc_rel(fops, thisptr, persistent) _php_stream_filter_alloc((fops), (thisptr), (persistent) STREAMS_REL_CC) #define php_stream_filter_prepend(chain, filter) _php_stream_filter_prepend((chain), (filter)) #define php_stream_filter_append(chain, filter) _php_stream_filter_append((chain), (filter)) #define php_stream_filter_flush(filter, finish) _php_stream_filter_flush((filter), (finish)) #define php_stream_is_filtered(stream) ((stream)->readfilters.head || (stream)->writefilters.head) typedef struct _php_stream_filter_factory { php_stream_filter *(*create_filter)(const char *filtername, zval *filterparams, uint8_t persistent); } php_stream_filter_factory; BEGIN_EXTERN_C() PHPAPI int php_stream_filter_register_factory(const char *filterpattern, const php_stream_filter_factory *factory); PHPAPI int php_stream_filter_unregister_factory(const char *filterpattern); PHPAPI int php_stream_filter_register_factory_volatile(zend_string *filterpattern, const php_stream_filter_factory *factory); PHPAPI php_stream_filter *php_stream_filter_create(const char *filtername, zval *filterparams, uint8_t persistent); END_EXTERN_C() /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!")&)&main/php_output.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_OUTPUT_H #define PHP_OUTPUT_H #define PHP_OUTPUT_NEWAPI 1 /* handler ops */ #define PHP_OUTPUT_HANDLER_WRITE 0x00 /* standard passthru */ #define PHP_OUTPUT_HANDLER_START 0x01 /* start */ #define PHP_OUTPUT_HANDLER_CLEAN 0x02 /* restart */ #define PHP_OUTPUT_HANDLER_FLUSH 0x04 /* pass along as much as possible */ #define PHP_OUTPUT_HANDLER_FINAL 0x08 /* finalize */ #define PHP_OUTPUT_HANDLER_CONT PHP_OUTPUT_HANDLER_WRITE #define PHP_OUTPUT_HANDLER_END PHP_OUTPUT_HANDLER_FINAL /* handler types */ #define PHP_OUTPUT_HANDLER_INTERNAL 0x0000 #define PHP_OUTPUT_HANDLER_USER 0x0001 /* handler ability flags */ #define PHP_OUTPUT_HANDLER_CLEANABLE 0x0010 #define PHP_OUTPUT_HANDLER_FLUSHABLE 0x0020 #define PHP_OUTPUT_HANDLER_REMOVABLE 0x0040 #define PHP_OUTPUT_HANDLER_STDFLAGS 0x0070 /* handler status flags */ #define PHP_OUTPUT_HANDLER_STARTED 0x1000 #define PHP_OUTPUT_HANDLER_DISABLED 0x2000 #define PHP_OUTPUT_HANDLER_PROCESSED 0x4000 /* handler op return values */ typedef enum _php_output_handler_status_t { PHP_OUTPUT_HANDLER_FAILURE, PHP_OUTPUT_HANDLER_SUCCESS, PHP_OUTPUT_HANDLER_NO_DATA } php_output_handler_status_t; /* php_output_stack_pop() flags */ #define PHP_OUTPUT_POP_TRY 0x000 #define PHP_OUTPUT_POP_FORCE 0x001 #define PHP_OUTPUT_POP_DISCARD 0x010 #define PHP_OUTPUT_POP_SILENT 0x100 /* real global flags */ #define PHP_OUTPUT_IMPLICITFLUSH 0x01 #define PHP_OUTPUT_DISABLED 0x02 #define PHP_OUTPUT_WRITTEN 0x04 #define PHP_OUTPUT_SENT 0x08 /* supplementary flags for php_output_get_status() */ #define PHP_OUTPUT_ACTIVE 0x10 #define PHP_OUTPUT_LOCKED 0x20 /* output layer is ready to use */ #define PHP_OUTPUT_ACTIVATED 0x100000 /* handler hooks */ typedef enum _php_output_handler_hook_t { PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ, PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS, PHP_OUTPUT_HANDLER_HOOK_GET_LEVEL, PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE, PHP_OUTPUT_HANDLER_HOOK_DISABLE, /* unused */ PHP_OUTPUT_HANDLER_HOOK_LAST } php_output_handler_hook_t; #define PHP_OUTPUT_HANDLER_INITBUF_SIZE(s) \ ( ((s) > 1) ? \ (s) + PHP_OUTPUT_HANDLER_ALIGNTO_SIZE - ((s) % (PHP_OUTPUT_HANDLER_ALIGNTO_SIZE)) : \ PHP_OUTPUT_HANDLER_DEFAULT_SIZE \ ) #define PHP_OUTPUT_HANDLER_ALIGNTO_SIZE 0x1000 #define PHP_OUTPUT_HANDLER_DEFAULT_SIZE 0x4000 typedef struct _php_output_buffer { char *data; size_t size; size_t used; uint32_t free:1; uint32_t _reserved:31; } php_output_buffer; typedef struct _php_output_context { int op; php_output_buffer in; php_output_buffer out; } php_output_context; /* old-style, stateless callback */ typedef void (*php_output_handler_func_t)(char *output, size_t output_len, char **handled_output, size_t *handled_output_len, int mode); /* new-style, opaque context callback */ typedef int (*php_output_handler_context_func_t)(void **handler_context, php_output_context *output_context); /* output handler context dtor */ typedef void (*php_output_handler_context_dtor_t)(void *opaq); /* conflict check callback */ typedef int (*php_output_handler_conflict_check_t)(const char *handler_name, size_t handler_name_len); /* ctor for aliases */ typedef struct _php_output_handler *(*php_output_handler_alias_ctor_t)(const char *handler_name, size_t handler_name_len, size_t chunk_size, int flags); typedef struct _php_output_handler_user_func_t { zend_fcall_info fci; zend_fcall_info_cache fcc; zval zoh; } php_output_handler_user_func_t; typedef struct _php_output_handler { zend_string *name; int flags; int level; size_t size; php_output_buffer buffer; void *opaq; void (*dtor)(void *opaq); union { php_output_handler_user_func_t *user; php_output_handler_context_func_t internal; } func; } php_output_handler; ZEND_BEGIN_MODULE_GLOBALS(output) zend_stack handlers; php_output_handler *active; php_output_handler *running; const char *output_start_filename; int output_start_lineno; int flags; ZEND_END_MODULE_GLOBALS(output) PHPAPI ZEND_EXTERN_MODULE_GLOBALS(output) /* there should not be a need to use OG() from outside of output.c */ #ifdef ZTS # define OG(v) ZEND_TSRMG(output_globals_id, zend_output_globals *, v) #else # define OG(v) (output_globals.v) #endif /* convenience macros */ #define PHPWRITE(str, str_len) php_output_write((str), (str_len)) #define PHPWRITE_H(str, str_len) php_output_write_unbuffered((str), (str_len)) #define PUTC(c) php_output_write((const char *) &(c), 1) #define PUTC_H(c) php_output_write_unbuffered((const char *) &(c), 1) #define PUTS(str) do { \ const char *__str = (str); \ php_output_write(__str, strlen(__str)); \ } while (0) #define PUTS_H(str) do { \ const char *__str = (str); \ php_output_write_unbuffered(__str, strlen(__str)); \ } while (0) BEGIN_EXTERN_C() extern const char php_output_default_handler_name[sizeof("default output handler")]; extern const char php_output_devnull_handler_name[sizeof("null output handler")]; #define php_output_tearup() \ php_output_startup(); \ php_output_activate() #define php_output_teardown() \ php_output_end_all(); \ php_output_deactivate(); \ php_output_shutdown() /* MINIT */ PHPAPI void php_output_startup(void); /* MSHUTDOWN */ PHPAPI void php_output_shutdown(void); PHPAPI void php_output_register_constants(void); /* RINIT */ PHPAPI int php_output_activate(void); /* RSHUTDOWN */ PHPAPI void php_output_deactivate(void); PHPAPI void php_output_set_status(int status); PHPAPI int php_output_get_status(void); PHPAPI void php_output_set_implicit_flush(int flush); PHPAPI const char *php_output_get_start_filename(void); PHPAPI int php_output_get_start_lineno(void); PHPAPI size_t php_output_write_unbuffered(const char *str, size_t len); PHPAPI size_t php_output_write(const char *str, size_t len); PHPAPI int php_output_flush(void); PHPAPI void php_output_flush_all(void); PHPAPI int php_output_clean(void); PHPAPI void php_output_clean_all(void); PHPAPI int php_output_end(void); PHPAPI void php_output_end_all(void); PHPAPI int php_output_discard(void); PHPAPI void php_output_discard_all(void); PHPAPI int php_output_get_contents(zval *p); PHPAPI int php_output_get_length(zval *p); PHPAPI int php_output_get_level(void); PHPAPI php_output_handler* php_output_get_active_handler(void); PHPAPI int php_output_start_default(void); PHPAPI int php_output_start_devnull(void); PHPAPI int php_output_start_user(zval *output_handler, size_t chunk_size, int flags); PHPAPI int php_output_start_internal(const char *name, size_t name_len, php_output_handler_func_t output_handler, size_t chunk_size, int flags); PHPAPI php_output_handler *php_output_handler_create_user(zval *handler, size_t chunk_size, int flags); PHPAPI php_output_handler *php_output_handler_create_internal(const char *name, size_t name_len, php_output_handler_context_func_t handler, size_t chunk_size, int flags); PHPAPI void php_output_handler_set_context(php_output_handler *handler, void *opaq, void (*dtor)(void*)); PHPAPI int php_output_handler_start(php_output_handler *handler); PHPAPI int php_output_handler_started(const char *name, size_t name_len); PHPAPI int php_output_handler_hook(php_output_handler_hook_t type, void *arg); PHPAPI void php_output_handler_dtor(php_output_handler *handler); PHPAPI void php_output_handler_free(php_output_handler **handler); PHPAPI int php_output_handler_conflict(const char *handler_new, size_t handler_new_len, const char *handler_set, size_t handler_set_len); PHPAPI int php_output_handler_conflict_register(const char *handler_name, size_t handler_name_len, php_output_handler_conflict_check_t check_func); PHPAPI int php_output_handler_reverse_conflict_register(const char *handler_name, size_t handler_name_len, php_output_handler_conflict_check_t check_func); PHPAPI php_output_handler_alias_ctor_t php_output_handler_alias(const char *handler_name, size_t handler_name_len); PHPAPI int php_output_handler_alias_register(const char *handler_name, size_t handler_name_len, php_output_handler_alias_ctor_t func); END_EXTERN_C() PHP_FUNCTION(ob_start); PHP_FUNCTION(ob_flush); PHP_FUNCTION(ob_clean); PHP_FUNCTION(ob_end_flush); PHP_FUNCTION(ob_end_clean); PHP_FUNCTION(ob_get_flush); PHP_FUNCTION(ob_get_clean); PHP_FUNCTION(ob_get_contents); PHP_FUNCTION(ob_get_length); PHP_FUNCTION(ob_get_level); PHP_FUNCTION(ob_get_status); PHP_FUNCTION(ob_implicit_flush); PHP_FUNCTION(ob_list_handlers); PHP_FUNCTION(output_add_rewrite_var); PHP_FUNCTION(output_reset_rewrite_vars); #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!=((main/php_network.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Venaas | +----------------------------------------------------------------------+ */ #ifndef _PHP_NETWORK_H #define _PHP_NETWORK_H #include #ifdef PHP_WIN32 # include "win32/inet.h" #else # undef closesocket # define closesocket close # include #endif #ifndef HAVE_SHUTDOWN #undef shutdown #define shutdown(s,n) /* nothing */ #endif #ifdef PHP_WIN32 # ifdef EWOULDBLOCK # undef EWOULDBLOCK # endif # ifdef EINPROGRESS # undef EINPROGRESS # endif # define EWOULDBLOCK WSAEWOULDBLOCK # define EINPROGRESS WSAEWOULDBLOCK # define fsync _commit # define ftruncate(a, b) chsize(a, b) #endif /* defined(PHP_WIN32) */ #ifndef EWOULDBLOCK # define EWOULDBLOCK EAGAIN #endif #ifdef PHP_WIN32 #define php_socket_errno() WSAGetLastError() #else #define php_socket_errno() errno #endif /* like strerror, but caller must efree the returned string, * unless buf is not NULL. * Also works sensibly for win32 */ BEGIN_EXTERN_C() PHPAPI char *php_socket_strerror(long err, char *buf, size_t bufsize); PHPAPI zend_string *php_socket_error_str(long err); END_EXTERN_C() #ifdef HAVE_NETINET_IN_H # include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_GETHOSTBYNAME_R #include #endif /* These are here, rather than with the win32 counterparts above, * since defines them. */ #ifndef SHUT_RD # define SHUT_RD 0 # define SHUT_WR 1 # define SHUT_RDWR 2 #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifdef HAVE_STDDEF_H #include #endif #ifdef PHP_WIN32 typedef SOCKET php_socket_t; #else typedef int php_socket_t; #endif #ifdef PHP_WIN32 # define SOCK_ERR INVALID_SOCKET # define SOCK_CONN_ERR SOCKET_ERROR # define SOCK_RECV_ERR SOCKET_ERROR #else # define SOCK_ERR -1 # define SOCK_CONN_ERR -1 # define SOCK_RECV_ERR -1 #endif #define STREAM_SOCKOP_NONE (1 << 0) #define STREAM_SOCKOP_SO_REUSEPORT (1 << 1) #define STREAM_SOCKOP_SO_BROADCAST (1 << 2) #define STREAM_SOCKOP_IPV6_V6ONLY (1 << 3) #define STREAM_SOCKOP_IPV6_V6ONLY_ENABLED (1 << 4) #define STREAM_SOCKOP_TCP_NODELAY (1 << 5) /* uncomment this to debug poll(2) emulation on systems that have poll(2) */ /* #define PHP_USE_POLL_2_EMULATION 1 */ #if defined(HAVE_POLL) # if defined(HAVE_POLL_H) # include # elif defined(HAVE_SYS_POLL_H) # include # endif typedef struct pollfd php_pollfd; #else typedef struct _php_pollfd { php_socket_t fd; short events; short revents; } php_pollfd; PHPAPI int php_poll2(php_pollfd *ufds, unsigned int nfds, int timeout); #ifndef POLLIN # define POLLIN 0x0001 /* There is data to read */ # define POLLPRI 0x0002 /* There is urgent data to read */ # define POLLOUT 0x0004 /* Writing now will not block */ # define POLLERR 0x0008 /* Error condition */ # define POLLHUP 0x0010 /* Hung up */ # define POLLNVAL 0x0020 /* Invalid request: fd not open */ #endif # ifndef PHP_USE_POLL_2_EMULATION # define PHP_USE_POLL_2_EMULATION 1 # endif #endif #define PHP_POLLREADABLE (POLLIN|POLLERR|POLLHUP) #ifndef PHP_USE_POLL_2_EMULATION # define php_poll2(ufds, nfds, timeout) poll(ufds, nfds, timeout) #endif /* timeval-to-timeout (for poll(2)) */ static inline int php_tvtoto(struct timeval *timeouttv) { if (timeouttv) { return (timeouttv->tv_sec * 1000) + (timeouttv->tv_usec / 1000); } return -1; } /* hybrid select(2)/poll(2) for a single descriptor. * timeouttv follows same rules as select(2), but is reduced to millisecond accuracy. * Returns 0 on timeout, -1 on error, or the event mask (ala poll(2)). */ static inline int php_pollfd_for(php_socket_t fd, int events, struct timeval *timeouttv) { php_pollfd p; int n; p.fd = fd; p.events = events; p.revents = 0; n = php_poll2(&p, 1, php_tvtoto(timeouttv)); if (n > 0) { return p.revents; } return n; } static inline int php_pollfd_for_ms(php_socket_t fd, int events, int timeout) { php_pollfd p; int n; p.fd = fd; p.events = events; p.revents = 0; n = php_poll2(&p, 1, timeout); if (n > 0) { return p.revents; } return n; } /* emit warning and suggestion for unsafe select(2) usage */ PHPAPI void _php_emit_fd_setsize_warning(int max_fd); #ifdef PHP_WIN32 /* it is safe to FD_SET too many fd's under win32; the macro will simply ignore * descriptors that go beyond the default FD_SETSIZE */ # define PHP_SAFE_FD_SET(fd, set) FD_SET(fd, set) # define PHP_SAFE_FD_CLR(fd, set) FD_CLR(fd, set) # define PHP_SAFE_FD_ISSET(fd, set) FD_ISSET(fd, set) # define PHP_SAFE_MAX_FD(m, n) do { if (n + 1 >= FD_SETSIZE) { _php_emit_fd_setsize_warning(n); }} while(0) #else # define PHP_SAFE_FD_SET(fd, set) do { if (fd < FD_SETSIZE) FD_SET(fd, set); } while(0) # define PHP_SAFE_FD_CLR(fd, set) do { if (fd < FD_SETSIZE) FD_CLR(fd, set); } while(0) # define PHP_SAFE_FD_ISSET(fd, set) ((fd < FD_SETSIZE) && FD_ISSET(fd, set)) # define PHP_SAFE_MAX_FD(m, n) do { if (m >= FD_SETSIZE) { _php_emit_fd_setsize_warning(m); m = FD_SETSIZE - 1; }} while(0) #endif #define PHP_SOCK_CHUNK_SIZE 8192 #ifdef HAVE_SOCKADDR_STORAGE typedef struct sockaddr_storage php_sockaddr_storage; #else typedef struct { #ifdef HAVE_SOCKADDR_SA_LEN unsigned char ss_len; unsigned char ss_family; #else unsigned short ss_family; #endif char info[126]; } php_sockaddr_storage; #endif BEGIN_EXTERN_C() PHPAPI int php_network_getaddresses(const char *host, int socktype, struct sockaddr ***sal, zend_string **error_string); PHPAPI void php_network_freeaddresses(struct sockaddr **sal); PHPAPI php_socket_t php_network_connect_socket_to_host(const char *host, unsigned short port, int socktype, int asynchronous, struct timeval *timeout, zend_string **error_string, int *error_code, char *bindto, unsigned short bindport, long sockopts ); PHPAPI int php_network_connect_socket(php_socket_t sockfd, const struct sockaddr *addr, socklen_t addrlen, int asynchronous, struct timeval *timeout, zend_string **error_string, int *error_code); #define php_connect_nonb(sock, addr, addrlen, timeout) \ php_network_connect_socket((sock), (addr), (addrlen), 0, (timeout), NULL, NULL) PHPAPI php_socket_t php_network_bind_socket_to_local_addr(const char *host, unsigned port, int socktype, long sockopts, zend_string **error_string, int *error_code ); PHPAPI php_socket_t php_network_accept_incoming(php_socket_t srvsock, zend_string **textaddr, struct sockaddr **addr, socklen_t *addrlen, struct timeval *timeout, zend_string **error_string, int *error_code, int tcp_nodelay ); PHPAPI int php_network_get_sock_name(php_socket_t sock, zend_string **textaddr, struct sockaddr **addr, socklen_t *addrlen ); PHPAPI int php_network_get_peer_name(php_socket_t sock, zend_string **textaddr, struct sockaddr **addr, socklen_t *addrlen ); PHPAPI void php_any_addr(int family, php_sockaddr_storage *addr, unsigned short port); PHPAPI int php_sockaddr_size(php_sockaddr_storage *addr); END_EXTERN_C() struct _php_netstream_data_t { php_socket_t socket; char is_blocked; struct timeval timeout; char timeout_event; size_t ownsize; }; typedef struct _php_netstream_data_t php_netstream_data_t; PHPAPI extern const php_stream_ops php_stream_socket_ops; extern const php_stream_ops php_stream_generic_socket_ops; #define PHP_STREAM_IS_SOCKET (&php_stream_socket_ops) BEGIN_EXTERN_C() PHPAPI php_stream *_php_stream_sock_open_from_socket(php_socket_t socket, const char *persistent_id STREAMS_DC ); /* open a connection to a host using php_hostconnect and return a stream */ PHPAPI php_stream *_php_stream_sock_open_host(const char *host, unsigned short port, int socktype, struct timeval *timeout, const char *persistent_id STREAMS_DC); PHPAPI void php_network_populate_name_from_sockaddr( /* input address */ struct sockaddr *sa, socklen_t sl, /* output readable address */ zend_string **textaddr, /* output address */ struct sockaddr **addr, socklen_t *addrlen ); PHPAPI int php_network_parse_network_address_with_port(const char *addr, zend_long addrlen, struct sockaddr *sa, socklen_t *sl); PHPAPI struct hostent* php_network_gethostbyname(char *name); PHPAPI int php_set_sock_blocking(php_socket_t socketd, int block); END_EXTERN_C() #define php_stream_sock_open_from_socket(socket, persistent) _php_stream_sock_open_from_socket((socket), (persistent) STREAMS_CC) #define php_stream_sock_open_host(host, port, socktype, timeout, persistent) _php_stream_sock_open_host((host), (port), (socktype), (timeout), (persistent) STREAMS_CC) /* {{{ memory debug */ #define php_stream_sock_open_from_socket_rel(socket, persistent) _php_stream_sock_open_from_socket((socket), (persistent) STREAMS_REL_CC) #define php_stream_sock_open_host_rel(host, port, socktype, timeout, persistent) _php_stream_sock_open_host((host), (port), (socktype), (timeout), (persistent) STREAMS_REL_CC) #define php_stream_sock_open_unix_rel(path, pathlen, persistent, timeval) _php_stream_sock_open_unix((path), (pathlen), (persistent), (timeval) STREAMS_REL_CC) /* }}} */ #ifndef MAXFQDNLEN #define MAXFQDNLEN 255 #endif #endif /* _PHP_NETWORK_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!imain/build-defs.hnu[/* -*- C -*- +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Sæther Bakken | +----------------------------------------------------------------------+ */ #define CONFIGURE_COMMAND " './configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--disable-dependency-tracking' '--prefix=/opt/cpanel/ea-php73/root/usr' '--exec-prefix=/opt/cpanel/ea-php73/root/usr' '--bindir=/opt/cpanel/ea-php73/root/usr/bin' '--sbindir=/opt/cpanel/ea-php73/root/usr/sbin' '--sysconfdir=/opt/cpanel/ea-php73/root/etc' '--datadir=/opt/cpanel/ea-php73/root/usr/share' '--includedir=/opt/cpanel/ea-php73/root/usr/include' '--libdir=/opt/cpanel/ea-php73/root/usr/lib64' '--libexecdir=/opt/cpanel/ea-php73/root/usr/libexec' '--localstatedir=/opt/cpanel/ea-php73/root/var' '--sharedstatedir=/opt/cpanel/ea-php73/root/var/lib' '--mandir=/opt/cpanel/ea-php73/root/usr/share/man' '--infodir=/opt/cpanel/ea-php73/root/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/opt/cpanel/ea-php73/root/etc' '--with-config-file-scan-dir=/opt/cpanel/ea-php73/root/etc/php.d' '--disable-debug' '--with-password-argon2=/opt/cpanel/libargon2' '--with-pic' '--without-pear' '--with-bz2' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--with-xpm-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl=/usr' '--with-openssl-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-sockets' '--with-kerberos' '--enable-shmop' '--with-system-tzdata' '--with-mhash' '--libdir=/opt/cpanel/ea-php73/root/usr/lib64/php' '--enable-pcntl' '--enable-opcache' '--disable-opcache-file' '--enable-phpdbg' '--with-imap=shared,/opt/cpanel/ea-php73/root/usr' '--with-imap-ssl' '--enable-mbstring=shared' '--enable-mbregex' '--with-webp-dir=/usr' '--with-gd=shared' '--with-gmp=shared' '--enable-calendar=shared' '--enable-bcmath=shared' '--with-bz2=shared' '--enable-ctype=shared' '--enable-dba=shared' '--with-db4=/usr' '--with-tcadb=/usr' '--enable-exif=shared' '--enable-ftp=shared' '--with-gettext=shared' '--with-iconv=shared' '--enable-sockets=shared' '--enable-tokenizer=shared' '--with-xmlrpc=shared' '--with-ldap=shared' '--with-ldap-sasl' '--enable-mysqlnd=shared' '--with-mysqli=shared,mysqlnd' '--with-mysql-sock=/var/lib/mysql/mysql.sock' '--enable-dom=shared' '--with-pgsql=shared' '--enable-simplexml=shared' '--enable-xml=shared' '--enable-wddx=shared' '--with-snmp=shared,/usr' '--enable-soap=shared' '--with-xsl=shared,/usr' '--enable-xmlreader=shared' '--enable-xmlwriter=shared' '--with-curl=shared' '--enable-pdo=shared' '--with-pdo-odbc=shared,unixODBC,/usr' '--with-pdo-mysql=shared,mysqlnd' '--with-pdo-pgsql=shared,/usr' '--with-pdo-sqlite=shared,/usr' '--with-sqlite3=shared,/usr' '--enable-json=shared' '--without-libzip' '--enable-zip=shared' '--without-readline' '--with-libedit' '--with-pspell=shared' '--enable-phar=shared' '--with-tidy=shared,/opt/cpanel/libtidy' '--enable-sysvmsg=shared' '--enable-sysvshm=shared' '--enable-sysvsem=shared' '--enable-shmop=shared' '--enable-posix=shared' '--with-unixODBC=shared,/usr' '--enable-intl=shared' '--with-icu-dir=/usr' '--with-enchant=shared,/usr' '--with-recode=shared,/usr' '--enable-fileinfo=shared' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'LDFLAGS=-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,--enable-new-dtags -Wl,-rpath=/opt/cpanel/ea-php73/root/usr/lib64'" #define PHP_ADA_INCLUDE "" #define PHP_ADA_LFLAGS "" #define PHP_ADA_LIBS "" #define PHP_APACHE_INCLUDE "" #define PHP_APACHE_TARGET "" #define PHP_FHTTPD_INCLUDE "" #define PHP_FHTTPD_LIB "" #define PHP_FHTTPD_TARGET "" #define PHP_CFLAGS "$(CFLAGS_CLEAN) -prefer-non-pic -static" #define PHP_DBASE_LIB "" #define PHP_BUILD_DEBUG "" #define PHP_GDBM_INCLUDE "" #define PHP_IBASE_INCLUDE "" #define PHP_IBASE_LFLAGS "" #define PHP_IBASE_LIBS "" #define PHP_IFX_INCLUDE "" #define PHP_IFX_LFLAGS "" #define PHP_IFX_LIBS "" #define PHP_INSTALL_IT "" #define PHP_IODBC_INCLUDE "" #define PHP_IODBC_LFLAGS "" #define PHP_IODBC_LIBS "" #define PHP_MSQL_INCLUDE "" #define PHP_MSQL_LFLAGS "" #define PHP_MSQL_LIBS "" #define PHP_MYSQL_INCLUDE "@MYSQL_INCLUDE@" #define PHP_MYSQL_LIBS "@MYSQL_LIBS@" #define PHP_MYSQL_TYPE "@MYSQL_MODULE_TYPE@" #define PHP_ODBC_INCLUDE "-I/usr/include" #define PHP_ODBC_LFLAGS "-L/usr/lib64" #define PHP_ODBC_LIBS "-lodbc" #define PHP_ODBC_TYPE "unixODBC" #define PHP_OCI8_SHARED_LIBADD "" #define PHP_OCI8_DIR "" #define PHP_OCI8_ORACLE_VERSION "" #define PHP_ORACLE_SHARED_LIBADD "@ORACLE_SHARED_LIBADD@" #define PHP_ORACLE_DIR "@ORACLE_DIR@" #define PHP_ORACLE_VERSION "@ORACLE_VERSION@" #define PHP_PGSQL_INCLUDE "" #define PHP_PGSQL_LFLAGS "" #define PHP_PGSQL_LIBS "" #define PHP_PROG_SENDMAIL "/usr/sbin/sendmail" #define PHP_SOLID_INCLUDE "" #define PHP_SOLID_LIBS "" #define PHP_EMPRESS_INCLUDE "" #define PHP_EMPRESS_LIBS "" #define PHP_SYBASE_INCLUDE "" #define PHP_SYBASE_LFLAGS "" #define PHP_SYBASE_LIBS "" #define PHP_DBM_TYPE "" #define PHP_DBM_LIB "" #define PHP_LDAP_LFLAGS "" #define PHP_LDAP_INCLUDE "" #define PHP_LDAP_LIBS "" #define PEAR_INSTALLDIR "/opt/cpanel/ea-php73/root/usr/share/pear" #define PHP_INCLUDE_PATH ".:/opt/cpanel/ea-php73/root/usr/share/pear" #define PHP_EXTENSION_DIR "/opt/cpanel/ea-php73/root/usr/lib64/php/modules" #define PHP_PREFIX "/opt/cpanel/ea-php73/root/usr" #define PHP_BINDIR "/opt/cpanel/ea-php73/root/usr/bin" #define PHP_SBINDIR "/opt/cpanel/ea-php73/root/usr/sbin" #define PHP_MANDIR "/opt/cpanel/ea-php73/root/usr/share/man" #define PHP_LIBDIR "/opt/cpanel/ea-php73/root/usr/lib64/php" #define PHP_DATADIR "/opt/cpanel/ea-php73/root/usr/share" #define PHP_SYSCONFDIR "/opt/cpanel/ea-php73/root/etc" #define PHP_LOCALSTATEDIR "/opt/cpanel/ea-php73/root/var" #define PHP_CONFIG_FILE_PATH "/opt/cpanel/ea-php73/root/etc" #define PHP_CONFIG_FILE_SCAN_DIR "/opt/cpanel/ea-php73/root/etc/php.d" #define PHP_SHLIB_SUFFIX "so" #define PHP_SHLIB_EXT_PREFIX "" PK!main/php_reentrancy.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Sascha Schumann | +----------------------------------------------------------------------+ */ #ifndef PHP_REENTRANCY_H #define PHP_REENTRANCY_H #include "php.h" #include #ifdef HAVE_DIRENT_H #include #endif #include /* currently, PHP does not check for these functions, but assumes that they are available on all systems. */ #define HAVE_LOCALTIME 1 #define HAVE_GMTIME 1 #define HAVE_ASCTIME 1 #define HAVE_CTIME 1 #if defined(PHP_IRIX_TIME_R) #undef HAVE_ASCTIME_R #undef HAVE_CTIME_R #endif #if defined(PHP_HPUX_TIME_R) #undef HAVE_LOCALTIME_R #undef HAVE_ASCTIME_R #undef HAVE_CTIME_R #undef HAVE_GMTIME_R #endif BEGIN_EXTERN_C() #if defined(HAVE_POSIX_READDIR_R) #define php_readdir_r readdir_r #else PHPAPI int php_readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result); #endif #if !defined(HAVE_LOCALTIME_R) && defined(HAVE_LOCALTIME) #define PHP_NEED_REENTRANCY 1 PHPAPI struct tm *php_localtime_r(const time_t *const timep, struct tm *p_tm); #else #define php_localtime_r localtime_r #ifdef MISSING_LOCALTIME_R_DECL struct tm *localtime_r(const time_t *const timep, struct tm *p_tm); #endif #endif #if !defined(HAVE_CTIME_R) && defined(HAVE_CTIME) #define PHP_NEED_REENTRANCY 1 PHPAPI char *php_ctime_r(const time_t *clock, char *buf); #else #define php_ctime_r ctime_r #ifdef MISSING_CTIME_R_DECL char *ctime_r(const time_t *clock, char *buf); #endif #endif #if !defined(HAVE_ASCTIME_R) && defined(HAVE_ASCTIME) #define PHP_NEED_REENTRANCY 1 PHPAPI char *php_asctime_r(const struct tm *tm, char *buf); #else #define php_asctime_r asctime_r #ifdef MISSING_ASCTIME_R_DECL char *asctime_r(const struct tm *tm, char *buf); #endif #endif #if !defined(HAVE_GMTIME_R) && defined(HAVE_GMTIME) #define PHP_NEED_REENTRANCY 1 PHPAPI struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm); #else #define php_gmtime_r gmtime_r #ifdef MISSING_GMTIME_R_DECL struct tm *php_gmtime_r(const time_t *const timep, struct tm *p_tm); #endif #endif #if !defined(HAVE_STRTOK_R) PHPAPI char *php_strtok_r(char *s, const char *delim, char **last); #else #define php_strtok_r strtok_r #ifdef MISSING_STRTOK_R_DECL char *strtok_r(char *s, const char *delim, char **last); #endif #endif #if !defined(HAVE_RAND_R) PHPAPI int php_rand_r(unsigned int *seed); #else #define php_rand_r rand_r #endif END_EXTERN_C() #if !defined(ZTS) #undef PHP_NEED_REENTRANCY #endif #if defined(PHP_NEED_REENTRANCY) void reentrancy_startup(void); void reentrancy_shutdown(void); #else #define reentrancy_startup() #define reentrancy_shutdown() #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!0(( main/SAPI.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef SAPI_H #define SAPI_H #include "php.h" #include "zend.h" #include "zend_API.h" #include "zend_llist.h" #include "zend_operators.h" #ifdef PHP_WIN32 #include "win32/php_stdint.h" #endif #include #define SAPI_OPTION_NO_CHDIR 1 #define SAPI_POST_BLOCK_SIZE 0x4000 #ifdef PHP_WIN32 # ifdef SAPI_EXPORTS # define SAPI_API __declspec(dllexport) # else # define SAPI_API __declspec(dllimport) # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # define SAPI_API __attribute__ ((visibility("default"))) #else # define SAPI_API #endif #undef shutdown typedef struct { char *header; size_t header_len; } sapi_header_struct; typedef struct { zend_llist headers; int http_response_code; unsigned char send_default_content_type; char *mimetype; char *http_status_line; } sapi_headers_struct; typedef struct _sapi_post_entry sapi_post_entry; typedef struct _sapi_module_struct sapi_module_struct; BEGIN_EXTERN_C() extern SAPI_API sapi_module_struct sapi_module; /* true global */ END_EXTERN_C() /* Some values in this structure needs to be filled in before * calling sapi_activate(). We WILL change the `char *' entries, * so make sure that you allocate a separate buffer for them * and that you free them after sapi_deactivate(). */ typedef struct { const char *request_method; char *query_string; char *cookie_data; zend_long content_length; char *path_translated; char *request_uri; /* Do not use request_body directly, but the php://input stream wrapper instead */ struct _php_stream *request_body; const char *content_type; zend_bool headers_only; zend_bool no_headers; zend_bool headers_read; sapi_post_entry *post_entry; char *content_type_dup; /* for HTTP authentication */ char *auth_user; char *auth_password; char *auth_digest; /* this is necessary for the CGI SAPI module */ char *argv0; char *current_user; int current_user_length; /* this is necessary for CLI module */ int argc; char **argv; int proto_num; } sapi_request_info; typedef struct _sapi_globals_struct { void *server_context; sapi_request_info request_info; sapi_headers_struct sapi_headers; int64_t read_post_bytes; unsigned char post_read; unsigned char headers_sent; zend_stat_t global_stat; char *default_mimetype; char *default_charset; HashTable *rfc1867_uploaded_files; zend_long post_max_size; int options; zend_bool sapi_started; double global_request_time; HashTable known_post_content_types; zval callback_func; zend_fcall_info_cache fci_cache; } sapi_globals_struct; BEGIN_EXTERN_C() #ifdef ZTS # define SG(v) ZEND_TSRMG(sapi_globals_id, sapi_globals_struct *, v) SAPI_API extern int sapi_globals_id; #else # define SG(v) (sapi_globals.v) extern SAPI_API sapi_globals_struct sapi_globals; #endif SAPI_API void sapi_startup(sapi_module_struct *sf); SAPI_API void sapi_shutdown(void); SAPI_API void sapi_activate(void); SAPI_API void sapi_deactivate(void); SAPI_API void sapi_initialize_empty_request(void); SAPI_API void sapi_add_request_header(char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg); END_EXTERN_C() /* * This is the preferred and maintained API for * operating on HTTP headers. */ /* * Always specify a sapi_header_line this way: * * sapi_header_line ctr = {0}; */ typedef struct { char *line; /* If you allocated this, you need to free it yourself */ size_t line_len; zend_long response_code; /* long due to zend_parse_parameters compatibility */ } sapi_header_line; typedef enum { /* Parameter: */ SAPI_HEADER_REPLACE, /* sapi_header_line* */ SAPI_HEADER_ADD, /* sapi_header_line* */ SAPI_HEADER_DELETE, /* sapi_header_line* */ SAPI_HEADER_DELETE_ALL, /* void */ SAPI_HEADER_SET_STATUS /* int */ } sapi_header_op_enum; BEGIN_EXTERN_C() SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg); /* Deprecated functions. Use sapi_header_op instead. */ SAPI_API int sapi_add_header_ex(char *header_line, size_t header_line_len, zend_bool duplicate, zend_bool replace); #define sapi_add_header(a, b, c) sapi_add_header_ex((a),(b),(c),1) SAPI_API int sapi_send_headers(void); SAPI_API void sapi_free_header(sapi_header_struct *sapi_header); SAPI_API void sapi_handle_post(void *arg); SAPI_API size_t sapi_read_post_block(char *buffer, size_t buflen); SAPI_API int sapi_register_post_entries(const sapi_post_entry *post_entry); SAPI_API int sapi_register_post_entry(const sapi_post_entry *post_entry); SAPI_API void sapi_unregister_post_entry(const sapi_post_entry *post_entry); SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(void)); SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray)); SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, size_t val_len, size_t *new_val_len), unsigned int (*input_filter_init)(void)); SAPI_API int sapi_flush(void); SAPI_API zend_stat_t *sapi_get_stat(void); SAPI_API char *sapi_getenv(char *name, size_t name_len); SAPI_API char *sapi_get_default_content_type(void); SAPI_API void sapi_get_default_content_type_header(sapi_header_struct *default_header); SAPI_API size_t sapi_apply_default_charset(char **mimetype, size_t len); SAPI_API void sapi_activate_headers_only(void); SAPI_API int sapi_get_fd(int *fd); SAPI_API int sapi_force_http_10(void); SAPI_API int sapi_get_target_uid(uid_t *); SAPI_API int sapi_get_target_gid(gid_t *); SAPI_API double sapi_get_request_time(void); SAPI_API void sapi_terminate_process(void); END_EXTERN_C() struct _sapi_module_struct { char *name; char *pretty_name; int (*startup)(struct _sapi_module_struct *sapi_module); int (*shutdown)(struct _sapi_module_struct *sapi_module); int (*activate)(void); int (*deactivate)(void); size_t (*ub_write)(const char *str, size_t str_length); void (*flush)(void *server_context); zend_stat_t *(*get_stat)(void); char *(*getenv)(char *name, size_t name_len); void (*sapi_error)(int type, const char *error_msg, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); int (*header_handler)(sapi_header_struct *sapi_header, sapi_header_op_enum op, sapi_headers_struct *sapi_headers); int (*send_headers)(sapi_headers_struct *sapi_headers); void (*send_header)(sapi_header_struct *sapi_header, void *server_context); size_t (*read_post)(char *buffer, size_t count_bytes); char *(*read_cookies)(void); void (*register_server_variables)(zval *track_vars_array); void (*log_message)(char *message, int syslog_type_int); double (*get_request_time)(void); void (*terminate_process)(void); char *php_ini_path_override; void (*default_post_reader)(void); void (*treat_data)(int arg, char *str, zval *destArray); char *executable_location; int php_ini_ignore; int php_ini_ignore_cwd; /* don't look for php.ini in the current directory */ int (*get_fd)(int *fd); int (*force_http_10)(void); int (*get_target_uid)(uid_t *); int (*get_target_gid)(gid_t *); unsigned int (*input_filter)(int arg, char *var, char **val, size_t val_len, size_t *new_val_len); void (*ini_defaults)(HashTable *configuration_hash); int phpinfo_as_text; char *ini_entries; const zend_function_entry *additional_functions; unsigned int (*input_filter_init)(void); }; struct _sapi_post_entry { char *content_type; uint32_t content_type_len; void (*post_reader)(void); void (*post_handler)(char *content_type_dup, void *arg); }; /* header_handler() constants */ #define SAPI_HEADER_ADD (1<<0) #define SAPI_HEADER_SENT_SUCCESSFULLY 1 #define SAPI_HEADER_DO_SEND 2 #define SAPI_HEADER_SEND_FAILED 3 #define SAPI_DEFAULT_MIMETYPE "text/html" #define SAPI_DEFAULT_CHARSET PHP_DEFAULT_CHARSET #define SAPI_PHP_VERSION_HEADER "X-Powered-By: PHP/" PHP_VERSION #define SAPI_POST_READER_FUNC(post_reader) void post_reader(void) #define SAPI_POST_HANDLER_FUNC(post_handler) void post_handler(char *content_type_dup, void *arg) #define SAPI_TREAT_DATA_FUNC(treat_data) void treat_data(int arg, char *str, zval* destArray) #define SAPI_INPUT_FILTER_FUNC(input_filter) unsigned int input_filter(int arg, char *var, char **val, size_t val_len, size_t *new_val_len) BEGIN_EXTERN_C() SAPI_API SAPI_POST_READER_FUNC(sapi_read_standard_form_data); SAPI_API SAPI_POST_READER_FUNC(php_default_post_reader); SAPI_API SAPI_TREAT_DATA_FUNC(php_default_treat_data); SAPI_API SAPI_INPUT_FILTER_FUNC(php_default_input_filter); END_EXTERN_C() #define STANDARD_SAPI_MODULE_PROPERTIES \ NULL, /* php_ini_path_override */ \ NULL, /* default_post_reader */ \ NULL, /* treat_data */ \ NULL, /* executable_location */ \ 0, /* php_ini_ignore */ \ 0, /* php_ini_ignore_cwd */ \ NULL, /* get_fd */ \ NULL, /* force_http_10 */ \ NULL, /* get_target_uid */ \ NULL, /* get_target_gid */ \ NULL, /* input_filter */ \ NULL, /* ini_defaults */ \ 0, /* phpinfo_as_text; */ \ NULL, /* ini_entries; */ \ NULL, /* additional_functions */ \ NULL /* input_filter_init */ #endif /* SAPI_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!#\main/php_scandir.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Shane Caraveo | | Ilia Alshanetsky | +----------------------------------------------------------------------+ */ #ifndef PHP_SCANDIR_H #define PHP_SCANDIR_H #include #ifdef HAVE_SYS_DIR_H #include #endif #ifdef PHP_WIN32 #include "config.w32.h" #include "win32/readdir.h" #else #include #endif #ifdef HAVE_DIRENT_H #include #endif #ifdef HAVE_SCANDIR #define php_scandir scandir #else PHPAPI int php_scandir(const char *dirname, struct dirent **namelist[], int (*selector) (const struct dirent *entry), int (*compare) (const struct dirent **a, const struct dirent **b)); #endif #ifdef HAVE_ALPHASORT #define php_alphasort alphasort #else PHPAPI int php_alphasort(const struct dirent **a, const struct dirent **b); #endif #endif /* PHP_SCANDIR_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!Amain/php_globals.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_GLOBALS_H #define PHP_GLOBALS_H #include "zend_globals.h" typedef struct _php_core_globals php_core_globals; #ifdef ZTS # define PG(v) ZEND_TSRMG(core_globals_id, php_core_globals *, v) extern PHPAPI int core_globals_id; #else # define PG(v) (core_globals.v) extern ZEND_API struct _php_core_globals core_globals; #endif /* Error display modes */ #define PHP_DISPLAY_ERRORS_STDOUT 1 #define PHP_DISPLAY_ERRORS_STDERR 2 /* Track vars */ #define TRACK_VARS_POST 0 #define TRACK_VARS_GET 1 #define TRACK_VARS_COOKIE 2 #define TRACK_VARS_SERVER 3 #define TRACK_VARS_ENV 4 #define TRACK_VARS_FILES 5 #define TRACK_VARS_REQUEST 6 struct _php_tick_function_entry; typedef struct _arg_separators { char *output; char *input; } arg_separators; struct _php_core_globals { zend_bool implicit_flush; zend_long output_buffering; zend_bool enable_dl; char *output_handler; char *unserialize_callback_func; zend_long serialize_precision; zend_long memory_limit; zend_long max_input_time; zend_bool track_errors; zend_bool display_errors; zend_bool display_startup_errors; zend_bool log_errors; zend_long log_errors_max_len; zend_bool ignore_repeated_errors; zend_bool ignore_repeated_source; zend_bool report_memleaks; char *error_log; char *doc_root; char *user_dir; char *include_path; char *open_basedir; char *extension_dir; char *php_binary; char *sys_temp_dir; char *upload_tmp_dir; zend_long upload_max_filesize; char *error_append_string; char *error_prepend_string; char *auto_prepend_file; char *auto_append_file; char *input_encoding; char *internal_encoding; char *output_encoding; arg_separators arg_separator; char *variables_order; HashTable rfc1867_protected_variables; short connection_status; zend_bool ignore_user_abort; unsigned char header_is_being_sent; zend_llist tick_functions; zval http_globals[6]; zend_bool expose_php; zend_bool register_argc_argv; zend_bool auto_globals_jit; char *docref_root; char *docref_ext; zend_bool html_errors; zend_bool xmlrpc_errors; zend_long xmlrpc_error_number; zend_bool activated_auto_globals[8]; zend_bool modules_activated; zend_bool file_uploads; zend_bool during_request_startup; zend_bool allow_url_fopen; zend_bool enable_post_data_reading; zend_bool report_zend_debug; int last_error_type; char *last_error_message; char *last_error_file; int last_error_lineno; char *php_sys_temp_dir; char *disable_functions; char *disable_classes; zend_bool allow_url_include; #ifdef PHP_WIN32 zend_bool com_initialized; #endif zend_long max_input_nesting_level; zend_long max_input_vars; zend_bool in_user_include; char *user_ini_filename; zend_long user_ini_cache_ttl; char *request_order; zend_bool mail_x_header; char *mail_log; zend_bool in_error_log; #ifdef PHP_WIN32 zend_bool windows_show_crt_warning; #endif zend_long syslog_facility; char *syslog_ident; zend_bool have_called_openlog; zend_long syslog_filter; }; #endif /* PHP_GLOBALS_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!m^^main/php_ticks.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Bakken | +----------------------------------------------------------------------+ */ #ifndef PHP_TICKS_H #define PHP_TICKS_H int php_startup_ticks(void); void php_deactivate_ticks(void); void php_shutdown_ticks(void); void php_run_ticks(int count); BEGIN_EXTERN_C() PHPAPI void php_add_tick_function(void (*func)(int, void *), void *arg); PHPAPI void php_remove_tick_function(void (*func)(int, void *), void * arg); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!ynh h main/http_status_codes.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Andrea Faulds | +----------------------------------------------------------------------+ */ #ifndef HTTP_STATUS_CODES_H #define HTTP_STATUS_CODES_H typedef struct _http_response_status_code_pair { const int code; const char *str; } http_response_status_code_pair; static const http_response_status_code_pair http_status_map[] = { { 100, "Continue" }, { 101, "Switching Protocols" }, { 200, "OK" }, { 201, "Created" }, { 202, "Accepted" }, { 203, "Non-Authoritative Information" }, { 204, "No Content" }, { 205, "Reset Content" }, { 206, "Partial Content" }, { 300, "Multiple Choices" }, { 301, "Moved Permanently" }, { 302, "Found" }, { 303, "See Other" }, { 304, "Not Modified" }, { 305, "Use Proxy" }, { 307, "Temporary Redirect" }, { 308, "Permanent Redirect" }, { 400, "Bad Request" }, { 401, "Unauthorized" }, { 402, "Payment Required" }, { 403, "Forbidden" }, { 404, "Not Found" }, { 405, "Method Not Allowed" }, { 406, "Not Acceptable" }, { 407, "Proxy Authentication Required" }, { 408, "Request Timeout" }, { 409, "Conflict" }, { 410, "Gone" }, { 411, "Length Required" }, { 412, "Precondition Failed" }, { 413, "Request Entity Too Large" }, { 414, "Request-URI Too Long" }, { 415, "Unsupported Media Type" }, { 416, "Requested Range Not Satisfiable" }, { 417, "Expectation Failed" }, { 426, "Upgrade Required" }, { 428, "Precondition Required" }, { 429, "Too Many Requests" }, { 431, "Request Header Fields Too Large" }, { 451, "Unavailable For Legal Reasons"}, { 500, "Internal Server Error" }, { 501, "Not Implemented" }, { 502, "Bad Gateway" }, { 503, "Service Unavailable" }, { 504, "Gateway Timeout" }, { 505, "HTTP Version Not Supported" }, { 506, "Variant Also Negotiates" }, { 511, "Network Authentication Required" }, /* to allow search with while() loop */ { 0, NULL } }; static const size_t http_status_map_len = (sizeof(http_status_map) / sizeof(http_response_status_code_pair)) - 1; #endif /* HTTP_STATUS_CODES_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!pc  main/php_version.hnu[/* automatically generated by configure */ /* edit configure.ac to change version number */ #define PHP_MAJOR_VERSION 7 #define PHP_MINOR_VERSION 3 #define PHP_RELEASE_VERSION 33 #define PHP_EXTRA_VERSION "" #define PHP_VERSION "7.3.33" #define PHP_VERSION_ID 70333 PK!mCD main/fopen_wrappers.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Jim Winstead | +----------------------------------------------------------------------+ */ #ifndef FOPEN_WRAPPERS_H #define FOPEN_WRAPPERS_H BEGIN_EXTERN_C() #include "php_globals.h" #include "php_ini.h" PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle); PHPAPI char *expand_filepath(const char *filepath, char *real_path); PHPAPI char *expand_filepath_ex(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len); PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int use_realpath); PHPAPI int php_check_open_basedir(const char *path); PHPAPI int php_check_open_basedir_ex(const char *path, int warn); PHPAPI int php_check_specific_open_basedir(const char *basedir, const char *path); /* OPENBASEDIR_CHECKPATH(filename) to ease merge between 6.x and 5.x */ #define OPENBASEDIR_CHECKPATH(filename) php_check_open_basedir(filename) PHPAPI int php_check_safe_mode_include_dir(const char *path); PHPAPI zend_string *php_resolve_path(const char *filename, size_t filename_len, const char *path); PHPAPI FILE *php_fopen_with_path(const char *filename, const char *mode, const char *path, zend_string **opened_path); PHPAPI char *php_strip_url_passwd(char *path); PHPAPI ZEND_INI_MH(OnUpdateBaseDir); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!%EIImain/php_open_temporary_file.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_OPEN_TEMPORARY_FILE_H #define PHP_OPEN_TEMPORARY_FILE_H #define PHP_TMP_FILE_OPEN_BASEDIR_CHECK (1<<0) #define PHP_TMP_FILE_SILENT (1<<1) BEGIN_EXTERN_C() PHPAPI FILE *php_open_temporary_file(const char *dir, const char *pfx, zend_string **opened_path_p); PHPAPI int php_open_temporary_fd_ex(const char *dir, const char *pfx, zend_string **opened_path_p, uint32_t flags); PHPAPI int php_open_temporary_fd(const char *dir, const char *pfx, zend_string **opened_path_p); PHPAPI const char *php_get_temporary_directory(void); END_EXTERN_C() #endif /* PHP_OPEN_TEMPORARY_FILE_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!EImain/php_getopt.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef PHP_GETOPT_H #define PHP_GETOPT_H #include "php.h" /* Define structure for one recognized option (both single char and long name). * If short_open is '-' this is the last option. */ typedef struct _opt_struct { char opt_char; int need_param; char * opt_name; } opt_struct; BEGIN_EXTERN_C() /* holds the index of the latest fetched element from the opts array */ extern PHPAPI int php_optidx; PHPAPI int php_getopt(int argc, char* const *argv, const opt_struct opts[], char **optarg, int *optind, int show_err, int arg_start); END_EXTERN_C() /* php_getopt will return this value if there is an error in arguments */ #define PHP_GETOPT_INVALID_ARG (-2) #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!ջmain/fastcgi.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ /* FastCGI protocol */ #define FCGI_VERSION_1 1 #define FCGI_MAX_LENGTH 0xffff #define FCGI_KEEP_CONN 1 /* this is near the perfect hash function for most useful FastCGI variables * which combines efficiency and minimal hash collisions */ #define FCGI_HASH_FUNC(var, var_len) \ (UNEXPECTED(var_len < 3) ? (unsigned int)var_len : \ (((unsigned int)var[3]) << 2) + \ (((unsigned int)var[var_len-2]) << 4) + \ (((unsigned int)var[var_len-1]) << 2) + \ var_len) #define FCGI_GETENV(request, name) \ fcgi_quick_getenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1)) #define FCGI_PUTENV(request, name, value) \ fcgi_quick_putenv(request, name, sizeof(name)-1, FCGI_HASH_FUNC(name, sizeof(name)-1), value) typedef enum _fcgi_role { FCGI_RESPONDER = 1, FCGI_AUTHORIZER = 2, FCGI_FILTER = 3 } fcgi_role; enum { FCGI_DEBUG = 1, FCGI_NOTICE = 2, FCGI_WARNING = 3, FCGI_ERROR = 4, FCGI_ALERT = 5, }; typedef enum _fcgi_request_type { FCGI_BEGIN_REQUEST = 1, /* [in] */ FCGI_ABORT_REQUEST = 2, /* [in] (not supported) */ FCGI_END_REQUEST = 3, /* [out] */ FCGI_PARAMS = 4, /* [in] environment variables */ FCGI_STDIN = 5, /* [in] post data */ FCGI_STDOUT = 6, /* [out] response */ FCGI_STDERR = 7, /* [out] errors */ FCGI_DATA = 8, /* [in] filter data (not supported) */ FCGI_GET_VALUES = 9, /* [in] */ FCGI_GET_VALUES_RESULT = 10 /* [out] */ } fcgi_request_type; typedef enum _fcgi_protocol_status { FCGI_REQUEST_COMPLETE = 0, FCGI_CANT_MPX_CONN = 1, FCGI_OVERLOADED = 2, FCGI_UNKNOWN_ROLE = 3 } dcgi_protocol_status; /* FastCGI client API */ typedef void (*fcgi_apply_func)(char *var, unsigned int var_len, char *val, unsigned int val_len, void *arg); #define FCGI_HASH_TABLE_SIZE 128 #define FCGI_HASH_TABLE_MASK (FCGI_HASH_TABLE_SIZE - 1) #define FCGI_HASH_SEG_SIZE 4096 typedef struct _fcgi_request fcgi_request; int fcgi_init(void); void fcgi_shutdown(void); int fcgi_is_fastcgi(void); int fcgi_is_closed(fcgi_request *req); void fcgi_close(fcgi_request *req, int force, int destroy); int fcgi_in_shutdown(void); void fcgi_terminate(void); int fcgi_listen(const char *path, int backlog); fcgi_request* fcgi_init_request(int listen_socket, void(*on_accept)(), void(*on_read)(), void(*on_close)()); void fcgi_destroy_request(fcgi_request *req); void fcgi_set_allowed_clients(char *ip); int fcgi_accept_request(fcgi_request *req); int fcgi_finish_request(fcgi_request *req, int force_close); const char *fcgi_get_last_client_ip(); void fcgi_set_in_shutdown(int new_value); void fcgi_request_set_keep(fcgi_request *req, int new_value); #ifndef HAVE_ATTRIBUTE_WEAK typedef void (*fcgi_logger)(int type, const char *fmt, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); void fcgi_set_logger(fcgi_logger lg); #endif int fcgi_has_env(fcgi_request *req); char* fcgi_getenv(fcgi_request *req, const char* var, int var_len); char* fcgi_putenv(fcgi_request *req, char* var, int var_len, char* val); char* fcgi_quick_getenv(fcgi_request *req, const char* var, int var_len, unsigned int hash_value); char* fcgi_quick_putenv(fcgi_request *req, char* var, int var_len, unsigned int hash_value, char* val); void fcgi_loadenv(fcgi_request *req, fcgi_apply_func load_func, zval *array); int fcgi_read(fcgi_request *req, char *str, int len); int fcgi_write(fcgi_request *req, fcgi_request_type type, const char *str, int len); int fcgi_flush(fcgi_request *req, int end); int fcgi_end(fcgi_request *req); #ifdef PHP_WIN32 void fcgi_impersonate(void); #endif void fcgi_set_mgmt_var(const char * name, size_t name_len, const char * value, size_t value_len); void fcgi_free_mgmt_var_cb(zval *zv); /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!]'rrmain/php_streams.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Wez Furlong (wez@thebrainroom.com) | +----------------------------------------------------------------------+ */ #ifndef PHP_STREAMS_H #define PHP_STREAMS_H #ifdef HAVE_SYS_TIME_H #include #endif #include #include #include "zend.h" #include "zend_stream.h" BEGIN_EXTERN_C() PHPAPI int php_file_le_stream(void); PHPAPI int php_file_le_pstream(void); PHPAPI int php_file_le_stream_filter(void); END_EXTERN_C() /* {{{ Streams memory debugging stuff */ #if ZEND_DEBUG /* these have more of a dependency on the definitions of the zend macros than * I would prefer, but doing it this way saves loads of idefs :-/ */ # define STREAMS_D int __php_stream_call_depth ZEND_FILE_LINE_DC ZEND_FILE_LINE_ORIG_DC # define STREAMS_C 0 ZEND_FILE_LINE_CC ZEND_FILE_LINE_EMPTY_CC # define STREAMS_REL_C __php_stream_call_depth + 1 ZEND_FILE_LINE_CC, \ __php_stream_call_depth ? __zend_orig_filename : __zend_filename, \ __php_stream_call_depth ? __zend_orig_lineno : __zend_lineno # define STREAMS_DC , STREAMS_D # define STREAMS_CC , STREAMS_C # define STREAMS_REL_CC , STREAMS_REL_C #else # define STREAMS_D # define STREAMS_C # define STREAMS_REL_C # define STREAMS_DC # define STREAMS_CC # define STREAMS_REL_CC #endif /* these functions relay the file/line number information. They are depth aware, so they will pass * the ultimate ancestor, which is useful, because there can be several layers of calls */ #define php_stream_alloc_rel(ops, thisptr, persistent, mode) _php_stream_alloc((ops), (thisptr), (persistent), (mode) STREAMS_REL_CC) #define php_stream_copy_to_mem_rel(src, maxlen, persistent) _php_stream_copy_to_mem((src), (buf), (maxlen), (persistent) STREAMS_REL_CC) #define php_stream_fopen_rel(filename, mode, opened, options) _php_stream_fopen((filename), (mode), (opened), (options) STREAMS_REL_CC) #define php_stream_fopen_with_path_rel(filename, mode, path, opened, options) _php_stream_fopen_with_path((filename), (mode), (path), (opened), (options) STREAMS_REL_CC) #define php_stream_fopen_from_fd_rel(fd, mode, persistent_id) _php_stream_fopen_from_fd((fd), (mode), (persistent_id) STREAMS_REL_CC) #define php_stream_fopen_from_file_rel(file, mode) _php_stream_fopen_from_file((file), (mode) STREAMS_REL_CC) #define php_stream_fopen_from_pipe_rel(file, mode) _php_stream_fopen_from_pipe((file), (mode) STREAMS_REL_CC) #define php_stream_fopen_tmpfile_rel() _php_stream_fopen_tmpfile(0 STREAMS_REL_CC) #define php_stream_fopen_temporary_file_rel(dir, pfx, opened_path) _php_stream_fopen_temporary_file((dir), (pfx), (opened_path) STREAMS_REL_CC) #define php_stream_open_wrapper_rel(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_REL_CC) #define php_stream_open_wrapper_ex_rel(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_REL_CC) #define php_stream_make_seekable_rel(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_REL_CC) /* }}} */ /* The contents of the php_stream_ops and php_stream should only be accessed * using the functions/macros in this header. * If you need to get at something that doesn't have an API, * drop me a line and we can sort out a way to do * it properly. * * The only exceptions to this rule are that stream implementations can use * the php_stream->abstract pointer to hold their context, and streams * opened via stream_open_wrappers can use the zval ptr in * php_stream->wrapperdata to hold meta data for php scripts to * retrieve using file_get_wrapper_data(). */ typedef struct _php_stream php_stream; typedef struct _php_stream_wrapper php_stream_wrapper; typedef struct _php_stream_context php_stream_context; typedef struct _php_stream_filter php_stream_filter; #include "streams/php_stream_context.h" #include "streams/php_stream_filter_api.h" typedef struct _php_stream_statbuf { zend_stat_t sb; /* regular info */ /* extended info to go here some day: content-type etc. etc. */ } php_stream_statbuf; typedef struct _php_stream_dirent { char d_name[MAXPATHLEN]; } php_stream_dirent; /* operations on streams that are file-handles */ typedef struct _php_stream_ops { /* stdio like functions - these are mandatory! */ size_t (*write)(php_stream *stream, const char *buf, size_t count); size_t (*read)(php_stream *stream, char *buf, size_t count); int (*close)(php_stream *stream, int close_handle); int (*flush)(php_stream *stream); const char *label; /* label for this ops structure */ /* these are optional */ int (*seek)(php_stream *stream, zend_off_t offset, int whence, zend_off_t *newoffset); int (*cast)(php_stream *stream, int castas, void **ret); int (*stat)(php_stream *stream, php_stream_statbuf *ssb); int (*set_option)(php_stream *stream, int option, int value, void *ptrparam); } php_stream_ops; typedef struct _php_stream_wrapper_ops { /* open/create a wrapped stream */ php_stream *(*stream_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); /* close/destroy a wrapped stream */ int (*stream_closer)(php_stream_wrapper *wrapper, php_stream *stream); /* stat a wrapped stream */ int (*stream_stat)(php_stream_wrapper *wrapper, php_stream *stream, php_stream_statbuf *ssb); /* stat a URL */ int (*url_stat)(php_stream_wrapper *wrapper, const char *url, int flags, php_stream_statbuf *ssb, php_stream_context *context); /* open a "directory" stream */ php_stream *(*dir_opener)(php_stream_wrapper *wrapper, const char *filename, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); const char *label; /* delete a file */ int (*unlink)(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context); /* rename a file */ int (*rename)(php_stream_wrapper *wrapper, const char *url_from, const char *url_to, int options, php_stream_context *context); /* Create/Remove directory */ int (*stream_mkdir)(php_stream_wrapper *wrapper, const char *url, int mode, int options, php_stream_context *context); int (*stream_rmdir)(php_stream_wrapper *wrapper, const char *url, int options, php_stream_context *context); /* Metadata handling */ int (*stream_metadata)(php_stream_wrapper *wrapper, const char *url, int options, void *value, php_stream_context *context); } php_stream_wrapper_ops; struct _php_stream_wrapper { const php_stream_wrapper_ops *wops; /* operations the wrapper can perform */ void *abstract; /* context for the wrapper */ int is_url; /* so that PG(allow_url_fopen) can be respected */ }; #define PHP_STREAM_FLAG_NO_SEEK 0x1 #define PHP_STREAM_FLAG_NO_BUFFER 0x2 #define PHP_STREAM_FLAG_EOL_UNIX 0x0 /* also includes DOS */ #define PHP_STREAM_FLAG_DETECT_EOL 0x4 #define PHP_STREAM_FLAG_EOL_MAC 0x8 /* set this when the stream might represent "interactive" data. * When set, the read buffer will avoid certain operations that * might otherwise cause the read to block for much longer than * is strictly required. */ #define PHP_STREAM_FLAG_AVOID_BLOCKING 0x10 #define PHP_STREAM_FLAG_NO_CLOSE 0x20 #define PHP_STREAM_FLAG_IS_DIR 0x40 #define PHP_STREAM_FLAG_NO_FCLOSE 0x80 #define PHP_STREAM_FLAG_WAS_WRITTEN 0x80000000 struct _php_stream { const php_stream_ops *ops; void *abstract; /* convenience pointer for abstraction */ php_stream_filter_chain readfilters, writefilters; php_stream_wrapper *wrapper; /* which wrapper was used to open the stream */ void *wrapperthis; /* convenience pointer for a instance of a wrapper */ zval wrapperdata; /* fgetwrapperdata retrieves this */ uint8_t is_persistent:1; uint8_t in_free:2; /* to prevent recursion during free */ uint8_t eof:1; uint8_t __exposed:1; /* non-zero if exposed as a zval somewhere */ /* so we know how to clean it up correctly. This should be set to * PHP_STREAM_FCLOSE_XXX as appropriate */ uint8_t fclose_stdiocast:2; uint8_t fgetss_state; /* for fgetss to handle multiline tags */ char mode[16]; /* "rwb" etc. ala stdio */ uint32_t flags; /* PHP_STREAM_FLAG_XXX */ zend_resource *res; /* used for auto-cleanup */ FILE *stdiocast; /* cache this, otherwise we might leak! */ char *orig_path; zend_resource *ctx; /* buffer */ zend_off_t position; /* of underlying stream */ unsigned char *readbuf; size_t readbuflen; zend_off_t readpos; zend_off_t writepos; /* how much data to read when filling buffer */ size_t chunk_size; #if ZEND_DEBUG const char *open_filename; uint32_t open_lineno; #endif struct _php_stream *enclosing_stream; /* this is a private stream owned by enclosing_stream */ }; /* php_stream */ #define PHP_STREAM_CONTEXT(stream) \ ((php_stream_context*) ((stream)->ctx ? ((stream)->ctx->ptr) : NULL)) /* state definitions when closing down; these are private to streams.c */ #define PHP_STREAM_FCLOSE_NONE 0 #define PHP_STREAM_FCLOSE_FDOPEN 1 #define PHP_STREAM_FCLOSE_FOPENCOOKIE 2 /* allocate a new stream for a particular ops */ BEGIN_EXTERN_C() PHPAPI php_stream *_php_stream_alloc(const php_stream_ops *ops, void *abstract, const char *persistent_id, const char *mode STREAMS_DC); END_EXTERN_C() #define php_stream_alloc(ops, thisptr, persistent_id, mode) _php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC) #define php_stream_get_resource_id(stream) ((php_stream *)(stream))->res->handle /* use this to tell the stream that it is OK if we don't explicitly close it */ #define php_stream_auto_cleanup(stream) { (stream)->__exposed = 1; } /* use this to assign the stream to a zval and tell the stream that is * has been exported to the engine; it will expect to be closed automatically * when the resources are auto-destructed */ #define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); (stream)->__exposed = 1; } #define php_stream_from_zval(xstr, pzval) do { \ if (((xstr) = (php_stream*)zend_fetch_resource2_ex((pzval), \ "stream", php_file_le_stream(), php_file_le_pstream())) == NULL) { \ RETURN_FALSE; \ } \ } while (0) #define php_stream_from_res(xstr, res) do { \ if (((xstr) = (php_stream*)zend_fetch_resource2((res), \ "stream", php_file_le_stream(), php_file_le_pstream())) == NULL) { \ RETURN_FALSE; \ } \ } while (0) #define php_stream_from_res_no_verify(xstr, pzval) (xstr) = (php_stream*)zend_fetch_resource2((res), "stream", php_file_le_stream(), php_file_le_pstream()) #define php_stream_from_zval_no_verify(xstr, pzval) (xstr) = (php_stream*)zend_fetch_resource2_ex((pzval), "stream", php_file_le_stream(), php_file_le_pstream()) BEGIN_EXTERN_C() PHPAPI php_stream *php_stream_encloses(php_stream *enclosing, php_stream *enclosed); #define php_stream_free_enclosed(stream_enclosed, close_options) _php_stream_free_enclosed((stream_enclosed), (close_options)) PHPAPI int _php_stream_free_enclosed(php_stream *stream_enclosed, int close_options); PHPAPI int php_stream_from_persistent_id(const char *persistent_id, php_stream **stream); #define PHP_STREAM_PERSISTENT_SUCCESS 0 /* id exists */ #define PHP_STREAM_PERSISTENT_FAILURE 1 /* id exists but is not a stream! */ #define PHP_STREAM_PERSISTENT_NOT_EXIST 2 /* id does not exist */ #define PHP_STREAM_FREE_CALL_DTOR 1 /* call ops->close */ #define PHP_STREAM_FREE_RELEASE_STREAM 2 /* pefree(stream) */ #define PHP_STREAM_FREE_PRESERVE_HANDLE 4 /* tell ops->close to not close it's underlying handle */ #define PHP_STREAM_FREE_RSRC_DTOR 8 /* called from the resource list dtor */ #define PHP_STREAM_FREE_PERSISTENT 16 /* manually freeing a persistent connection */ #define PHP_STREAM_FREE_IGNORE_ENCLOSING 32 /* don't close the enclosing stream instead */ #define PHP_STREAM_FREE_KEEP_RSRC 64 /* keep associated zend_resource */ #define PHP_STREAM_FREE_CLOSE (PHP_STREAM_FREE_CALL_DTOR | PHP_STREAM_FREE_RELEASE_STREAM) #define PHP_STREAM_FREE_CLOSE_CASTED (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PRESERVE_HANDLE) #define PHP_STREAM_FREE_CLOSE_PERSISTENT (PHP_STREAM_FREE_CLOSE | PHP_STREAM_FREE_PERSISTENT) PHPAPI int _php_stream_free(php_stream *stream, int close_options); #define php_stream_free(stream, close_options) _php_stream_free((stream), (close_options)) #define php_stream_close(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE) #define php_stream_pclose(stream) _php_stream_free((stream), PHP_STREAM_FREE_CLOSE_PERSISTENT) PHPAPI int _php_stream_seek(php_stream *stream, zend_off_t offset, int whence); #define php_stream_rewind(stream) _php_stream_seek((stream), 0L, SEEK_SET) #define php_stream_seek(stream, offset, whence) _php_stream_seek((stream), (offset), (whence)) PHPAPI zend_off_t _php_stream_tell(php_stream *stream); #define php_stream_tell(stream) _php_stream_tell((stream)) PHPAPI size_t _php_stream_read(php_stream *stream, char *buf, size_t count); #define php_stream_read(stream, buf, count) _php_stream_read((stream), (buf), (count)) PHPAPI size_t _php_stream_write(php_stream *stream, const char *buf, size_t count); #define php_stream_write_string(stream, str) _php_stream_write(stream, str, strlen(str)) #define php_stream_write(stream, buf, count) _php_stream_write(stream, (buf), (count)) PHPAPI void _php_stream_fill_read_buffer(php_stream *stream, size_t size); #define php_stream_fill_read_buffer(stream, size) _php_stream_fill_read_buffer((stream), (size)) PHPAPI size_t _php_stream_printf(php_stream *stream, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3); /* php_stream_printf macro & function require */ #define php_stream_printf _php_stream_printf PHPAPI int _php_stream_eof(php_stream *stream); #define php_stream_eof(stream) _php_stream_eof((stream)) PHPAPI int _php_stream_getc(php_stream *stream); #define php_stream_getc(stream) _php_stream_getc((stream)) PHPAPI int _php_stream_putc(php_stream *stream, int c); #define php_stream_putc(stream, c) _php_stream_putc((stream), (c)) PHPAPI int _php_stream_flush(php_stream *stream, int closing); #define php_stream_flush(stream) _php_stream_flush((stream), 0) PHPAPI char *_php_stream_get_line(php_stream *stream, char *buf, size_t maxlen, size_t *returned_len); #define php_stream_gets(stream, buf, maxlen) _php_stream_get_line((stream), (buf), (maxlen), NULL) #define php_stream_get_line(stream, buf, maxlen, retlen) _php_stream_get_line((stream), (buf), (maxlen), (retlen)) PHPAPI zend_string *php_stream_get_record(php_stream *stream, size_t maxlen, const char *delim, size_t delim_len); /* CAREFUL! this is equivalent to puts NOT fputs! */ PHPAPI int _php_stream_puts(php_stream *stream, const char *buf); #define php_stream_puts(stream, buf) _php_stream_puts((stream), (buf)) PHPAPI int _php_stream_stat(php_stream *stream, php_stream_statbuf *ssb); #define php_stream_stat(stream, ssb) _php_stream_stat((stream), (ssb)) PHPAPI int _php_stream_stat_path(const char *path, int flags, php_stream_statbuf *ssb, php_stream_context *context); #define php_stream_stat_path(path, ssb) _php_stream_stat_path((path), 0, (ssb), NULL) #define php_stream_stat_path_ex(path, flags, ssb, context) _php_stream_stat_path((path), (flags), (ssb), (context)) PHPAPI int _php_stream_mkdir(const char *path, int mode, int options, php_stream_context *context); #define php_stream_mkdir(path, mode, options, context) _php_stream_mkdir(path, mode, options, context) PHPAPI int _php_stream_rmdir(const char *path, int options, php_stream_context *context); #define php_stream_rmdir(path, options, context) _php_stream_rmdir(path, options, context) PHPAPI php_stream *_php_stream_opendir(const char *path, int options, php_stream_context *context STREAMS_DC); #define php_stream_opendir(path, options, context) _php_stream_opendir((path), (options), (context) STREAMS_CC) PHPAPI php_stream_dirent *_php_stream_readdir(php_stream *dirstream, php_stream_dirent *ent); #define php_stream_readdir(dirstream, dirent) _php_stream_readdir((dirstream), (dirent)) #define php_stream_closedir(dirstream) php_stream_close((dirstream)) #define php_stream_rewinddir(dirstream) php_stream_rewind((dirstream)) PHPAPI int php_stream_dirent_alphasort(const zend_string **a, const zend_string **b); PHPAPI int php_stream_dirent_alphasortr(const zend_string **a, const zend_string **b); PHPAPI int _php_stream_scandir(const char *dirname, zend_string **namelist[], int flags, php_stream_context *context, int (*compare) (const zend_string **a, const zend_string **b)); #define php_stream_scandir(dirname, namelist, context, compare) _php_stream_scandir((dirname), (namelist), 0, (context), (compare)) PHPAPI int _php_stream_set_option(php_stream *stream, int option, int value, void *ptrparam); #define php_stream_set_option(stream, option, value, ptrvalue) _php_stream_set_option((stream), (option), (value), (ptrvalue)) #define php_stream_set_chunk_size(stream, size) _php_stream_set_option((stream), PHP_STREAM_OPTION_SET_CHUNK_SIZE, (size), NULL) END_EXTERN_C() /* Flags for mkdir method in wrapper ops */ #define PHP_STREAM_MKDIR_RECURSIVE 1 /* define REPORT ERRORS 8 (below) */ /* Flags for rmdir method in wrapper ops */ /* define REPORT_ERRORS 8 (below) */ /* Flags for url_stat method in wrapper ops */ #define PHP_STREAM_URL_STAT_LINK 1 #define PHP_STREAM_URL_STAT_QUIET 2 #define PHP_STREAM_URL_STAT_NOCACHE 4 /* change the blocking mode of stream: value == 1 => blocking, value == 0 => non-blocking. */ #define PHP_STREAM_OPTION_BLOCKING 1 /* change the buffering mode of stream. value is a PHP_STREAM_BUFFER_XXXX value, ptrparam is a ptr to a size_t holding * the required buffer size */ #define PHP_STREAM_OPTION_READ_BUFFER 2 #define PHP_STREAM_OPTION_WRITE_BUFFER 3 #define PHP_STREAM_BUFFER_NONE 0 /* unbuffered */ #define PHP_STREAM_BUFFER_LINE 1 /* line buffered */ #define PHP_STREAM_BUFFER_FULL 2 /* fully buffered */ /* set the timeout duration for reads on the stream. ptrparam is a pointer to a struct timeval * */ #define PHP_STREAM_OPTION_READ_TIMEOUT 4 #define PHP_STREAM_OPTION_SET_CHUNK_SIZE 5 /* set or release lock on a stream */ #define PHP_STREAM_OPTION_LOCKING 6 /* whether or not locking is supported */ #define PHP_STREAM_LOCK_SUPPORTED 1 #define php_stream_supports_lock(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, 0, (void *) PHP_STREAM_LOCK_SUPPORTED) == 0 ? 1 : 0) #define php_stream_lock(stream, mode) _php_stream_set_option((stream), PHP_STREAM_OPTION_LOCKING, (mode), (void *) NULL) /* option code used by the php_stream_xport_XXX api */ #define PHP_STREAM_OPTION_XPORT_API 7 /* see php_stream_transport.h */ #define PHP_STREAM_OPTION_CRYPTO_API 8 /* see php_stream_transport.h */ #define PHP_STREAM_OPTION_MMAP_API 9 /* see php_stream_mmap.h */ #define PHP_STREAM_OPTION_TRUNCATE_API 10 #define PHP_STREAM_TRUNCATE_SUPPORTED 0 #define PHP_STREAM_TRUNCATE_SET_SIZE 1 /* ptrparam is a pointer to a size_t */ #define php_stream_truncate_supported(stream) (_php_stream_set_option((stream), PHP_STREAM_OPTION_TRUNCATE_API, PHP_STREAM_TRUNCATE_SUPPORTED, NULL) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0) BEGIN_EXTERN_C() PHPAPI int _php_stream_truncate_set_size(php_stream *stream, size_t newsize); #define php_stream_truncate_set_size(stream, size) _php_stream_truncate_set_size((stream), (size)) END_EXTERN_C() #define PHP_STREAM_OPTION_META_DATA_API 11 /* ptrparam is a zval* to which to add meta data information */ #define php_stream_populate_meta_data(stream, zv) (_php_stream_set_option((stream), PHP_STREAM_OPTION_META_DATA_API, 0, zv) == PHP_STREAM_OPTION_RETURN_OK ? 1 : 0) /* Check if the stream is still "live"; for sockets/pipes this means the socket * is still connected; for files, this does not really have meaning */ #define PHP_STREAM_OPTION_CHECK_LIVENESS 12 /* no parameters */ /* Enable/disable blocking reads on anonymous pipes on Windows. */ #define PHP_STREAM_OPTION_PIPE_BLOCKING 13 #define PHP_STREAM_OPTION_RETURN_OK 0 /* option set OK */ #define PHP_STREAM_OPTION_RETURN_ERR -1 /* problem setting option */ #define PHP_STREAM_OPTION_RETURN_NOTIMPL -2 /* underlying stream does not implement; streams can handle it instead */ /* copy up to maxlen bytes from src to dest. If maxlen is PHP_STREAM_COPY_ALL, * copy until eof(src). */ #define PHP_STREAM_COPY_ALL ((size_t)-1) BEGIN_EXTERN_C() ZEND_ATTRIBUTE_DEPRECATED PHPAPI size_t _php_stream_copy_to_stream(php_stream *src, php_stream *dest, size_t maxlen STREAMS_DC); #define php_stream_copy_to_stream(src, dest, maxlen) _php_stream_copy_to_stream((src), (dest), (maxlen) STREAMS_CC) PHPAPI int _php_stream_copy_to_stream_ex(php_stream *src, php_stream *dest, size_t maxlen, size_t *len STREAMS_DC); #define php_stream_copy_to_stream_ex(src, dest, maxlen, len) _php_stream_copy_to_stream_ex((src), (dest), (maxlen), (len) STREAMS_CC) /* read all data from stream and put into a buffer. Caller must free buffer * when done. */ PHPAPI zend_string *_php_stream_copy_to_mem(php_stream *src, size_t maxlen, int persistent STREAMS_DC); #define php_stream_copy_to_mem(src, maxlen, persistent) _php_stream_copy_to_mem((src), (maxlen), (persistent) STREAMS_CC) /* output all data from a stream */ PHPAPI size_t _php_stream_passthru(php_stream * src STREAMS_DC); #define php_stream_passthru(stream) _php_stream_passthru((stream) STREAMS_CC) END_EXTERN_C() #include "streams/php_stream_transport.h" #include "streams/php_stream_plain_wrapper.h" #include "streams/php_stream_glob_wrapper.h" #include "streams/php_stream_userspace.h" #include "streams/php_stream_mmap.h" /* coerce the stream into some other form */ /* cast as a stdio FILE * */ #define PHP_STREAM_AS_STDIO 0 /* cast as a POSIX fd or socketd */ #define PHP_STREAM_AS_FD 1 /* cast as a socketd */ #define PHP_STREAM_AS_SOCKETD 2 /* cast as fd/socket for select purposes */ #define PHP_STREAM_AS_FD_FOR_SELECT 3 /* try really, really hard to make sure the cast happens (avoid using this flag if possible) */ #define PHP_STREAM_CAST_TRY_HARD 0x80000000 #define PHP_STREAM_CAST_RELEASE 0x40000000 /* stream becomes invalid on success */ #define PHP_STREAM_CAST_INTERNAL 0x20000000 /* stream cast for internal use */ #define PHP_STREAM_CAST_MASK (PHP_STREAM_CAST_TRY_HARD | PHP_STREAM_CAST_RELEASE | PHP_STREAM_CAST_INTERNAL) BEGIN_EXTERN_C() PHPAPI int _php_stream_cast(php_stream *stream, int castas, void **ret, int show_err); END_EXTERN_C() /* use this to check if a stream can be cast into another form */ #define php_stream_can_cast(stream, as) _php_stream_cast((stream), (as), NULL, 0) #define php_stream_cast(stream, as, ret, show_err) _php_stream_cast((stream), (as), (ret), (show_err)) /* use this to check if a stream is of a particular type: * PHPAPI int php_stream_is(php_stream *stream, php_stream_ops *ops); */ #define php_stream_is(stream, anops) ((stream)->ops == anops) #define PHP_STREAM_IS_STDIO &php_stream_stdio_ops #define php_stream_is_persistent(stream) (stream)->is_persistent /* Wrappers support */ #define IGNORE_PATH 0x00000000 #define USE_PATH 0x00000001 #define IGNORE_URL 0x00000002 #define REPORT_ERRORS 0x00000008 /* If you don't need to write to the stream, but really need to * be able to seek, use this flag in your options. */ #define STREAM_MUST_SEEK 0x00000010 /* If you are going to end up casting the stream into a FILE* or * a socket, pass this flag and the streams/wrappers will not use * buffering mechanisms while reading the headers, so that HTTP * wrapped streams will work consistently. * If you omit this flag, streams will use buffering and should end * up working more optimally. * */ #define STREAM_WILL_CAST 0x00000020 /* this flag applies to php_stream_locate_url_wrapper */ #define STREAM_LOCATE_WRAPPERS_ONLY 0x00000040 /* this flag is only used by include/require functions */ #define STREAM_OPEN_FOR_INCLUDE 0x00000080 /* this flag tells streams to ONLY open urls */ #define STREAM_USE_URL 0x00000100 /* this flag is used when only the headers from HTTP request are to be fetched */ #define STREAM_ONLY_GET_HEADERS 0x00000200 /* don't apply open_basedir checks */ #define STREAM_DISABLE_OPEN_BASEDIR 0x00000400 /* get (or create) a persistent version of the stream */ #define STREAM_OPEN_PERSISTENT 0x00000800 /* use glob stream for directory open in plain files stream */ #define STREAM_USE_GLOB_DIR_OPEN 0x00001000 /* don't check allow_url_fopen and allow_url_include */ #define STREAM_DISABLE_URL_PROTECTION 0x00002000 /* assume the path passed in exists and is fully expanded, avoiding syscalls */ #define STREAM_ASSUME_REALPATH 0x00004000 /* Allow blocking reads on anonymous pipes on Windows. */ #define STREAM_USE_BLOCKING_PIPE 0x00008000 /* Antique - no longer has meaning */ #define IGNORE_URL_WIN 0 int php_init_stream_wrappers(int module_number); int php_shutdown_stream_wrappers(int module_number); void php_shutdown_stream_hashes(void); PHP_RSHUTDOWN_FUNCTION(streams); BEGIN_EXTERN_C() PHPAPI int php_register_url_stream_wrapper(const char *protocol, const php_stream_wrapper *wrapper); PHPAPI int php_unregister_url_stream_wrapper(const char *protocol); PHPAPI int php_register_url_stream_wrapper_volatile(zend_string *protocol, php_stream_wrapper *wrapper); PHPAPI int php_unregister_url_stream_wrapper_volatile(zend_string *protocol); PHPAPI php_stream *_php_stream_open_wrapper_ex(const char *path, const char *mode, int options, zend_string **opened_path, php_stream_context *context STREAMS_DC); PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, const char **path_for_open, int options); PHPAPI const char *php_stream_locate_eol(php_stream *stream, zend_string *buf); #define php_stream_open_wrapper(path, mode, options, opened) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), NULL STREAMS_CC) #define php_stream_open_wrapper_ex(path, mode, options, opened, context) _php_stream_open_wrapper_ex((path), (mode), (options), (opened), (context) STREAMS_CC) /* pushes an error message onto the stack for a wrapper instance */ PHPAPI void php_stream_wrapper_log_error(const php_stream_wrapper *wrapper, int options, const char *fmt, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4); #define PHP_STREAM_UNCHANGED 0 /* orig stream was seekable anyway */ #define PHP_STREAM_RELEASED 1 /* newstream should be used; origstream is no longer valid */ #define PHP_STREAM_FAILED 2 /* an error occurred while attempting conversion */ #define PHP_STREAM_CRITICAL 3 /* an error occurred; origstream is in an unknown state; you should close origstream */ #define PHP_STREAM_NO_PREFERENCE 0 #define PHP_STREAM_PREFER_STDIO 1 #define PHP_STREAM_FORCE_CONVERSION 2 /* DO NOT call this on streams that are referenced by resources! */ PHPAPI int _php_stream_make_seekable(php_stream *origstream, php_stream **newstream, int flags STREAMS_DC); #define php_stream_make_seekable(origstream, newstream, flags) _php_stream_make_seekable((origstream), (newstream), (flags) STREAMS_CC) /* Give other modules access to the url_stream_wrappers_hash and stream_filters_hash */ PHPAPI HashTable *_php_stream_get_url_stream_wrappers_hash(void); #define php_stream_get_url_stream_wrappers_hash() _php_stream_get_url_stream_wrappers_hash() PHPAPI HashTable *php_stream_get_url_stream_wrappers_hash_global(void); PHPAPI HashTable *_php_get_stream_filters_hash(void); #define php_get_stream_filters_hash() _php_get_stream_filters_hash() PHPAPI HashTable *php_get_stream_filters_hash_global(void); extern const php_stream_wrapper_ops *php_stream_user_wrapper_ops; END_EXTERN_C() #endif /* Definitions for user streams */ #define PHP_STREAM_IS_URL 1 /* Stream metadata definitions */ /* Create if referred resource does not exist */ #define PHP_STREAM_META_TOUCH 1 #define PHP_STREAM_META_OWNER_NAME 2 #define PHP_STREAM_META_OWNER 3 #define PHP_STREAM_META_GROUP_NAME 4 #define PHP_STREAM_META_GROUP 5 #define PHP_STREAM_META_ACCESS 6 /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!?main/php_syslog.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ */ #ifndef PHP_SYSLOG_H #define PHP_SYSLOG_H #include "php.h" #ifdef PHP_WIN32 #include "win32/syslog.h" #else #include #ifdef HAVE_SYSLOG_H #include #endif #endif /* Syslog filters */ #define PHP_SYSLOG_FILTER_ALL 0 #define PHP_SYSLOG_FILTER_NO_CTRL 1 #define PHP_SYSLOG_FILTER_ASCII 2 #define PHP_SYSLOG_FILTER_RAW 3 BEGIN_EXTERN_C() PHPAPI void php_syslog(int, const char *format, ...); PHPAPI void php_openlog(const char *, int, int); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK! lmain/php_variables.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Rasmus Lerdorf | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_VARIABLES_H #define PHP_VARIABLES_H #include "php.h" #include "SAPI.h" #define PARSE_POST 0 #define PARSE_GET 1 #define PARSE_COOKIE 2 #define PARSE_STRING 3 #define PARSE_ENV 4 #define PARSE_SERVER 5 #define PARSE_SESSION 6 BEGIN_EXTERN_C() void php_startup_auto_globals(void); extern PHPAPI void (*php_import_environment_variables)(zval *array_ptr); PHPAPI void php_register_variable(char *var, char *val, zval *track_vars_array); /* binary-safe version */ PHPAPI void php_register_variable_safe(char *var, char *val, size_t val_len, zval *track_vars_array); PHPAPI void php_register_variable_ex(char *var, zval *val, zval *track_vars_array); PHPAPI void php_build_argv(char *s, zval *track_vars_array); PHPAPI int php_hash_environment(void); END_EXTERN_C() #define NUM_TRACK_VARS 6 #endif /* PHP_VARIABLES_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!c}44 main/php.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_H #define PHP_H #ifdef HAVE_DMALLOC #include #endif #define PHP_API_VERSION 20180731 #define PHP_HAVE_STREAMS #define YYDEBUG 0 #define PHP_DEFAULT_CHARSET "UTF-8" #include "php_version.h" #include "zend.h" #include "zend_sort.h" #include "php_compat.h" #include "zend_API.h" #undef sprintf #define sprintf php_sprintf /* Operating system family definition */ #ifdef PHP_WIN32 # define PHP_OS_FAMILY "Windows" #elif defined(BSD) || defined(__DragonFly__) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) # define PHP_OS_FAMILY "BSD" #elif defined(__APPLE__) || defined(__MACH__) # define PHP_OS_FAMILY "Darwin" #elif defined(__sun__) # define PHP_OS_FAMILY "Solaris" #elif defined(__linux__) # define PHP_OS_FAMILY "Linux" #else # define PHP_OS_FAMILY "Unknown" #endif /* PHP's DEBUG value must match Zend's ZEND_DEBUG value */ #undef PHP_DEBUG #define PHP_DEBUG ZEND_DEBUG #ifdef PHP_WIN32 # include "tsrm_win32.h" # ifdef PHP_EXPORTS # define PHPAPI __declspec(dllexport) # else # define PHPAPI __declspec(dllimport) # endif # define PHP_DIR_SEPARATOR '\\' # define PHP_EOL "\r\n" #else # if defined(__GNUC__) && __GNUC__ >= 4 # define PHPAPI __attribute__ ((visibility("default"))) # else # define PHPAPI # endif # define THREAD_LS # define PHP_DIR_SEPARATOR '/' # define PHP_EOL "\n" #endif /* Windows specific defines */ #ifdef PHP_WIN32 # define PHP_PROG_SENDMAIL "Built in mailer" # define HAVE_DECLARED_TIMEZONE # define WIN32_LEAN_AND_MEAN # define NOOPENFILE # include # include # include # include # include # include # include # include typedef int uid_t; typedef int gid_t; typedef char * caddr_t; typedef unsigned int uint; typedef unsigned long ulong; typedef int pid_t; # ifndef PHP_DEBUG # ifdef inline # undef inline # endif # define inline __inline # endif # define M_TWOPI (M_PI * 2.0) # define off_t _off_t # define lstat(x, y) php_sys_lstat(x, y) # define chdir(path) _chdir(path) # define mkdir(a, b) _mkdir(a) # define rmdir(a) _rmdir(a) # define getpid _getpid # define php_sleep(t) SleepEx(t*1000, TRUE) # ifndef getcwd # define getcwd(a, b) _getcwd(a, b) # endif #endif #if HAVE_ASSERT_H #if PHP_DEBUG #undef NDEBUG #else #ifndef NDEBUG #define NDEBUG #endif #endif #include #else /* HAVE_ASSERT_H */ #define assert(expr) ((void) (0)) #endif /* HAVE_ASSERT_H */ #define APACHE 0 #if HAVE_UNIX_H #include #endif #if HAVE_ALLOCA_H #include #endif #if HAVE_BUILD_DEFS_H #include #endif /* * This is a fast version of strlcpy which should be used, if you * know the size of the destination buffer and if you know * the length of the source string. * * size is the allocated number of bytes of dst * src_size is the number of bytes excluding the NUL of src */ #define PHP_STRLCPY(dst, src, size, src_size) \ { \ size_t php_str_len; \ \ if (src_size >= size) \ php_str_len = size - 1; \ else \ php_str_len = src_size; \ memcpy(dst, src, php_str_len); \ dst[php_str_len] = '\0'; \ } #ifndef HAVE_STRLCPY BEGIN_EXTERN_C() PHPAPI size_t php_strlcpy(char *dst, const char *src, size_t siz); END_EXTERN_C() #undef strlcpy #define strlcpy php_strlcpy #define HAVE_STRLCPY 1 #define USE_STRLCPY_PHP_IMPL 1 #endif #ifndef HAVE_STRLCAT BEGIN_EXTERN_C() PHPAPI size_t php_strlcat(char *dst, const char *src, size_t siz); END_EXTERN_C() #undef strlcat #define strlcat php_strlcat #define HAVE_STRLCAT 1 #define USE_STRLCAT_PHP_IMPL 1 #endif #ifndef HAVE_EXPLICIT_BZERO BEGIN_EXTERN_C() PHPAPI void php_explicit_bzero(void *dst, size_t siz); END_EXTERN_C() #undef explicit_bzero #define explicit_bzero php_explicit_bzero #endif #ifndef HAVE_STRTOK_R BEGIN_EXTERN_C() char *strtok_r(char *s, const char *delim, char **last); END_EXTERN_C() #endif #ifndef HAVE_SOCKLEN_T # ifdef PHP_WIN32 typedef int socklen_t; # else typedef unsigned int socklen_t; # endif #endif #define CREATE_MUTEX(a, b) #define SET_MUTEX(a) #define FREE_MUTEX(a) /* * Then the ODBC support can use both iodbc and Solid, * uncomment this. * #define HAVE_ODBC (HAVE_IODBC|HAVE_SOLID) */ #include #include #if HAVE_UNISTD_H #include #endif #if HAVE_STDARG_H #include #else # if HAVE_SYS_VARARGS_H # include # endif #endif #include "php_stdint.h" #include "zend_hash.h" #include "zend_alloc.h" #include "zend_stack.h" #if STDC_HEADERS # include #else # ifndef HAVE_MEMCPY # define memcpy(d, s, n) bcopy((s), (d), (n)) # endif # ifndef HAVE_MEMMOVE # define memmove(d, s, n) bcopy ((s), (d), (n)) # endif #endif #ifndef HAVE_STRERROR char *strerror(int); #endif #if HAVE_PWD_H # ifdef PHP_WIN32 #include "win32/param.h" # else #include #include # endif #endif #if HAVE_LIMITS_H #include #endif #ifndef LONG_MAX #define LONG_MAX 2147483647L #endif #ifndef LONG_MIN #define LONG_MIN (- LONG_MAX - 1) #endif #ifndef INT_MAX #define INT_MAX 2147483647 #endif #ifndef INT_MIN #define INT_MIN (- INT_MAX - 1) #endif /* double limits */ #include #if defined(DBL_MANT_DIG) && defined(DBL_MIN_EXP) #define PHP_DOUBLE_MAX_LENGTH (3 + DBL_MANT_DIG - DBL_MIN_EXP) #else #define PHP_DOUBLE_MAX_LENGTH 1080 #endif #define PHP_GCC_VERSION ZEND_GCC_VERSION #define PHP_ATTRIBUTE_MALLOC ZEND_ATTRIBUTE_MALLOC #define PHP_ATTRIBUTE_FORMAT ZEND_ATTRIBUTE_FORMAT BEGIN_EXTERN_C() #include "snprintf.h" END_EXTERN_C() #include "spprintf.h" #define EXEC_INPUT_BUF 4096 #define PHP_MIME_TYPE "application/x-httpd-php" /* macros */ #define STR_PRINT(str) ((str)?(str):"") #ifndef MAXPATHLEN # ifdef PHP_WIN32 # include "win32/ioutil.h" # define MAXPATHLEN PHP_WIN32_IOUTIL_MAXPATHLEN # elif PATH_MAX # define MAXPATHLEN PATH_MAX # elif defined(MAX_PATH) # define MAXPATHLEN MAX_PATH # else # define MAXPATHLEN 256 /* Should be safe for any weird systems that do not define it */ # endif #endif #define php_ignore_value(x) ZEND_IGNORE_VALUE(x) /* global variables */ #if !defined(PHP_WIN32) #define PHP_SLEEP_NON_VOID #define php_sleep sleep extern char **environ; #endif /* !defined(PHP_WIN32) */ #ifdef PHP_PWRITE_64 ssize_t pwrite(int, void *, size_t, off64_t); #endif #ifdef PHP_PREAD_64 ssize_t pread(int, void *, size_t, off64_t); #endif BEGIN_EXTERN_C() void phperror(char *error); PHPAPI size_t php_write(void *buf, size_t size); PHPAPI size_t php_printf(const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2); PHPAPI int php_get_module_initialized(void); #ifdef HAVE_SYSLOG_H #include "php_syslog.h" #define php_log_err(msg) php_log_err_with_severity(msg, LOG_NOTICE) #else #define php_log_err(msg) php_log_err_with_severity(msg, 5) #endif PHPAPI ZEND_COLD void php_log_err_with_severity(char *log_message, int syslog_type_int); int Debug(char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 1, 2); int cfgparse(void); END_EXTERN_C() #define php_error zend_error #define error_handling_t zend_error_handling_t BEGIN_EXTERN_C() static inline ZEND_ATTRIBUTE_DEPRECATED void php_set_error_handling(error_handling_t error_handling, zend_class_entry *exception_class) { zend_replace_error_handling(error_handling, exception_class, NULL); } static inline ZEND_ATTRIBUTE_DEPRECATED void php_std_error_handling() {} PHPAPI ZEND_COLD void php_verror(const char *docref, const char *params, int type, const char *format, va_list args) PHP_ATTRIBUTE_FORMAT(printf, 4, 0); /* PHPAPI void php_error(int type, const char *format, ...); */ PHPAPI ZEND_COLD void php_error_docref0(const char *docref, int type, const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 3, 4); PHPAPI ZEND_COLD void php_error_docref1(const char *docref, const char *param1, int type, const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 4, 5); PHPAPI ZEND_COLD void php_error_docref2(const char *docref, const char *param1, const char *param2, int type, const char *format, ...) PHP_ATTRIBUTE_FORMAT(printf, 5, 6); #ifdef PHP_WIN32 PHPAPI ZEND_COLD void php_win32_docref2_from_error(DWORD error, const char *param1, const char *param2); #endif END_EXTERN_C() #define php_error_docref php_error_docref0 #define zenderror phperror #define zendlex phplex #define phpparse zendparse #define phprestart zendrestart #define phpin zendin #define php_memnstr zend_memnstr /* functions */ BEGIN_EXTERN_C() PHPAPI extern int (*php_register_internal_extensions_func)(void); PHPAPI int php_register_internal_extensions(void); PHPAPI int php_mergesort(void *base, size_t nmemb, size_t size, int (*cmp)(const void *, const void *)); PHPAPI void php_register_pre_request_shutdown(void (*func)(void *), void *userdata); PHPAPI void php_com_initialize(void); PHPAPI char *php_get_current_user(void); END_EXTERN_C() /* PHP-named Zend macro wrappers */ #define PHP_FN ZEND_FN #define PHP_MN ZEND_MN #define PHP_NAMED_FUNCTION ZEND_NAMED_FUNCTION #define PHP_FUNCTION ZEND_FUNCTION #define PHP_METHOD ZEND_METHOD #define PHP_RAW_NAMED_FE ZEND_RAW_NAMED_FE #define PHP_NAMED_FE ZEND_NAMED_FE #define PHP_FE ZEND_FE #define PHP_DEP_FE ZEND_DEP_FE #define PHP_FALIAS ZEND_FALIAS #define PHP_DEP_FALIAS ZEND_DEP_FALIAS #define PHP_ME ZEND_ME #define PHP_MALIAS ZEND_MALIAS #define PHP_ABSTRACT_ME ZEND_ABSTRACT_ME #define PHP_ME_MAPPING ZEND_ME_MAPPING #define PHP_FE_END ZEND_FE_END #define PHP_MODULE_STARTUP_N ZEND_MODULE_STARTUP_N #define PHP_MODULE_SHUTDOWN_N ZEND_MODULE_SHUTDOWN_N #define PHP_MODULE_ACTIVATE_N ZEND_MODULE_ACTIVATE_N #define PHP_MODULE_DEACTIVATE_N ZEND_MODULE_DEACTIVATE_N #define PHP_MODULE_INFO_N ZEND_MODULE_INFO_N #define PHP_MODULE_STARTUP_D ZEND_MODULE_STARTUP_D #define PHP_MODULE_SHUTDOWN_D ZEND_MODULE_SHUTDOWN_D #define PHP_MODULE_ACTIVATE_D ZEND_MODULE_ACTIVATE_D #define PHP_MODULE_DEACTIVATE_D ZEND_MODULE_DEACTIVATE_D #define PHP_MODULE_INFO_D ZEND_MODULE_INFO_D /* Compatibility macros */ #define PHP_MINIT ZEND_MODULE_STARTUP_N #define PHP_MSHUTDOWN ZEND_MODULE_SHUTDOWN_N #define PHP_RINIT ZEND_MODULE_ACTIVATE_N #define PHP_RSHUTDOWN ZEND_MODULE_DEACTIVATE_N #define PHP_MINFO ZEND_MODULE_INFO_N #define PHP_GINIT ZEND_GINIT #define PHP_GSHUTDOWN ZEND_GSHUTDOWN #define PHP_MINIT_FUNCTION ZEND_MODULE_STARTUP_D #define PHP_MSHUTDOWN_FUNCTION ZEND_MODULE_SHUTDOWN_D #define PHP_RINIT_FUNCTION ZEND_MODULE_ACTIVATE_D #define PHP_RSHUTDOWN_FUNCTION ZEND_MODULE_DEACTIVATE_D #define PHP_MINFO_FUNCTION ZEND_MODULE_INFO_D #define PHP_GINIT_FUNCTION ZEND_GINIT_FUNCTION #define PHP_GSHUTDOWN_FUNCTION ZEND_GSHUTDOWN_FUNCTION #define PHP_MODULE_GLOBALS ZEND_MODULE_GLOBALS /* Output support */ #include "main/php_output.h" #include "php_streams.h" #include "php_memory_streams.h" #include "fopen_wrappers.h" /* Virtual current working directory support */ #include "zend_virtual_cwd.h" #include "zend_constants.h" /* connection status states */ #define PHP_CONNECTION_NORMAL 0 #define PHP_CONNECTION_ABORTED 1 #define PHP_CONNECTION_TIMEOUT 2 #include "php_reentrancy.h" /* Finding offsets of elements within structures. * Taken from the Apache code, which in turn, was taken from X code... */ #ifndef XtOffset #if defined(CRAY) || (defined(__arm) && !(defined(LINUX) || defined(__riscos__))) #ifdef __STDC__ #define XtOffset(p_type, field) _Offsetof(p_type, field) #else #ifdef CRAY2 #define XtOffset(p_type, field) \ (sizeof(int)*((unsigned int)&(((p_type)NULL)->field))) #else /* !CRAY2 */ #define XtOffset(p_type, field) ((unsigned int)&(((p_type)NULL)->field)) #endif /* !CRAY2 */ #endif /* __STDC__ */ #else /* ! (CRAY || __arm) */ #define XtOffset(p_type, field) \ ((zend_long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL))) #endif /* !CRAY */ #endif /* ! XtOffset */ #ifndef XtOffsetOf #ifdef offsetof #define XtOffsetOf(s_type, field) offsetof(s_type, field) #else #define XtOffsetOf(s_type, field) XtOffset(s_type*, field) #endif #endif /* !XtOffsetOf */ #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!lɟ[/ / main/php_main.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Andi Gutmans | | Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef PHP_MAIN_H #define PHP_MAIN_H #include "zend_globals.h" #include "php_globals.h" #include "SAPI.h" BEGIN_EXTERN_C() PHPAPI int php_request_startup(void); PHPAPI void php_request_shutdown(void *dummy); PHPAPI void php_request_shutdown_for_exec(void *dummy); PHPAPI int php_module_startup(sapi_module_struct *sf, zend_module_entry *additional_modules, uint32_t num_additional_modules); PHPAPI void php_module_shutdown(void); PHPAPI void php_module_shutdown_for_exec(void); PHPAPI int php_module_shutdown_wrapper(sapi_module_struct *sapi_globals); PHPAPI int php_register_extensions(zend_module_entry * const * ptr, int count); PHPAPI int php_execute_script(zend_file_handle *primary_file); PHPAPI int php_execute_simple_script(zend_file_handle *primary_file, zval *ret); PHPAPI int php_handle_special_queries(void); PHPAPI int php_lint_script(zend_file_handle *file); PHPAPI void php_handle_aborted_connection(void); PHPAPI int php_handle_auth_data(const char *auth); PHPAPI void php_html_puts(const char *str, size_t siz); PHPAPI int php_stream_open_for_zend_ex(const char *filename, zend_file_handle *handle, int mode); /* environment module */ extern int php_init_environ(void); extern int php_shutdown_environ(void); END_EXTERN_C() #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK! R11main/php_config.hnu[/* main/php_config.h. Generated from php_config.h.in by configure. */ /* main/php_config.h.in. Generated from configure.ac by autoheader. */ #ifndef PHP_CONFIG_H #define PHP_CONFIG_H #if defined(__GNUC__) && __GNUC__ >= 4 # define ZEND_API __attribute__ ((visibility("default"))) # define ZEND_DLEXPORT __attribute__ ((visibility("default"))) #else # define ZEND_API # define ZEND_DLEXPORT #endif #define ZEND_DLIMPORT /* #undef uint */ /* #undef ulong */ /* */ /* #undef CDB_INCLUDE_FILE */ /* Define if system uses EBCDIC */ /* #undef CHARSET_EBCDIC */ /* Whether to build bcmath as dynamic module */ #define COMPILE_DL_BCMATH 1 /* Whether to build bz2 as dynamic module */ #define COMPILE_DL_BZ2 1 /* Whether to build calendar as dynamic module */ #define COMPILE_DL_CALENDAR 1 /* Whether to build ctype as dynamic module */ #define COMPILE_DL_CTYPE 1 /* Whether to build curl as dynamic module */ #define COMPILE_DL_CURL 1 /* Whether to build date as dynamic module */ /* #undef COMPILE_DL_DATE */ /* Whether to build dba as dynamic module */ #define COMPILE_DL_DBA 1 /* Whether to build dom as dynamic module */ #define COMPILE_DL_DOM 1 /* Whether to build enchant as dynamic module */ #define COMPILE_DL_ENCHANT 1 /* Whether to build exif as dynamic module */ #define COMPILE_DL_EXIF 1 /* Whether to build fileinfo as dynamic module */ #define COMPILE_DL_FILEINFO 1 /* Whether to build filter as dynamic module */ /* #undef COMPILE_DL_FILTER */ /* Whether to build ftp as dynamic module */ #define COMPILE_DL_FTP 1 /* Whether to build gd as dynamic module */ #define COMPILE_DL_GD 1 /* Whether to build gettext as dynamic module */ #define COMPILE_DL_GETTEXT 1 /* Whether to build gmp as dynamic module */ #define COMPILE_DL_GMP 1 /* Whether to build hash as dynamic module */ /* #undef COMPILE_DL_HASH */ /* Whether to build iconv as dynamic module */ #define COMPILE_DL_ICONV 1 /* Whether to build imap as dynamic module */ #define COMPILE_DL_IMAP 1 /* Whether to build interbase as dynamic module */ /* #undef COMPILE_DL_INTERBASE */ /* Whether to build intl as dynamic module */ #define COMPILE_DL_INTL 1 /* Whether to build json as dynamic module */ #define COMPILE_DL_JSON 1 /* Whether to build ldap as dynamic module */ #define COMPILE_DL_LDAP 1 /* Whether to build libxml as dynamic module */ /* #undef COMPILE_DL_LIBXML */ /* Whether to build mbstring as dynamic module */ #define COMPILE_DL_MBSTRING 1 /* Whether to build mysqli as dynamic module */ #define COMPILE_DL_MYSQLI 1 /* Whether to build mysqlnd as dynamic module */ #define COMPILE_DL_MYSQLND 1 /* Whether to build oci8 as dynamic module */ /* #undef COMPILE_DL_OCI8 */ /* Whether to build odbc as dynamic module */ #define COMPILE_DL_ODBC 1 /* Whether to build opcache as dynamic module */ #define COMPILE_DL_OPCACHE 1 /* Whether to build openssl as dynamic module */ /* #undef COMPILE_DL_OPENSSL */ /* Whether to build pcntl as dynamic module */ /* #undef COMPILE_DL_PCNTL */ /* Whether to build pcre as dynamic module */ /* #undef COMPILE_DL_PCRE */ /* Whether to build pdo as dynamic module */ #define COMPILE_DL_PDO 1 /* Whether to build pdo_dblib as dynamic module */ /* #undef COMPILE_DL_PDO_DBLIB */ /* Whether to build pdo_firebird as dynamic module */ /* #undef COMPILE_DL_PDO_FIREBIRD */ /* Whether to build pdo_mysql as dynamic module */ #define COMPILE_DL_PDO_MYSQL 1 /* Whether to build pdo_oci as dynamic module */ /* #undef COMPILE_DL_PDO_OCI */ /* Whether to build pdo_odbc as dynamic module */ #define COMPILE_DL_PDO_ODBC 1 /* Whether to build pdo_pgsql as dynamic module */ #define COMPILE_DL_PDO_PGSQL 1 /* Whether to build pdo_sqlite as dynamic module */ #define COMPILE_DL_PDO_SQLITE 1 /* Whether to build pgsql as dynamic module */ #define COMPILE_DL_PGSQL 1 /* Whether to build phar as dynamic module */ #define COMPILE_DL_PHAR 1 /* Whether to build phpdbg_webhelper as dynamic module */ /* #undef COMPILE_DL_PHPDBG_WEBHELPER */ /* Whether to build posix as dynamic module */ #define COMPILE_DL_POSIX 1 /* Whether to build pspell as dynamic module */ #define COMPILE_DL_PSPELL 1 /* Whether to build readline as dynamic module */ /* #undef COMPILE_DL_READLINE */ /* Whether to build recode as dynamic module */ #define COMPILE_DL_RECODE 1 /* Whether to build reflection as dynamic module */ /* #undef COMPILE_DL_REFLECTION */ /* Whether to build session as dynamic module */ /* #undef COMPILE_DL_SESSION */ /* Whether to build shmop as dynamic module */ #define COMPILE_DL_SHMOP 1 /* Whether to build simplexml as dynamic module */ #define COMPILE_DL_SIMPLEXML 1 /* Whether to build snmp as dynamic module */ #define COMPILE_DL_SNMP 1 /* Whether to build soap as dynamic module */ #define COMPILE_DL_SOAP 1 /* Whether to build sockets as dynamic module */ #define COMPILE_DL_SOCKETS 1 /* Whether to build sodium as dynamic module */ /* #undef COMPILE_DL_SODIUM */ /* Whether to build spl as dynamic module */ /* #undef COMPILE_DL_SPL */ /* Whether to build sqlite3 as dynamic module */ #define COMPILE_DL_SQLITE3 1 /* Whether to build standard as dynamic module */ /* #undef COMPILE_DL_STANDARD */ /* Whether to build sysvmsg as dynamic module */ #define COMPILE_DL_SYSVMSG 1 /* Whether to build sysvsem as dynamic module */ #define COMPILE_DL_SYSVSEM 1 /* Whether to build sysvshm as dynamic module */ #define COMPILE_DL_SYSVSHM 1 /* Whether to build tidy as dynamic module */ #define COMPILE_DL_TIDY 1 /* Whether to build tokenizer as dynamic module */ #define COMPILE_DL_TOKENIZER 1 /* Whether to build wddx as dynamic module */ #define COMPILE_DL_WDDX 1 /* Whether to build xml as dynamic module */ #define COMPILE_DL_XML 1 /* Whether to build xmlreader as dynamic module */ #define COMPILE_DL_XMLREADER 1 /* Whether to build xmlrpc as dynamic module */ #define COMPILE_DL_XMLRPC 1 /* Whether to build xmlwriter as dynamic module */ #define COMPILE_DL_XMLWRITER 1 /* Whether to build xsl as dynamic module */ #define COMPILE_DL_XSL 1 /* Whether to build zend_test as dynamic module */ /* #undef COMPILE_DL_ZEND_TEST */ /* Whether to build zip as dynamic module */ #define COMPILE_DL_ZIP 1 /* Whether to build zlib as dynamic module */ /* #undef COMPILE_DL_ZLIB */ /* */ #define COOKIE_IO_FUNCTIONS_T cookie_io_functions_t /* */ #define COOKIE_SEEKER_USES_OFF64_T 1 /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ /* #undef CRAY_STACKSEG_END */ /* Define if crypt_r has uses CRYPTD */ /* #undef CRYPT_R_CRYPTD */ /* Define if struct crypt_data requires _GNU_SOURCE */ /* #undef CRYPT_R_GNU_SOURCE */ /* Define if crypt_r uses struct crypt_data */ /* #undef CRYPT_R_STRUCT_CRYPT_DATA */ /* Define to 1 if using `alloca.c'. */ /* #undef C_ALLOCA */ /* Define if the target system is darwin */ /* #undef DARWIN */ /* */ /* #undef DB1_INCLUDE_FILE */ /* */ /* #undef DB1_VERSION */ /* */ /* #undef DB2_INCLUDE_FILE */ /* */ /* #undef DB3_INCLUDE_FILE */ /* */ #define DB4_INCLUDE_FILE "/usr/include/db.h" /* */ #define DBA_CDB 1 /* */ #define DBA_CDB_BUILTIN 1 /* */ #define DBA_CDB_MAKE 1 /* */ /* #undef DBA_DB1 */ /* */ /* #undef DBA_DB2 */ /* */ /* #undef DBA_DB3 */ /* */ #define DBA_DB4 1 /* */ /* #undef DBA_DBM */ /* */ #define DBA_FLATFILE 1 /* */ /* #undef DBA_GDBM */ /* */ #define DBA_INIFILE 1 /* */ /* #undef DBA_LMDB */ /* */ /* #undef DBA_NDBM */ /* */ /* #undef DBA_QDBM */ /* */ #define DBA_TCADB 1 /* */ /* #undef DBM_INCLUDE_FILE */ /* */ /* #undef DBM_VERSION */ /* */ #define DEFAULT_SHORT_OPEN_TAG "1" /* Define if dlsym() requires a leading underscore in symbol names. */ /* #undef DLSYM_NEEDS_UNDERSCORE */ /* Whether to enable chroot() function */ #define ENABLE_CHROOT_FUNC 1 /* */ #define ENABLE_GD_TTF 1 /* */ #define ENCHANT_VERSION_STRING "1.5.x" /* */ /* #undef GDBM_INCLUDE_FILE */ /* Whether you use GNU Pth */ /* #undef GNUPTH */ /* Define to 1 if `TIOCGWINSZ' requires . */ #define GWINSZ_IN_SYS_IOCTL 1 /* Whether 3 arg set_rebind_proc() */ #define HAVE_3ARG_SETREBINDPROC 1 /* Define to 1 if you have the `acosh' function. */ #define HAVE_ACOSH 1 /* */ /* #undef HAVE_ADABAS */ /* Whether you have AI_ALL */ #define HAVE_AI_ALL 1 /* Whether you have AI_IDN */ #define HAVE_AI_IDN 1 /* Whether you have AI_V4MAPPED */ #define HAVE_AI_V4MAPPED 1 /* whether the compiler supports __alignof__ */ #define HAVE_ALIGNOF 1 /* Define to 1 if you have `alloca', as a function or macro. */ #define HAVE_ALLOCA 1 /* Define to 1 if you have and it should be used (not on Ultrix). */ #define HAVE_ALLOCA_H 1 /* Define to 1 if you have the `alphasort' function. */ #define HAVE_ALPHASORT 1 /* do we have apparmor support? */ /* #undef HAVE_APPARMOR */ /* Define to 1 if you have the header file. */ /* #undef HAVE_APPLICATIONSERVICES_APPLICATIONSERVICES_H */ /* Define to 1 if you have the header file */ #define HAVE_ARGON2LIB 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_INET_H 1 /* Define to 1 if you have the header file. */ #define HAVE_ARPA_NAMESER_H 1 /* Define to 1 if you have the `asctime_r' function. */ #define HAVE_ASCTIME_R 1 /* Define to 1 if you have the `asinh' function. */ #define HAVE_ASINH 1 /* Define if asm goto support */ #define HAVE_ASM_GOTO 1 /* Define to 1 if you have the `asprintf' function. */ #define HAVE_ASPRINTF 1 /* Define to 1 if you have the header file. */ #define HAVE_ASSERT_H 1 /* Define to 1 if you have the `atanh' function. */ #define HAVE_ATANH 1 /* whether atof() accepts INF */ /* #undef HAVE_ATOF_ACCEPTS_INF */ /* whether atof() accepts NAN */ /* #undef HAVE_ATOF_ACCEPTS_NAN */ /* Define to 1 if you have the `atoll' function. */ #define HAVE_ATOLL 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_ATOMIC_H */ /* whether the compiler supports __attribute__ ((__aligned__)) */ #define HAVE_ATTRIBUTE_ALIGNED 1 /* Whether you have bcmath */ #define HAVE_BCMATH 1 /* */ #define HAVE_BIND_TEXTDOMAIN_CODESET 1 /* Define if system has broken getcwd */ /* #undef HAVE_BROKEN_GETCWD */ /* Define if your glibc borks on fopen with mode a+ */ #define HAVE_BROKEN_GLIBC_FOPEN_APPEND 1 /* Whether we have librecode 3.5 */ /* #undef HAVE_BROKEN_RECODE */ /* Konstantin Chuguev's iconv implementation */ /* #undef HAVE_BSD_ICONV */ /* */ #define HAVE_BUILD_DEFS_H 1 /* Define to 1 if gcc supports __sync_bool_compare_and_swap() a.o. */ /* #undef HAVE_BUILTIN_ATOMIC */ /* */ /* #undef HAVE_BUNDLED_PCRE */ /* */ #define HAVE_BZ2 1 /* */ #define HAVE_CALENDAR 1 /* Define to 1 if you have the `chroot' function. */ #define HAVE_CHROOT 1 /* Define to 1 if you have the `clearenv' function. */ /* #undef HAVE_CLEARENV */ /* */ /* #undef HAVE_CLI0CLI_H */ /* */ /* #undef HAVE_CLI0CORE_H */ /* */ /* #undef HAVE_CLI0DEFS_H */ /* */ /* #undef HAVE_CLI0ENV_H */ /* */ /* #undef HAVE_CLI0EXT_H */ /* do we have clock_gettime? */ /* #undef HAVE_CLOCK_GETTIME */ /* do we have clock_get_time? */ /* #undef HAVE_CLOCK_GET_TIME */ /* Whether you have struct cmsghdr */ #define HAVE_CMSGHDR 1 /* */ /* #undef HAVE_CODBC */ /* Compiler supports VLA */ #define HAVE_COMPILER_C99_VLA 1 /* whether __cpuid_count is available */ #define HAVE_CPUID_COUNT 1 /* Define to 1 if you have the header file. */ #define HAVE_CPUID_H 1 /* Define to 1 if you have the `CreateProcess' function. */ /* #undef HAVE_CREATEPROCESS */ /* */ #define HAVE_CRYPT 1 /* Define to 1 if you have the header file. */ #define HAVE_CRYPT_H 1 /* Define to 1 if you have the `crypt_r' function. */ /* #undef HAVE_CRYPT_R */ /* Define to 1 if you have the `ctermid' function. */ #define HAVE_CTERMID 1 /* Define to 1 if you have the `ctime_r' function. */ #define HAVE_CTIME_R 1 /* */ #define HAVE_CTYPE 1 /* */ #define HAVE_CURL 1 /* */ #define HAVE_CURL_EASY_STRERROR 1 /* Have cURL with GnuTLS support */ /* #undef HAVE_CURL_GNUTLS */ /* */ #define HAVE_CURL_MULTI_STRERROR 1 /* Have cURL with OpenSSL support */ #define HAVE_CURL_OPENSSL 1 /* Have cURL with SSL support */ #define HAVE_CURL_SSL 1 /* Define to 1 if you have the `cuserid' function. */ #define HAVE_CUSERID 1 /* */ #define HAVE_DBA 1 /* Whether you want DBMaker */ /* #undef HAVE_DBMAKER */ /* */ #define HAVE_DCNGETTEXT 1 /* Whether system headers declare timezone */ #define HAVE_DECLARED_TIMEZONE 1 /* Define to 1 if you have the declaration of `arc4random_buf', and to 0 if you don't. */ #define HAVE_DECL_ARC4RANDOM_BUF 0 /* Define to 1 if you have the declaration of `isfinite', and to 0 if you don't. */ #define HAVE_DECL_ISFINITE 1 /* Define to 1 if you have the declaration of `isinf', and to 0 if you don't. */ #define HAVE_DECL_ISINF 1 /* Define to 1 if you have the declaration of `isnan', and to 0 if you don't. */ #define HAVE_DECL_ISNAN 1 /* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. */ /* #undef HAVE_DECL_TZNAME */ /* do we have /dev/poll? */ /* #undef HAVE_DEVPOLL */ /* Define if the target system has /dev/arandom device */ /* #undef HAVE_DEV_ARANDOM */ /* Define if the target system has /dev/urandom device */ #define HAVE_DEV_URANDOM 1 /* Define to 1 if you have the header file. */ #define HAVE_DIRENT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_DLFCN_H 1 /* */ #define HAVE_DLOPEN 1 /* Whether you have dmalloc */ /* #undef HAVE_DMALLOC */ /* */ #define HAVE_DNGETTEXT 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_DNS_H */ /* */ /* #undef HAVE_DNS_SEARCH */ /* */ #define HAVE_DN_EXPAND 1 /* */ #define HAVE_DN_SKIPNAME 1 /* */ #define HAVE_DOM 1 /* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ /* #undef HAVE_DOPRNT */ /* OpenSSL 0.9.7 or later */ #define HAVE_DSA_DEFAULT_METHOD 1 /* Whether to enable DTrace support */ /* #undef HAVE_DTRACE */ /* embedded MySQL support enabled */ /* #undef HAVE_EMBEDDED_MYSQLI */ /* */ /* #undef HAVE_EMPRESS */ /* */ #define HAVE_ENCHANT 1 /* */ #define HAVE_ENCHANT_BROKER_SET_PARAM 1 /* Libzip >= 1.2.0 with encryption support */ /* #undef HAVE_ENCRYPTION */ /* do we have epoll? */ /* #undef HAVE_EPOLL */ /* Define to 1 if you have the header file. */ #define HAVE_ERRNO_H 1 /* */ /* #undef HAVE_ESOOB */ /* Whether you want EXIF (metadata from images) support */ #define HAVE_EXIF 1 /* Define to 1 if you have the `explicit_bzero' function. */ #define HAVE_EXPLICIT_BZERO 1 /* Define to 1 if you have the `explicit_memset' function. */ /* #undef HAVE_EXPLICIT_MEMSET */ /* Define to 1 if you have the `fabsf' function. */ #define HAVE_FABSF 1 /* Define to 1 if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the `finite' function. */ #define HAVE_FINITE 1 /* Define to 1 if you have the `flock' function. */ #define HAVE_FLOCK 1 /* Define to 1 if you have the `floorf' function. */ #define HAVE_FLOORF 1 /* Define if flush should be called explicitly after a buffered io. */ /* #undef HAVE_FLUSHIO */ /* Define to 1 if your system has a working POSIX `fnmatch' function. */ #define HAVE_FNMATCH 1 /* */ #define HAVE_FOPENCOOKIE 1 /* Define to 1 if you have the `fork' function. */ #define HAVE_FORK 1 /* Define to 1 if you have the `fpclass' function. */ /* #undef HAVE_FPCLASS */ /* POSIX Access Control List */ /* #undef HAVE_FPM_ACL */ /* whether fpsetprec is present and usable */ /* #undef HAVE_FPSETPREC */ /* whether FPU control word can be manipulated by inline assembler */ #define HAVE_FPU_INLINE_ASM_X86 1 /* whether floatingpoint.h defines fp_except */ /* #undef HAVE_FP_EXCEPT */ /* */ /* #undef HAVE_FREETDS */ /* Define to 1 if you have the `ftok' function. */ #define HAVE_FTOK 1 /* Whether you want FTP support */ #define HAVE_FTP 1 /* Whether FTP over SSL is supported */ #define HAVE_FTP_SSL 1 /* Define to 1 if you have the header file. */ #define HAVE_FTS_H 1 /* Define to 1 if the system has the `ifunc' function attribute */ #define HAVE_FUNC_ATTRIBUTE_IFUNC 1 /* Define to 1 if the system has the `target' function attribute */ /* #undef HAVE_FUNC_ATTRIBUTE_TARGET */ /* Define to 1 if you have the three-argument form of gethostbyname_r(). */ /* #undef HAVE_FUNC_GETHOSTBYNAME_R_3 */ /* Define to 1 if you have the five-argument form of gethostbyname_r(). */ /* #undef HAVE_FUNC_GETHOSTBYNAME_R_5 */ /* Define to 1 if you have the six-argument form of gethostbyname_r(). */ #define HAVE_FUNC_GETHOSTBYNAME_R_6 1 /* Define to 1 if you have the `funopen' function. */ /* #undef HAVE_FUNOPEN */ /* Define to 1 if you have the `gai_strerror' function. */ #define HAVE_GAI_STRERROR 1 /* Define if the target system has support for global register variables */ #define HAVE_GCC_GLOBAL_REGS 1 /* Whether you have gcov */ /* #undef HAVE_GCOV */ /* Define to 1 if you have the `gcvt' function. */ #define HAVE_GCVT 1 /* */ #define HAVE_GD_BMP 1 /* */ #define HAVE_GD_BUNDLED 1 /* */ #define HAVE_GD_CACHE_CREATE 1 /* */ #define HAVE_GD_FREETYPE 1 /* */ #define HAVE_GD_JPG 1 /* */ /* #undef HAVE_GD_LIBVERSION */ /* */ #define HAVE_GD_PNG 1 /* */ #define HAVE_GD_WEBP 1 /* */ #define HAVE_GD_XPM 1 /* Define if you have the getaddrinfo function */ #define HAVE_GETADDRINFO 1 /* Define to 1 if you have the `getcwd' function. */ #define HAVE_GETCWD 1 /* Define to 1 if you have the `getgrgid_r' function. */ #define HAVE_GETGRGID_R 1 /* Define to 1 if you have the `getgrnam_r' function. */ #define HAVE_GETGRNAM_R 1 /* Define to 1 if you have the `getgroups' function. */ #define HAVE_GETGROUPS 1 /* */ #define HAVE_GETHOSTBYADDR 1 /* Define to 1 if you have some form of gethostbyname_r(). */ #define HAVE_GETHOSTBYNAME_R 1 /* Define to 1 if you have the `gethostname' function. */ #define HAVE_GETHOSTNAME 1 /* whether getifaddrs is present and usable */ #define HAVE_GETIFADDRS 1 /* Define to 1 if you have the `getloadavg' function. */ #define HAVE_GETLOADAVG 1 /* Define to 1 if you have the `getlogin' function. */ #define HAVE_GETLOGIN 1 /* Define to 1 if you have the `getopt' function. */ #define HAVE_GETOPT 1 /* Define to 1 if you have the `getpgid' function. */ #define HAVE_GETPGID 1 /* Define to 1 if you have the `getpid' function. */ #define HAVE_GETPID 1 /* Define to 1 if you have the `getpriority' function. */ #define HAVE_GETPRIORITY 1 /* Define to 1 if you have the `getprotobyname' function. */ #define HAVE_GETPROTOBYNAME 1 /* Define to 1 if you have the `getprotobynumber' function. */ #define HAVE_GETPROTOBYNUMBER 1 /* Define to 1 if you have the `getpwnam_r' function. */ #define HAVE_GETPWNAM_R 1 /* Define to 1 if you have the `getpwuid_r' function. */ #define HAVE_GETPWUID_R 1 /* Define to 1 if you have the `getrlimit' function. */ #define HAVE_GETRLIMIT 1 /* Define to 1 if you have the `getrusage' function. */ #define HAVE_GETRUSAGE 1 /* Define to 1 if you have the `getservbyname' function. */ #define HAVE_GETSERVBYNAME 1 /* Define to 1 if you have the `getservbyport' function. */ #define HAVE_GETSERVBYPORT 1 /* Define to 1 if you have the `getsid' function. */ #define HAVE_GETSID 1 /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 /* Define to 1 if you have the `getwd' function. */ #define HAVE_GETWD 1 /* */ /* #undef HAVE_GICONV_H */ /* glibc's iconv implementation */ #define HAVE_GLIBC_ICONV 1 /* Define to 1 if you have the `glob' function. */ #define HAVE_GLOB 1 /* */ #define HAVE_GMP 1 /* Define to 1 if you have the `gmtime_r' function. */ #define HAVE_GMTIME_R 1 /* Define to 1 if you have the `grantpt' function. */ #define HAVE_GRANTPT 1 /* Define to 1 if you have the header file. */ #define HAVE_GRP_H 1 /* Have HASH Extension */ #define HAVE_HASH_EXT 1 /* Define to 1 if you have the `hstrerror' function. */ #define HAVE_HSTRERROR 1 /* */ #define HAVE_HTONL 1 /* Define to enable copying PHP CODE pages into HUGE PAGES (experimental) */ #define HAVE_HUGE_CODE_PAGES 1 /* whether HUGE_VAL == INF */ #define HAVE_HUGE_VAL_INF 1 /* whether HUGE_VAL + -HUGEVAL == NAN */ /* #undef HAVE_HUGE_VAL_NAN */ /* Define to 1 if you have the `hypot' function. */ #define HAVE_HYPOT 1 /* */ /* #undef HAVE_IBASE */ /* */ /* #undef HAVE_IBMDB2 */ /* IBM iconv implementation */ /* #undef HAVE_IBM_ICONV */ /* */ #define HAVE_ICONV 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_IEEEFP_H */ /* Define to 1 if you have the `if_indextoname' function. */ #define HAVE_IF_INDEXTONAME 1 /* Define to 1 if you have the `if_nametoindex' function. */ #define HAVE_IF_NAMETOINDEX 1 /* */ #define HAVE_IMAP 1 /* */ #define HAVE_IMAP2000 1 /* */ /* #undef HAVE_IMAP2001 */ /* */ #define HAVE_IMAP2004 1 /* */ #define HAVE_IMAP_AUTH_GSS 1 /* */ #define HAVE_IMAP_KRB 1 /* */ #define HAVE_IMAP_MUTF7 1 /* */ #define HAVE_IMAP_SSL 1 /* Define to 1 if you have the header file. */ #define HAVE_IMMINTRIN_H 1 /* */ #define HAVE_INET_ATON 1 /* Define to 1 if you have the `inet_ntoa' function. */ #define HAVE_INET_NTOA 1 /* Define to 1 if you have the `inet_ntop' function. */ #define HAVE_INET_NTOP 1 /* Define to 1 if you have the `inet_pton' function. */ #define HAVE_INET_PTON 1 /* Define to 1 if you have the `initgroups' function. */ #define HAVE_INITGROUPS 1 /* Define to 1 if the system has the type `int16'. */ /* #undef HAVE_INT16 */ /* Define to 1 if the system has the type `int16_t'. */ #define HAVE_INT16_T 1 /* Define to 1 if the system has the type `int32'. */ /* #undef HAVE_INT32 */ /* Define if int32_t type is present. */ #define HAVE_INT32_T 1 /* Define to 1 if the system has the type `int64'. */ /* #undef HAVE_INT64 */ /* Define to 1 if the system has the type `int64_t'. */ #define HAVE_INT64_T 1 /* Define to 1 if the system has the type `int8'. */ /* #undef HAVE_INT8 */ /* Define to 1 if the system has the type `int8_t'. */ #define HAVE_INT8_T 1 /* Whether intmax_t is available */ #define HAVE_INTMAX_T 1 /* Define to 1 if you have the header file. */ #define HAVE_INTTYPES_H 1 /* */ /* #undef HAVE_IODBC */ /* */ /* #undef HAVE_IODBC_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_IO_H */ /* Whether to enable IPv6 support */ #define HAVE_IPV6 1 /* Define to 1 if you have the `isascii' function. */ #define HAVE_ISASCII 1 /* */ /* #undef HAVE_ISQLEXT_H */ /* */ /* #undef HAVE_ISQL_H */ /* whether to enable JavaScript Object Serialization support */ #define HAVE_JSON 1 /* Define to 1 if you have the `kill' function. */ #define HAVE_KILL 1 /* do we have kqueue? */ /* #undef HAVE_KQUEUE */ /* Define to 1 if you have the header file. */ #define HAVE_LANGINFO_H 1 /* Define to 1 if you have the `lchown' function. */ #define HAVE_LCHOWN 1 /* */ #define HAVE_LDAP 1 /* Define to 1 if you have the `ldap_control_find' function. */ #define HAVE_LDAP_CONTROL_FIND 1 /* Define to 1 if you have the `ldap_extended_operation' function. */ #define HAVE_LDAP_EXTENDED_OPERATION 1 /* Define to 1 if you have the `ldap_extended_operation_s' function. */ #define HAVE_LDAP_EXTENDED_OPERATION_S 1 /* Define to 1 if you have the `ldap_parse_extended_result' function. */ #define HAVE_LDAP_PARSE_EXTENDED_RESULT 1 /* Define to 1 if you have the `ldap_parse_reference' function. */ #define HAVE_LDAP_PARSE_REFERENCE 1 /* Define to 1 if you have the `ldap_parse_result' function. */ #define HAVE_LDAP_PARSE_RESULT 1 /* Define to 1 if you have the `ldap_passwd' function. */ #define HAVE_LDAP_PASSWD 1 /* Define to 1 if you have the `ldap_refresh_s' function. */ #define HAVE_LDAP_REFRESH_S 1 /* LDAP SASL support */ #define HAVE_LDAP_SASL 1 /* */ /* #undef HAVE_LDAP_SASL_H */ /* */ #define HAVE_LDAP_SASL_SASL_H 1 /* Define to 1 if you have the `ldap_start_tls_s' function. */ #define HAVE_LDAP_START_TLS_S 1 /* Define to 1 if you have the `ldap_whoami_s' function. */ #define HAVE_LDAP_WHOAMI_S 1 /* */ /* #undef HAVE_LIBBIND */ /* */ #define HAVE_LIBCRYPT 1 /* */ #define HAVE_LIBDL 1 /* */ /* #undef HAVE_LIBDNET_STUB */ /* */ #define HAVE_LIBEDIT 1 /* */ /* #undef HAVE_LIBEXPAT */ /* */ #define HAVE_LIBFREETYPE 1 /* */ /* #undef HAVE_LIBGD */ /* */ /* #undef HAVE_LIBICONV */ /* */ #define HAVE_LIBINTL 1 /* Define to 1 if you have the `m' library (-lm). */ #define HAVE_LIBM 1 /* Whether you have libmm */ /* #undef HAVE_LIBMM */ /* */ /* #undef HAVE_LIBNSL */ /* */ #define HAVE_LIBPAM 1 /* Define to 1 if you have the `pq' library (-lpq). */ #define HAVE_LIBPQ 1 /* */ /* #undef HAVE_LIBRARYMANAGER_H */ /* */ /* #undef HAVE_LIBREADLINE */ /* Whether we have librecode 3.5 or higher */ #define HAVE_LIBRECODE 1 /* */ #define HAVE_LIBRESOLV 1 /* */ #define HAVE_LIBRT 1 /* */ /* #undef HAVE_LIBSOCKET */ /* */ /* #undef HAVE_LIBSODIUMLIB */ /* */ #define HAVE_LIBXML 1 /* */ /* #undef HAVE_LIBZIP */ /* Libzip >= 1.3.1 with zip_libzip_version function */ /* #undef HAVE_LIBZIP_VERSION */ /* Define to 1 if you have the header file. */ #define HAVE_LIMITS_H 1 /* Define to 1 if you have the `link' function. */ #define HAVE_LINK 1 /* Define to 1 if you have the `localeconv' function. */ #define HAVE_LOCALECONV 1 /* Define to 1 if you have the header file. */ #define HAVE_LOCALE_H 1 /* Define to 1 if you have the `localtime_r' function. */ #define HAVE_LOCALTIME_R 1 /* Define to 1 if you have the `lockf' function. */ #define HAVE_LOCKF 1 /* Define to 1 if you have the `log1p' function. */ #define HAVE_LOG1P 1 /* do we have SO_LISTENQxxx? */ /* #undef HAVE_LQ_SO_LISTENQ */ /* do we have TCP_INFO? */ /* #undef HAVE_LQ_TCP_INFO */ /* Define to 1 if you have the `lrand48' function. */ #define HAVE_LRAND48 1 /* LVE support */ /* #undef HAVE_LVE */ /* do we have mach_vm_read? */ /* #undef HAVE_MACH_VM_READ */ /* Define to 1 if you have the `makedev' function. */ /* #undef HAVE_MAKEDEV */ /* Define to 1 if you have the header file. */ #define HAVE_MALLOC_H 1 /* Define to 1 if you have the `mblen' function. */ #define HAVE_MBLEN 1 /* whether to have multibyte regex support */ #define HAVE_MBREGEX 1 /* Define to 1 if you have the `mbrlen' function. */ #define HAVE_MBRLEN 1 /* Define to 1 if you have the `mbsinit' function. */ #define HAVE_MBSINIT 1 /* Define if your system has mbstate_t in wchar.h */ #define HAVE_MBSTATE_T 1 /* whether to have multibyte string support */ #define HAVE_MBSTRING 1 /* Define to 1 if you have the `memcpy' function. */ #define HAVE_MEMCPY 1 /* Define to 1 if you have the `memmove' function. */ #define HAVE_MEMMOVE 1 /* Define to 1 if you have the header file. */ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `mempcpy' function. */ #define HAVE_MEMPCPY 1 /* Define if the target system has support for memory allocation using mmap(MAP_ANON) */ #define HAVE_MEM_MMAP_ANON 1 /* Define if the target system has support for memory allocation using mmap("/dev/zero") */ #define HAVE_MEM_MMAP_ZERO 1 /* Define to 1 if you have the `mkfifo' function. */ #define HAVE_MKFIFO 1 /* Define to 1 if you have the `mknod' function. */ #define HAVE_MKNOD 1 /* Define to 1 if you have the `mkstemp' function. */ #define HAVE_MKSTEMP 1 /* Define to 1 if you have the `mmap' function. */ #define HAVE_MMAP 1 /* Define to 1 if you have the header file. */ #define HAVE_MONETARY_H 1 /* Define if you have mprotect() function */ #define HAVE_MPROTECT 1 /* Define to 1 if you have the `mremap' function. */ #define HAVE_MREMAP 1 /* Whether you have MySQL */ /* #undef HAVE_MYSQL */ /* */ /* #undef HAVE_MYSQLILIB */ /* Define to 1 if you have the `nanosleep' function. */ #define HAVE_NANOSLEEP 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_NETDB_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_IN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NETINET_TCP_H 1 /* Define to 1 if you have the header file. */ #define HAVE_NET_IF_H 1 /* Whether utf8_mime2text() has new signature */ #define HAVE_NEW_MIME2TEXT 1 /* */ #define HAVE_NGETTEXT 1 /* Define to 1 if you have the `nice' function. */ #define HAVE_NICE 1 /* Define to 1 if you have the `nl_langinfo' function. */ #define HAVE_NL_LANGINFO 1 /* Define to 1 if you have the header file. */ #define HAVE_NMMINTRIN_H 1 /* */ /* #undef HAVE_NSLDAP */ /* Defined to 1 if the PHP OCI8 extension for Oracle Database is configured */ /* #undef HAVE_OCI8 */ /* Defined to 1 if PHP OCI8 DTrace support was enabled during configuration */ /* #undef HAVE_OCI8_DTRACE */ /* */ /* #undef HAVE_OCICOLLASSIGN */ /* */ /* #undef HAVE_OCIENVCREATE */ /* */ /* #undef HAVE_OCIENVNLSCREATE */ /* */ /* #undef HAVE_OCILOBISTEMPORARY */ /* */ /* #undef HAVE_OCISTMTFETCH2 */ /* Defined to 1 if OCI8 configuration located Oracle's Instant Client libraries */ /* #undef HAVE_OCI_INSTANT_CLIENT */ /* */ /* #undef HAVE_ODBC2 */ /* */ /* #undef HAVE_ODBCSDK_H */ /* */ /* #undef HAVE_ODBC_H */ /* whether you have old-style readdir_r */ /* #undef HAVE_OLD_READDIR_R */ /* Define to 1 if the oniguruma library is available */ #define HAVE_ONIG 1 /* Define to enable file based caching (experimental) */ /* #undef HAVE_OPCACHE_FILE_CACHE */ /* Define to 1 if you have the header file. */ #define HAVE_OPENSSL_CRYPTO_H 1 /* */ #define HAVE_OPENSSL_EXT 1 /* */ /* #undef HAVE_ORALDAP */ /* */ /* #undef HAVE_ORALDAP_10 */ /* */ /* #undef HAVE_ORALDAP_11 */ /* */ /* #undef HAVE_ORALDAP_12 */ /* */ #define HAVE_PCRE 1 /* */ #define HAVE_PCRE_JIT_SUPPORT 1 /* */ /* #undef HAVE_PCRE_VALGRIND_SUPPORT */ /* */ /* #undef HAVE_PDO_DBLIB */ /* */ /* #undef HAVE_PDO_FIREBIRD */ /* Whether to build PostgreSQL for PDO support or not */ #define HAVE_PDO_PGSQL 1 /* */ #define HAVE_PDO_SQLITELIB 1 /* Define to 1 if you have the `perror' function. */ #define HAVE_PERROR 1 /* Whether to build PostgreSQL support or not */ #define HAVE_PGSQL 1 /* Whether libpq is compiled with --enable-multibyte */ #define HAVE_PGSQL_WITH_MULTIBYTE_SUPPORT 1 /* PostgreSQL 7.4 or later */ #define HAVE_PGTRANSACTIONSTATUS 1 /* Whether to have pg_config.h */ #define HAVE_PG_CONFIG_H 1 /* PostgreSQL 9.3 or later */ #define HAVE_PG_LO64 1 /* PostgreSQL 8.1 or later */ #define HAVE_PG_LO_CREATE 1 /* PostgreSQL 8.4 or later */ #define HAVE_PG_LO_IMPORT_WITH_OID 1 /* PostgreSQL 8.3 or later */ #define HAVE_PG_LO_TRUNCATE 1 /* */ #define HAVE_PHPDBG 1 /* */ /* #undef HAVE_PHPDBG_READLINE */ /* */ #define HAVE_PHP_SESSION 1 /* Define to 1 if you have the `poll' function. */ #define HAVE_POLL 1 /* Define to 1 if you have the header file. */ #define HAVE_POLL_H 1 /* do we have port framework? */ /* #undef HAVE_PORT */ /* whether to include POSIX-like functions */ #define HAVE_POSIX 1 /* whether you have POSIX readdir_r */ #define HAVE_POSIX_READDIR_R 1 /* PostgreSQL 7.0.x or later */ #define HAVE_PQCLIENTENCODING 1 /* Broken libpq under windows */ #define HAVE_PQCMDTUPLES 1 /* PostgreSQL 7.2.0 or later */ #define HAVE_PQESCAPE 1 /* PostgreSQL 9.0 or later */ #define HAVE_PQESCAPELITERAL 1 /* PostgreSQL 8.1.4 or later */ #define HAVE_PQESCAPE_BYTEA_CONN 1 /* PostgreSQL 8.1.4 or later */ #define HAVE_PQESCAPE_CONN 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQEXECPARAMS 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQEXECPREPARED 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQFREEMEM 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQFTABLE 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQGETCOPYDATA 1 /* Older PostgreSQL */ #define HAVE_PQOIDVALUE 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQPARAMETERSTATUS 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQPREPARE 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQPROTOCOLVERSION 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQPUTCOPYDATA 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQPUTCOPYEND 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQRESULTERRORFIELD 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQSENDPREPARE 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQSENDQUERYPARAMS 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQSENDQUERYPREPARED 1 /* PostgreSQL 7.4 or later */ #define HAVE_PQSETERRORVERBOSITY 1 /* PostgreSQL 7.0.x or later */ #define HAVE_PQSETNONBLOCKING 1 /* PostgreSQL 7.3.0 or later */ #define HAVE_PQUNESCAPEBYTEA 1 /* do we have prctl? */ /* #undef HAVE_PRCTL */ /* */ #define HAVE_PREAD 1 /* */ #define HAVE_PSPELL 1 /* Define to 1 if the PS_STRINGS thing exists. */ /* #undef HAVE_PS_STRINGS */ /* do we have ptrace? */ /* #undef HAVE_PTRACE */ /* Whether ptrdiff_t is available */ #define HAVE_PTRDIFF_T 1 /* Define to 1 if you have the `ptsname' function. */ #define HAVE_PTSNAME 1 /* Define to 1 if you have the `putenv' function. */ #define HAVE_PUTENV 1 /* Define to 1 if you have the header file. */ #define HAVE_PWD_H 1 /* */ #define HAVE_PWRITE 1 /* Define to 1 if you have the `random' function. */ #define HAVE_RANDOM 1 /* Define to 1 if you have the `RAND_egd' function. */ /* #undef HAVE_RAND_EGD */ /* Define to 1 if you have the `rand_r' function. */ #define HAVE_RAND_R 1 /* Define to 1 if you have the `realpath' function. */ #define HAVE_REALPATH 1 /* Whether Reflection is enabled */ #define HAVE_REFLECTION 1 /* Define to 1 if you have the header file. */ #define HAVE_RESOLV_H 1 /* */ /* #undef HAVE_RES_NDESTROY */ /* */ #define HAVE_RES_NSEARCH 1 /* */ #define HAVE_RES_SEARCH 1 /* */ #define HAVE_RFC822_OUTPUT_ADDRESS_LIST 1 /* */ #define HAVE_RL_CALLBACK_READ_CHAR 1 /* */ #define HAVE_RL_COMPLETION_MATCHES 1 /* */ #define HAVE_RL_ON_NEW_LINE 1 /* */ /* #undef HAVE_SAPDB */ /* Whether you have sockaddr_storage.ss_family */ #define HAVE_SA_SS_FAMILY 1 /* Define to 1 if you have the `scandir' function. */ #define HAVE_SCANDIR 1 /* do we have select? */ /* #undef HAVE_SELECT */ /* */ #define HAVE_SEMUN 0 /* Define to 1 if you have the `setegid' function. */ #define HAVE_SETEGID 1 /* Define to 1 if you have the `setenv' function. */ #define HAVE_SETENV 1 /* Define to 1 if you have the `seteuid' function. */ #define HAVE_SETEUID 1 /* Define to 1 if you have the `setitimer' function. */ #define HAVE_SETITIMER 1 /* Define to 1 if you have the `setlocale' function. */ #define HAVE_SETLOCALE 1 /* Define to 1 if you have the `setpgid' function. */ #define HAVE_SETPGID 1 /* Define to 1 if you have the `setpriority' function. */ #define HAVE_SETPRIORITY 1 /* Define to 1 if you have the `setproctitle' function. */ /* #undef HAVE_SETPROCTITLE */ /* Define to 1 if you have the `setproctitle_fast' function. */ /* #undef HAVE_SETPROCTITLE_FAST */ /* Define to 1 if you have the `setrlimit' function. */ #define HAVE_SETRLIMIT 1 /* Define to 1 if you have the `setsid' function. */ #define HAVE_SETSID 1 /* Define to 1 if you have the `setsockopt' function. */ #define HAVE_SETSOCKOPT 1 /* Define to 1 if you have the `setvbuf' function. */ #define HAVE_SETVBUF 1 /* */ #define HAVE_SHMOP 1 /* Define if you have SysV IPC SHM support */ #define HAVE_SHM_IPC 1 /* Define if you have mmap(MAP_ANON) SHM support */ #define HAVE_SHM_MMAP_ANON 1 /* Define if you have mmap() SHM support */ #define HAVE_SHM_MMAP_FILE 1 /* Define if you have POSIX mmap() SHM support */ #define HAVE_SHM_MMAP_POSIX 1 /* Define if you have mmap("/dev/zero") SHM support */ #define HAVE_SHM_MMAP_ZERO 1 /* Define to 1 if you have the `shutdown' function. */ #define HAVE_SHUTDOWN 1 /* */ #define HAVE_SHUTDOWN_SNMP_LOGGING 1 /* Whether sigaction() is available */ #define HAVE_SIGACTION 1 /* Define to 1 if you have the header file. */ #define HAVE_SIGNAL_H 1 /* Define to 1 if you have the `sigprocmask' function. */ #define HAVE_SIGPROCMASK 1 /* Define to 1 if you have the `sigsetjmp' function. */ /* #undef HAVE_SIGSETJMP */ /* Define to 1 if you have the `sigtimedwait' function. */ #define HAVE_SIGTIMEDWAIT 1 /* Define to 1 if you have the `sigwaitinfo' function. */ #define HAVE_SIGWAITINFO 1 /* */ #define HAVE_SIMPLEXML 1 /* Define to 1 if you have the `sin' function. */ #define HAVE_SIN 1 /* Define is hash3 algo is available */ /* #undef HAVE_SLOW_HASH3 */ /* */ #define HAVE_SNMP 1 /* Define to 1 if you have the `snprintf' function. */ #define HAVE_SNPRINTF 1 /* */ #define HAVE_SOAP 1 /* Whether struct sockaddr has field sa_len */ /* #undef HAVE_SOCKADDR_SA_LEN */ /* Whether you have struct sockaddr_storage */ #define HAVE_SOCKADDR_STORAGE 1 /* Define if sockaddr_un in sys/un.h contains a sun_len component */ /* #undef HAVE_SOCKADDR_UN_SUN_LEN */ /* */ #define HAVE_SOCKET 1 /* Define to 1 if you have the `socketpair' function. */ #define HAVE_SOCKETPAIR 1 /* */ #define HAVE_SOCKETS 1 /* Whether you have socklen_t */ #define HAVE_SOCKLEN_T 1 /* */ /* #undef HAVE_SOLID */ /* */ /* #undef HAVE_SOLID_30 */ /* */ /* #undef HAVE_SOLID_35 */ /* Whether you want SPL (Standard PHP Library) support */ #define HAVE_SPL 1 /* */ /* #undef HAVE_SQLCLI1_H */ /* */ #define HAVE_SQLDATASOURCES 1 /* */ #define HAVE_SQLEXT_H 1 /* */ #define HAVE_SQLITE3 1 /* have sqlite3_close_v2 */ #define HAVE_SQLITE3_CLOSE_V2 1 /* have sqlite3_errstr function */ #define HAVE_SQLITE3_ERRSTR 1 /* have commercial sqlite3 with crypto support */ /* #undef HAVE_SQLITE3_KEY */ /* */ #define HAVE_SQLTYPES_H 1 /* */ #define HAVE_SQLUCODE_H 1 /* */ /* #undef HAVE_SQLUNIX_H */ /* */ #define HAVE_SQL_H 1 /* Define to 1 if you have the `srand48' function. */ #define HAVE_SRAND48 1 /* Define to 1 if you have the `srandom' function. */ #define HAVE_SRANDOM 1 /* Define if __SSE4_2__ has been defined */ /* #undef HAVE_SSE4_2_DEF */ /* Define to 1 if the system has the type `ssize_t'. */ #define HAVE_SSIZE_T 1 /* Define to 1 if you have the `statfs' function. */ #define HAVE_STATFS 1 /* Define to 1 if you have the `statvfs' function. */ #define HAVE_STATVFS 1 /* Define to 1 if you have the header file. */ #define HAVE_STDARG_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDARG_PROTOTYPES 1 /* Define to 1 if you have the header file. */ #define HAVE_STDBOOL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STDINT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_STDIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `std_syslog' function. */ /* #undef HAVE_STD_SYSLOG */ /* */ /* #undef HAVE_STMT_NEXT_RESULT */ /* Define to 1 if you have the `strcasecmp' function. */ #define HAVE_STRCASECMP 1 /* Define to 1 if you have the `strcoll' function. */ #define HAVE_STRCOLL 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 /* Define to 1 if you have the `strerror' function. */ #define HAVE_STRERROR 1 /* Define to 1 if you have the `strfmon' function. */ #define HAVE_STRFMON 1 /* Define to 1 if you have the `strftime' function. */ #define HAVE_STRFTIME 1 /* Define to 1 if you have the header file. */ #define HAVE_STRINGS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_STRING_H 1 /* Define to 1 if you have the `strlcat' function. */ /* #undef HAVE_STRLCAT */ /* Define to 1 if you have the `strlcpy' function. */ /* #undef HAVE_STRLCPY */ /* Define to 1 if you have the `strndup' function. */ #define HAVE_STRNDUP 1 /* Define to 1 if you have the `strnlen' function. */ #define HAVE_STRNLEN 1 /* Define to 1 if you have the `strpbrk' function. */ #define HAVE_STRPBRK 1 /* Define to 1 if you have the `strpncpy' function. */ /* #undef HAVE_STRPNCPY */ /* Define to 1 if you have the `strptime' function. */ #define HAVE_STRPTIME 1 /* whether strptime() declaration fails */ #define HAVE_STRPTIME_DECL_FAILS 1 /* Define to 1 if you have the `strstr' function. */ #define HAVE_STRSTR 1 /* Define to 1 if you have the `strtod' function. */ #define HAVE_STRTOD 1 /* Define to 1 if you have the `strtok_r' function. */ #define HAVE_STRTOK_R 1 /* Define to 1 if you have the `strtol' function. */ #define HAVE_STRTOL 1 /* Define to 1 if you have the `strtoll' function. */ #define HAVE_STRTOLL 1 /* Define to 1 if you have the `strtoul' function. */ #define HAVE_STRTOUL 1 /* Define to 1 if you have the `strtoull' function. */ #define HAVE_STRTOULL 1 /* whether you have struct flock */ #define HAVE_STRUCT_FLOCK 1 /* Define to 1 if `st_blksize' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLKSIZE 1 /* Define to 1 if `st_blocks' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_BLOCKS 1 /* Define to 1 if `st_rdev' is a member of `struct stat'. */ #define HAVE_STRUCT_STAT_ST_RDEV 1 /* Define to 1 if `tm_zone' is a member of `struct tm'. */ #define HAVE_STRUCT_TM_TM_ZONE 1 /* Define to 1 if your `struct stat' has `st_blocks'. Deprecated, use `HAVE_STRUCT_STAT_ST_BLOCKS' instead. */ #define HAVE_ST_BLOCKS 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_ST_H */ /* Define to 1 if you have the `symlink' function. */ #define HAVE_SYMLINK 1 /* Define if you have the __sync_fetch_and_add function */ #define HAVE_SYNC_FETCH_AND_ADD 1 /* do we have sysconf? */ /* #undef HAVE_SYSCONF */ /* Define to 1 if you have the header file. */ #define HAVE_SYSEXITS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYSLOG_H 1 /* FPM use systemd integration */ /* #undef HAVE_SYSTEMD */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYSTEMD_SD_DAEMON_H */ /* Define if system timezone data is used */ #define HAVE_SYSTEM_TZDATA 1 /* Define for location of system timezone data */ /* #undef HAVE_SYSTEM_TZDATA_PREFIX */ /* */ #define HAVE_SYSVMSG 1 /* */ #define HAVE_SYSVSEM 1 /* */ #define HAVE_SYSVSHM 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_ACL_H */ /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_DIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_FILE_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IOCTL_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_IPC_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_LOADAVG_H */ /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_MKDEV_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_MMAN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_MOUNT_H 1 /* Define to 1 if you have the header file, and it defines `DIR'. */ /* #undef HAVE_SYS_NDIR_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_PARAM_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_POLL_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_PSTAT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_RESOURCE_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SDT_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SELECT_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_SOCKET_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SOCKIO_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STATVFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_SYSEXITS_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_SYSMACROS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIMES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TIME_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UIO_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UN_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_UTSNAME_H 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_SYS_VARARGS_H */ /* Define to 1 if you have the header file. */ #define HAVE_SYS_VFS_H 1 /* Define to 1 if you have the header file. */ #define HAVE_SYS_WAIT_H 1 /* Define to 1 if you have the `tempnam' function. */ #define HAVE_TEMPNAM 1 /* Define to 1 if you have the header file. */ #define HAVE_TERMIOS_H 1 /* */ #define HAVE_TIDY 1 /* defined if tidybuffio.h exists */ #define HAVE_TIDYBUFFIO_H 1 /* */ /* #undef HAVE_TIDYOPTGETDOC */ /* defined if tidyp.h exists */ /* #undef HAVE_TIDYP_H */ /* */ /* #undef HAVE_TIDYRELEASEDATE */ /* defined if tidy.h exists */ #define HAVE_TIDY_H 1 /* Have timelib_config.h */ #define HAVE_TIMELIB_CONFIG_H 1 /* do we have times? */ /* #undef HAVE_TIMES */ /* Define to 1 if you have the header file. */ /* #undef HAVE_TIME_H */ /* Define to 1 if you have the header file. */ #define HAVE_TMMINTRIN_H 1 /* whether you have tm_gmtoff in struct tm */ #define HAVE_TM_GMTOFF 1 /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use `HAVE_STRUCT_TM_TM_ZONE' instead. */ #define HAVE_TM_ZONE 1 /* Whether you have a working ttyname_r */ #define HAVE_TTYNAME_R 1 /* Define to 1 if you don't have `tm_zone' but do have the external array `tzname'. */ /* #undef HAVE_TZNAME */ /* Define to 1 if you have the `tzset' function. */ #define HAVE_TZSET 1 /* */ /* #undef HAVE_UDBCEXT_H */ /* Define to 1 if the system has the type `uint16'. */ /* #undef HAVE_UINT16 */ /* Define to 1 if the system has the type `uint16_t'. */ #define HAVE_UINT16_T 1 /* Define to 1 if the system has the type `uint32'. */ /* #undef HAVE_UINT32 */ /* Define if uint32_t type is present. */ #define HAVE_UINT32_T 1 /* Define to 1 if the system has the type `uint64'. */ /* #undef HAVE_UINT64 */ /* Define to 1 if the system has the type `uint64_t'. */ #define HAVE_UINT64_T 1 /* Define to 1 if the system has the type `uint8'. */ /* #undef HAVE_UINT8 */ /* Define to 1 if the system has the type `uint8_t'. */ #define HAVE_UINT8_T 1 /* Define to 1 if you have the header file. */ #define HAVE_UNISTD_H 1 /* */ #define HAVE_UNIXODBC 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_UNIX_H */ /* Define to 1 if you have the `unlockpt' function. */ #define HAVE_UNLOCKPT 1 /* Define to 1 if you have the `unsetenv' function. */ #define HAVE_UNSETENV 1 /* */ #define HAVE_UODBC 1 /* Define to 1 if you have the `usleep' function. */ #define HAVE_USLEEP 1 /* Define to 1 if you have the `utime' function. */ #define HAVE_UTIME 1 /* Define to 1 if you have the `utimes' function. */ #define HAVE_UTIMES 1 /* Define to 1 if you have the header file. */ #define HAVE_UTIME_H 1 /* Define to 1 if `utime(file, NULL)' sets file's timestamp to the present. */ #define HAVE_UTIME_NULL 1 /* Whether struct utsname has domainname */ #define HAVE_UTSNAME_DOMAINNAME 1 /* Define to 1 if the system has the type `u_int16_t'. */ #define HAVE_U_INT16_T 1 /* Define to 1 if the system has the type `u_int32_t'. */ #define HAVE_U_INT32_T 1 /* Define to 1 if the system has the type `u_int64_t'. */ #define HAVE_U_INT64_T 1 /* Define to 1 if the system has the type `u_int8_t'. */ #define HAVE_U_INT8_T 1 /* */ /* #undef HAVE_VALGRIND */ /* Define to 1 if you have the `vasprintf' function. */ #define HAVE_VASPRINTF 1 /* Define to 1 if you have the `vprintf' function. */ #define HAVE_VPRINTF 1 /* Define to 1 if you have the `vsnprintf' function. */ #define HAVE_VSNPRINTF 1 /* Define to 1 if you have the `wait3' function. */ #define HAVE_WAIT3 1 /* Define to 1 if you have the `wait4' function. */ #define HAVE_WAIT4 1 /* */ #define HAVE_WAITPID 1 /* Define to 1 if you have the header file. */ #define HAVE_WCHAR_H 1 /* */ #define HAVE_WDDX 1 /* */ #define HAVE_XML 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_XMLPARSE_H */ /* */ #define HAVE_XMLREADER 1 /* */ #define HAVE_XMLRPC 1 /* */ #define HAVE_XMLRPC_BUNDLED 1 /* Define to 1 if you have the header file. */ /* #undef HAVE_XMLTOK_H */ /* */ #define HAVE_XMLWRITER 1 /* */ #define HAVE_XSL 1 /* */ #define HAVE_XSL_EXSLT 1 /* */ /* #undef HAVE_YP_GET_DEFAULT_DOMAIN */ /* */ #define HAVE_ZIP 1 /* */ #define HAVE_ZLIB 1 /* whether _controlfp is present usable */ /* #undef HAVE__CONTROLFP */ /* whether _controlfp_s is present and usable */ /* #undef HAVE__CONTROLFP_S */ /* whether _FPU_SETCW is present and usable */ #define HAVE__FPU_SETCW 1 /* iconv() is aliased to libiconv() in -liconv */ /* #undef ICONV_ALIASED_LIBICONV */ /* Whether iconv supports IGNORE */ #define ICONV_BROKEN_IGNORE 1 /* Whether iconv supports error no or not */ #define ICONV_SUPPORTS_ERRNO 1 /* */ /* #undef LMDB_INCLUDE_FILE */ /* Define to the sub-directory where libtool stores uninstalled libraries. */ #define LT_OBJDIR ".libs/" /* Whether asctime_r is declared */ /* #undef MISSING_ASCTIME_R_DECL */ /* Whether ctime_r is declared */ /* #undef MISSING_CTIME_R_DECL */ /* */ #define MISSING_FCLOSE_DECL 0 /* Whether gmtime_r is declared */ /* #undef MISSING_GMTIME_R_DECL */ /* Whether localtime_r is declared */ /* #undef MISSING_LOCALTIME_R_DECL */ /* */ /* #undef MISSING_MSGHDR_MSGFLAGS */ /* Whether strtok_r is declared */ /* #undef MISSING_STRTOK_R_DECL */ /* Whether mysqlnd is enabled */ #define MYSQLI_USE_MYSQLND 1 /* Enable compressed protocol support */ #define MYSQLND_COMPRESSION_WANTED 1 /* Enable mysqlnd code that uses OpenSSL directly */ #define MYSQLND_HAVE_SSL 1 /* Enable core mysqlnd SSL code */ #define MYSQLND_SSL_SUPPORTED 1 /* */ /* #undef NDBM_INCLUDE_FILE */ /* Define to 1 if your C compiler doesn't accept -c and -o together. */ /* #undef NO_MINUS_C_MINUS_O */ /* The highest supported ODBC version */ #define ODBCVER 0x0350 /* Define to the address where bug reports for this package should be sent. */ #define PACKAGE_BUGREPORT "" /* Define to the full name of this package. */ #define PACKAGE_NAME "" /* Define to the full name and version of this package. */ #define PACKAGE_STRING "" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "" /* Define to the home page for this package. */ #define PACKAGE_URL "" /* Define to the version of this package. */ #define PACKAGE_VERSION "" /* */ #define PCRE2_CODE_UNIT_WIDTH 8 /* */ /* #undef PDO_MYSQL_UNIX_ADDR */ /* Whether pdo_mysql uses mysqlnd */ #define PDO_USE_MYSQLND 1 /* */ #define PHAR_HASH_OK 1 /* */ /* #undef PHAR_HAVE_OPENSSL */ /* */ #define PHPDBG_DEBUG 0 /* PHP build date */ #define PHP_BUILD_DATE "2026-05-15" /* Define if your system has fork/vfork/CreateProcess */ #define PHP_CAN_SUPPORT_PROC_OPEN 1 /* fpm group name */ /* #undef PHP_FPM_GROUP */ /* fpm systemd service type */ /* #undef PHP_FPM_SYSTEMD */ /* fpm user name */ /* #undef PHP_FPM_USER */ /* Whether the compiler supports avx2 instructions */ #define PHP_HAVE_AVX2_INSTRUCTIONS 1 /* Whether the compiler supports avx instructions */ #define PHP_HAVE_AVX_INSTRUCTIONS 1 /* Whether the compiler supports __builtin_clz */ #define PHP_HAVE_BUILTIN_CLZ 1 /* Whether the compiler supports __builtin_cpu_init */ #define PHP_HAVE_BUILTIN_CPU_INIT 1 /* Whether the compiler supports __builtin_cpu_supports */ #define PHP_HAVE_BUILTIN_CPU_SUPPORTS 1 /* Whether the compiler supports __builtin_ctzl */ #define PHP_HAVE_BUILTIN_CTZL 1 /* Whether the compiler supports __builtin_ctzll */ #define PHP_HAVE_BUILTIN_CTZLL 1 /* Whether the compiler supports __builtin_expect */ #define PHP_HAVE_BUILTIN_EXPECT 1 /* Whether the compiler supports __builtin_saddll_overflow */ #define PHP_HAVE_BUILTIN_SADDLL_OVERFLOW 1 /* Whether the compiler supports __builtin_saddl_overflow */ #define PHP_HAVE_BUILTIN_SADDL_OVERFLOW 1 /* Whether the compiler supports __builtin_smulll_overflow */ #define PHP_HAVE_BUILTIN_SMULLL_OVERFLOW 1 /* Whether the compiler supports __builtin_smull_overflow */ #define PHP_HAVE_BUILTIN_SMULL_OVERFLOW 1 /* Whether the compiler supports __builtin_ssubll_overflow */ #define PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW 1 /* Whether the compiler supports __builtin_ssubl_overflow */ #define PHP_HAVE_BUILTIN_SSUBL_OVERFLOW 1 /* Whether the compiler supports sse4.2 instructions */ #define PHP_HAVE_SSE4_2_INSTRUCTIONS 1 /* Whether the compiler supports ssse3 instructions */ #define PHP_HAVE_SSSE3_INSTRUCTIONS 1 /* Checked for stdint types */ #define PHP_HAVE_STDINT_TYPES 1 /* Whether you have HP-UX 10.x */ /* #undef PHP_HPUX_TIME_R */ /* Path to iconv.h */ #define PHP_ICONV_H_PATH /* Which iconv implementation to use */ #define PHP_ICONV_IMPL "glibc" /* Whether you have IRIX-style functions */ /* #undef PHP_IRIX_TIME_R */ /* */ #define PHP_MHASH_BC 1 /* */ #define PHP_MYSQL_UNIX_SOCK_ADDR "/var/lib/mysql/mysql.sock" /* */ /* #undef PHP_OCI8_DEF_DIR */ /* */ /* #undef PHP_OCI8_DEF_SHARED_LIBADD */ /* define to 1 if oniguruma has an invalid entry for KOI8 encoding */ /* #undef PHP_ONIG_BAD_KOI8_ENTRY */ /* Define to 1 if the bundled oniguruma is used */ #define PHP_ONIG_BUNDLED 1 /* uname output */ #define PHP_OS "Linux" /* */ /* #undef PHP_PDO_OCI_CLIENT_VERSION */ /* whether pread64 is default */ /* #undef PHP_PREAD_64 */ /* whether pwrite64 is default */ /* #undef PHP_PWRITE_64 */ /* */ #define PHP_SIGCHILD 0 /* uname -a output */ #define PHP_UNAME "Linux buildfarm14-new.corp.cloudlinux.com 4.18.0-553.117.1.el8_10.x86_64 #1 SMP Sun Apr 5 23:14:32 EDT 2026 x86_64 x86_64 x86_64 GNU/Linux" /* Whether PHP has to use its own crypt_r for blowfish, des and ext des */ #define PHP_USE_PHP_CRYPT_R 1 /* whether write(2) works */ #define PHP_WRITE_STDOUT 1 /* /proc/pid/mem interface */ /* #undef PROC_MEM_FILE */ /* Whether to use Pthreads */ /* #undef PTHREADS */ /* */ /* #undef QDBM_INCLUDE_FILE */ /* The size of `char', as computed by sizeof. */ #define SIZEOF_CHAR 1 /* The size of `int', as computed by sizeof. */ #define SIZEOF_INT 4 /* Size of intmax_t */ #define SIZEOF_INTMAX_T 8 /* The size of `long', as computed by sizeof. */ #define SIZEOF_LONG 8 /* The size of `long int', as computed by sizeof. */ #define SIZEOF_LONG_INT 8 /* The size of `long long', as computed by sizeof. */ #define SIZEOF_LONG_LONG 8 /* The size of `long long int', as computed by sizeof. */ #define SIZEOF_LONG_LONG_INT 8 /* The size of `off_t', as computed by sizeof. */ #define SIZEOF_OFF_T 8 /* Size of ptrdiff_t */ #define SIZEOF_PTRDIFF_T 8 /* The size of `short', as computed by sizeof. */ #define SIZEOF_SHORT 2 /* The size of `size_t', as computed by sizeof. */ #define SIZEOF_SIZE_T 8 /* Size of ssize_t */ #define SIZEOF_SSIZE_T 8 /* have sqlite3 with column metadata enabled */ #define SQLITE_ENABLE_COLUMN_METADATA 1 /* have sqlite3 with extension support */ /* #undef SQLITE_OMIT_LOAD_EXTENSION */ /* Needed in sqlunix.h for wchar defs */ /* #undef SS_FBX */ /* Needed in sqlunix.h */ /* #undef SS_LINUX */ /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ /* #undef STACK_DIRECTION */ /* Define to 1 if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* */ #define TCADB_INCLUDE_FILE "/usr/include/tcadb.h" /* Define to 1 if you can safely include both and . */ #define TIME_WITH_SYS_TIME 1 /* Define to 1 if your declares `struct tm'. */ /* #undef TM_IN_SYS_TIME */ /* */ /* #undef TSRM_ST */ /* */ #define UNDEF_THREADS_HACK /**/ /* whether to check multibyte regex backtrack */ #define USE_COMBINATION_EXPLOSION_CHECK 1 /* */ /* #undef USE_GD_JISX0208 */ /* Define if cross-process locking is required by accept() */ /* #undef USE_LOCKING */ /* Use system default cipher list instead of hardcoded value */ /* #undef USE_OPENSSL_SYSTEM_CIPHERS */ /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # define _ALL_SOURCE 1 #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # define _POSIX_PTHREAD_SEMANTICS 1 #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # define _TANDEM_SOURCE 1 #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # define __EXTENSIONS__ 1 #endif /* Define if processor uses big-endian word */ /* #undef WORDS_BIGENDIAN */ /* Whether sprintf is broken */ #define ZEND_BROKEN_SPRINTF 0 /* */ #define ZEND_DEBUG 0 /* Define if double cast to long preserves least significant bits */ /* #undef ZEND_DVAL_TO_LVAL_CAST_OK */ /* */ #define ZEND_MM_ALIGNMENT 8 /* */ #define ZEND_MM_ALIGNMENT_LOG2 3 /* Use zend signal handling */ #define ZEND_SIGNALS 1 /* */ /* #undef ZTS */ /* Define to 1 if on MINIX. */ /* #undef _MINIX */ /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ /* #undef _POSIX_1_SOURCE */ /* Define to 1 if you need to in order for `stat' and other things to work. */ /* #undef _POSIX_SOURCE */ /* Define to empty if `const' does not conform to ANSI C. */ /* #undef const */ /* Define to `int' if doesn't define. */ /* #undef gid_t */ /* */ /* #undef in_addr_t */ /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus /* #undef inline */ #endif /* Define to `unsigned int' if does not define. */ /* #undef size_t */ /* Define to `int' if doesn't define. */ /* #undef uid_t */ /* Define to `unsigned int ' if does not define. */ /* #undef uint */ /* Define to `unsigned long ' if does not define. */ /* #undef ulong */ #ifndef ZEND_ACCONFIG_H_NO_C_PROTOS #ifdef HAVE_STDLIB_H # include #endif #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #ifdef HAVE_IEEEFP_H # include #endif #ifdef HAVE_STRING_H # include #else # include #endif #if ZEND_BROKEN_SPRINTF int zend_sprintf(char *buffer, const char *format, ...); #else # define zend_sprintf sprintf #endif #include #ifndef zend_isnan #if HAVE_DECL_ISNAN && (!defined(__cplusplus) || __cplusplus < 201103L) #define zend_isnan(a) isnan(a) #elif defined(HAVE_FPCLASS) #define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN)) #else #define zend_isnan(a) ((a) != (a)) #endif #endif #if HAVE_DECL_ISINF && (!defined(__cplusplus) || __cplusplus < 201103L) #define zend_isinf(a) isinf(a) #elif defined(INFINITY) /* Might not work, but is required by ISO C99 */ #define zend_isinf(a) (((a)==INFINITY || (a)==-INFINITY)?1:0) #elif defined(HAVE_FPCLASS) #define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF)) #else #define zend_isinf(a) 0 #endif #if HAVE_DECL_ISFINITE && (!defined(__cplusplus) || __cplusplus < 201103L) #define zend_finite(a) isfinite(a) #elif defined(HAVE_FINITE) #define zend_finite(a) finite(a) #elif defined(fpclassify) #define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0) #else #define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1) #endif #endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */ /* #undef PTHREADS */ #endif /* PHP_CONFIG_H */ PK!t&&main/snprintf.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Stig Sæther Bakken | | Marcus Boerger | +----------------------------------------------------------------------+ */ /* Comparing: sprintf, snprintf, slprintf, spprintf sprintf offers the ability to make a lot of failures since it does not know the size of the buffer it uses. Therefore usage of sprintf often results in possible entries for buffer overrun attacks. So please use this version only if you are sure the call is safe. sprintf always terminstes the buffer it writes to. snprintf knows the buffers size and will not write behind it. But you will have to use either a static buffer or allocate a dynamic buffer before being able to call the function. In other words you must be sure that you really know the maximum size of the buffer required. A bad thing is having a big maximum while in most cases you would only need a small buffer. If the size of the resulting string is longer or equal to the buffer size than the buffer is not terminated. The function also returns the number of chars not including the terminating \0 that were needed to fully comply to the print request. slprintf same as snprintf with the difference that it actually returns the length printed not including the terminating \0. spprintf is the dynamical version of snprintf. It allocates the buffer in size as needed and allows a maximum setting as snprintf (turn this feature off by setting max_len to 0). spprintf is a little bit slower than snprintf and offers possible memory leakes if you miss freeing the buffer allocated by the function. Therfore this function should be used where either no maximum is known or the maximum is much bigger than normal size required. spprintf always terminates the buffer. Example: #define MAX 1024 | #define MAX 1024 | #define MAX 1024 char buffer[MAX] | char buffer[MAX] | char *buffer; | | | | // No need to initialize buffer: | | // spprintf ignores value of buffer sprintf(buffer, "test"); | snprintf(buffer, MAX, "test"); | spprintf(&buffer, MAX, "text"); | | if (!buffer) | | return OUT_OF_MEMORY // sprintf always terminates | // manual termination of | // spprintf allays terminates buffer // buffer | // buffer *IS* required | | buffer[MAX-1] = 0; | action_with_buffer(buffer); | action_with_buffer(buffer); | action_with_buffer(buffer); | | efree(buffer); */ #ifndef SNPRINTF_H #define SNPRINTF_H typedef int bool_int; typedef enum { NO = 0, YES = 1 } boolean_e; BEGIN_EXTERN_C() PHPAPI int ap_php_slprintf(char *buf, size_t len, const char *format,...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4); PHPAPI int ap_php_vslprintf(char *buf, size_t len, const char *format, va_list ap); PHPAPI int ap_php_snprintf(char *, size_t, const char *, ...) ZEND_ATTRIBUTE_FORMAT(printf, 3, 4); PHPAPI int ap_php_vsnprintf(char *, size_t, const char *, va_list ap); PHPAPI int ap_php_vasprintf(char **buf, const char *format, va_list ap); PHPAPI int ap_php_asprintf(char **buf, const char *format, ...) ZEND_ATTRIBUTE_FORMAT(printf, 2, 3); PHPAPI int php_sprintf (char* s, const char* format, ...) PHP_ATTRIBUTE_FORMAT(printf, 2, 3); PHPAPI char * php_gcvt(double value, int ndigit, char dec_point, char exponent, char *buf); PHPAPI char * php_0cvt(double value, int ndigit, char dec_point, char exponent, char *buf); PHPAPI char * php_conv_fp(char format, double num, boolean_e add_dp, int precision, char dec_point, bool_int * is_negative, char *buf, size_t *len); END_EXTERN_C() #ifdef slprintf #undef slprintf #endif #define slprintf ap_php_slprintf #ifdef vslprintf #undef vslprintf #endif #define vslprintf ap_php_vslprintf #ifdef snprintf #undef snprintf #endif #define snprintf ap_php_snprintf #ifdef vsnprintf #undef vsnprintf #endif #define vsnprintf ap_php_vsnprintf #ifndef HAVE_VASPRINTF #define vasprintf ap_php_vasprintf #endif #ifndef HAVE_ASPRINTF #define asprintf ap_php_asprintf #endif #ifdef sprintf #undef sprintf #endif #define sprintf php_sprintf typedef enum { LM_STD = 0, #if SIZEOF_INTMAX_T LM_INTMAX_T, #endif #if SIZEOF_PTRDIFF_T LM_PTRDIFF_T, #endif #if SIZEOF_LONG_LONG LM_LONG_LONG, #endif LM_SIZE_T, LM_LONG, LM_LONG_DOUBLE, LM_PHP_INT_T } length_modifier_e; #ifdef PHP_WIN32 # define WIDE_INT __int64 #elif SIZEOF_LONG_LONG_INT # define WIDE_INT long long int #elif SIZEOF_LONG_LONG # define WIDE_INT long long #else # define WIDE_INT long #endif typedef WIDE_INT wide_int; typedef unsigned WIDE_INT u_wide_int; PHPAPI char * ap_php_conv_10(wide_int num, bool_int is_unsigned, bool_int * is_negative, char *buf_end, size_t *len); PHPAPI char * ap_php_conv_p2(u_wide_int num, int nbits, char format, char *buf_end, size_t *len); /* The maximum precision that's allowed for float conversion. Does not include * decimal separator, exponent, sign, terminator. Currently does not affect * the modes e/f, only g/k/H, as those have a different limit enforced at * another level (see NDIG in php_conv_fp()). * Applies to the formatting functions of both spprintf.c and snprintf.c, which * use equally sized buffers of MAX_BUF_SIZE = 512 to hold the result of the * call to php_gcvt(). * This should be reasonably smaller than MAX_BUF_SIZE (I think MAX_BUF_SIZE - 9 * should be enough, but let's give some more space) */ #define FORMAT_CONV_MAX_PRECISION 500 #endif /* SNPRINTF_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!/ main/rfc1867.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: | +----------------------------------------------------------------------+ */ #ifndef RFC1867_H #define RFC1867_H #include "SAPI.h" #define MULTIPART_CONTENT_TYPE "multipart/form-data" #define MULTIPART_EVENT_START 0 #define MULTIPART_EVENT_FORMDATA 1 #define MULTIPART_EVENT_FILE_START 2 #define MULTIPART_EVENT_FILE_DATA 3 #define MULTIPART_EVENT_FILE_END 4 #define MULTIPART_EVENT_END 5 typedef struct _multipart_event_start { size_t content_length; } multipart_event_start; typedef struct _multipart_event_formdata { size_t post_bytes_processed; char *name; char **value; size_t length; size_t *newlength; } multipart_event_formdata; typedef struct _multipart_event_file_start { size_t post_bytes_processed; char *name; char **filename; } multipart_event_file_start; typedef struct _multipart_event_file_data { size_t post_bytes_processed; zend_off_t offset; char *data; size_t length; size_t *newlength; } multipart_event_file_data; typedef struct _multipart_event_file_end { size_t post_bytes_processed; char *temp_filename; int cancel_upload; } multipart_event_file_end; typedef struct _multipart_event_end { size_t post_bytes_processed; } multipart_event_end; typedef int (*php_rfc1867_encoding_translation_t)(void); typedef void (*php_rfc1867_get_detect_order_t)(const zend_encoding ***list, size_t *list_size); typedef void (*php_rfc1867_set_input_encoding_t)(const zend_encoding *encoding); typedef char* (*php_rfc1867_getword_t)(const zend_encoding *encoding, char **line, char stop); typedef char* (*php_rfc1867_getword_conf_t)(const zend_encoding *encoding, char *str); typedef char* (*php_rfc1867_basename_t)(const zend_encoding *encoding, char *str); SAPI_API SAPI_POST_HANDLER_FUNC(rfc1867_post_handler); PHPAPI void destroy_uploaded_files_hash(void); void php_rfc1867_register_constants(void); extern PHPAPI int (*php_rfc1867_callback)(unsigned int event, void *event_data, void **extra); SAPI_API void php_rfc1867_set_multibyte_callbacks( php_rfc1867_encoding_translation_t encoding_translation, php_rfc1867_get_detect_order_t get_detect_order, php_rfc1867_set_input_encoding_t set_input_encoding, php_rfc1867_getword_t getword, php_rfc1867_getword_conf_t getword_conf, php_rfc1867_basename_t basename); #endif /* RFC1867_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!1main/spprintf.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef SPPRINTF_H #define SPPRINTF_H #include "snprintf.h" #include "zend_smart_str_public.h" #include "zend_smart_string_public.h" BEGIN_EXTERN_C() PHPAPI void php_printf_to_smart_string(smart_string *buf, const char *format, va_list ap); PHPAPI void php_printf_to_smart_str(smart_str *buf, const char *format, va_list ap); END_EXTERN_C() #define spprintf zend_spprintf #define strpprintf zend_strpprintf #define vspprintf zend_vspprintf #define vstrpprintf zend_vstrpprintf #endif /* SNPRINTF_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!7 44main/php_memory_streams.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Marcus Boerger | +----------------------------------------------------------------------+ */ #ifndef PHP_MEMORY_STREAM_H #define PHP_MEMORY_STREAM_H #include "php_streams.h" #define PHP_STREAM_MAX_MEM 2 * 1024 * 1024 #define TEMP_STREAM_DEFAULT 0x0 #define TEMP_STREAM_READONLY 0x1 #define TEMP_STREAM_TAKE_BUFFER 0x2 #define TEMP_STREAM_APPEND 0x4 #define php_stream_memory_create(mode) _php_stream_memory_create((mode) STREAMS_CC) #define php_stream_memory_create_rel(mode) _php_stream_memory_create((mode) STREAMS_REL_CC) #define php_stream_memory_open(mode, buf, length) _php_stream_memory_open((mode), (buf), (length) STREAMS_CC) #define php_stream_memory_get_buffer(stream, length) _php_stream_memory_get_buffer((stream), (length) STREAMS_CC) #define php_stream_temp_new() php_stream_temp_create(TEMP_STREAM_DEFAULT, PHP_STREAM_MAX_MEM) #define php_stream_temp_create(mode, max_memory_usage) _php_stream_temp_create((mode), (max_memory_usage) STREAMS_CC) #define php_stream_temp_create_ex(mode, max_memory_usage, tmpdir) _php_stream_temp_create_ex((mode), (max_memory_usage), (tmpdir) STREAMS_CC) #define php_stream_temp_create_rel(mode, max_memory_usage) _php_stream_temp_create((mode), (max_memory_usage) STREAMS_REL_CC) #define php_stream_temp_open(mode, max_memory_usage, buf, length) _php_stream_temp_open((mode), (max_memory_usage), (buf), (length) STREAMS_CC) BEGIN_EXTERN_C() PHPAPI php_stream *_php_stream_memory_create(int mode STREAMS_DC); PHPAPI php_stream *_php_stream_memory_open(int mode, char *buf, size_t length STREAMS_DC); PHPAPI char *_php_stream_memory_get_buffer(php_stream *stream, size_t *length STREAMS_DC); PHPAPI php_stream *_php_stream_temp_create(int mode, size_t max_memory_usage STREAMS_DC); PHPAPI php_stream *_php_stream_temp_create_ex(int mode, size_t max_memory_usage, const char *tmpdir STREAMS_DC); PHPAPI php_stream *_php_stream_temp_open(int mode, size_t max_memory_usage, char *buf, size_t length STREAMS_DC); PHPAPI int php_stream_mode_from_str(const char *mode); PHPAPI const char *_php_stream_mode_to_str(int mode); END_EXTERN_C() extern PHPAPI const php_stream_ops php_stream_memory_ops; extern PHPAPI const php_stream_ops php_stream_temp_ops; extern PHPAPI const php_stream_ops php_stream_rfc2397_ops; extern PHPAPI const php_stream_wrapper php_stream_rfc2397_wrapper; #define PHP_STREAM_IS_MEMORY &php_stream_memory_ops #define PHP_STREAM_IS_TEMP &php_stream_temp_ops #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!!#umain/php_stdint.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Michael Wallner | +----------------------------------------------------------------------+ */ #ifndef PHP_STDINT_H #define PHP_STDINT_H /* C99 requires these for C++ to get the definitions * of INT64_MAX and other macros used by Zend/zend_long.h * C11 drops this requirement, so these effectively * just backport that piece of behavior. * * These defines are placed here instead of * with the include below, because sys/types * and inttypes may include stdint themselves. * And these definitions MUST come first. */ #ifdef __cplusplus # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS # endif # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS # endif # ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS # endif #endif #if defined(_MSC_VER) /* Make sure the regular stdint.h wasn't included already and prevent it to be included afterwards. Though if some other library needs some stuff from stdint.h included afterwards and misses it, we'd have to extend ours. On the other hand, if stdint.h was included before, some conflicts might happen so we'd likewise have to fix ours. */ # if !defined(_STDINT) # define _STDINT # include "win32/php_stdint.h" # include "win32/php_inttypes.h" # endif # define HAVE_INT8_T 1 # define HAVE_UINT8_T 1 # define HAVE_INT16_T 1 # define HAVE_UINT16_T 1 # define HAVE_INT32_T 1 # define HAVE_UINT32_T 1 # define HAVE_INT64_T 1 # define HAVE_UINT64_T 1 #else #include "php_config.h" #if HAVE_SYS_TYPES_H # include #endif #if HAVE_INTTYPES_H # include #endif #if HAVE_STDINT_H # include #endif #ifndef HAVE_INT8_T # ifdef HAVE_INT8 typedef int8 int8_t; # else typedef signed char int8_t; # endif #endif #ifndef INT8_C # define INT8_C(c) c #endif #ifndef HAVE_UINT8_T # ifdef HAVE_UINT8 typedef uint8 uint8_t # elif HAVE_U_INT8_T typedef u_int8_t uint8_t; # else typedef unsigned char uint8_t; # endif #endif #ifndef UINT8_C # define UINT8_C(c) c #endif #ifndef HAVE_INT16_T # ifdef HAVE_INT16 typedef int16 int16_t; # elif SIZEOF_SHORT >= 2 typedef signed short int16_t; # else # error "No suitable 16bit integer type found" # endif #endif #ifndef INT16_C # define INT16_C(c) c #endif #ifndef HAVE_UINT16_T # ifdef HAVE_UINT16 typedef uint16 uint16_t # elif HAVE_U_INT16_T typedef u_int16_t uint16_t; # elif SIZEOF_SHORT >= 2 typedef unsigned short uint16_t; # else # error "No suitable 16bit integer type found" # endif #endif #ifndef UINT16_C # define UINT16_C(c) c #endif #ifndef HAVE_INT32_T # ifdef HAVE_INT32 typedef int32 int32_t; # elif SIZEOF_INT >= 4 typedef int int32_t; # elif SIZEOF_LONG >= 4 typedef long int32_t; # else # error "No suitable 32bit integer type found" # endif #endif #ifndef INT32_C # define INT32_C(c) c #endif #ifndef HAVE_UINT32_T # ifdef HAVE_UINT32 typedef uint32 uint32_t # elif HAVE_U_INT32_T typedef u_int32_t uint32_t; # elif SIZEOF_INT >= 4 typedef unsigned int uint32_t; # elif SIZEOF_LONG >= 4 typedef unsigned long uint32_t; # else # error "No suitable 32bit integer type found" # endif #endif #ifndef UINT32_C # define UINT32_C(c) c ## U #endif #ifndef HAVE_INT64_T # ifdef HAVE_INT64 typedef int64 int64_t; # elif SIZEOF_INT >= 8 typedef int int64_t; # elif SIZEOF_LONG >= 8 typedef long int64_t; # elif SIZEOF_LONG_LONG >= 8 typedef long long int64_t; # else # error "No suitable 64bit integer type found" # endif #endif #ifndef INT64_C # if SIZEOF_INT >= 8 # define INT64_C(c) c # elif SIZEOF_LONG >= 8 # define INT64_C(c) c ## L # elif SIZEOF_LONG_LONG >= 8 # define INT64_C(c) c ## LL # endif #endif #ifndef HAVE_UINT64_T # ifdef HAVE_UINT64 typedef uint64 uint64_t # elif HAVE_U_INT64_T typedef u_int64_t uint64_t; # elif SIZEOF_INT >= 8 typedef unsigned int uint64_t; # elif SIZEOF_LONG >= 8 typedef unsigned long uint64_t; # elif SIZEOF_LONG_LONG >= 8 typedef unsigned long long uint64_t; # else # error "No suitable 64bit integer type found" # endif #endif #ifndef UINT64_C # if SIZEOF_INT >= 8 # define UINT64_C(c) c ## U # elif SIZEOF_LONG >= 8 # define UINT64_C(c) c ## UL # elif SIZEOF_LONG_LONG >= 8 # define UINT64_C(c) c ## ULL # endif #endif #endif /* !PHP_WIN32 */ #endif /* PHP_STDINT_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!4: TSRM/tsrm_config.hnu[#include <../main/php_config.h> PK!YllTSRM/tsrm_config_common.hnu[#ifndef TSRM_CONFIG_COMMON_H #define TSRM_CONFIG_COMMON_H #ifndef __CYGWIN__ # ifdef _WIN32 # define TSRM_WIN32 # endif #endif #ifdef TSRM_WIN32 # include "tsrm_config.w32.h" #else # include # include #endif #if HAVE_ALLOCA_H && !defined(_ALLOCA_H) # include #endif /* AIX requires this to be the first thing in the file. */ #ifndef __GNUC__ # ifndef HAVE_ALLOCA_H # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif #endif #if HAVE_UNISTD_H #include #endif #if HAVE_LIMITS_H #include #endif #ifndef MAXPATHLEN # if _WIN32 # include "win32/ioutil.h" # define MAXPATHLEN PHP_WIN32_IOUTIL_MAXPATHLEN # elif PATH_MAX # define MAXPATHLEN PATH_MAX # elif defined(MAX_PATH) # define MAXPATHLEN MAX_PATH # else # define MAXPATHLEN 256 # endif #endif #if (HAVE_ALLOCA || (defined (__GNUC__) && __GNUC__ >= 2)) # define TSRM_ALLOCA_MAX_SIZE 4096 # define TSRM_ALLOCA_FLAG(name) \ int name; # define tsrm_do_alloca_ex(size, limit, use_heap) \ ((use_heap = ((size) > (limit))) ? malloc(size) : alloca(size)) # define tsrm_do_alloca(size, use_heap) \ tsrm_do_alloca_ex(size, TSRM_ALLOCA_MAX_SIZE, use_heap) # define tsrm_free_alloca(p, use_heap) \ do { if (use_heap) free(p); } while (0) #else # define TSRM_ALLOCA_FLAG(name) # define tsrm_do_alloca(p, use_heap) malloc(p) # define tsrm_free_alloca(p, use_heap) free(p) #endif #endif /* TSRM_CONFIG_COMMON_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!C TSRM/readdir.hnu[/* Keep this header for compatibility with external code, it's currently not used anywhere in the core and there are no implementations in TSRM. */ #include "win32/readdir.h" PK!JTSRM/tsrm_strtok_r.hnu[#ifndef TSRM_STRTOK_R #define TSRM_STRTOK_R #include "TSRM.h" TSRM_API char *tsrm_strtok_r(char *s, const char *delim, char **last); #endif PK!Kcdd TSRM/TSRM.hnu[/* +----------------------------------------------------------------------+ | Thread Safe Resource Manager | +----------------------------------------------------------------------+ | Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski | | This source file is subject to the TSRM license, that is bundled | | with this package in the file LICENSE | +----------------------------------------------------------------------+ | Authors: Zeev Suraski | +----------------------------------------------------------------------+ */ #ifndef TSRM_H #define TSRM_H #if !defined(__CYGWIN__) && defined(WIN32) # define TSRM_WIN32 # include "tsrm_config.w32.h" #else # include #endif #include "main/php_stdint.h" #ifdef TSRM_WIN32 # ifdef TSRM_EXPORTS # define TSRM_API __declspec(dllexport) # else # define TSRM_API __declspec(dllimport) # endif #elif defined(__GNUC__) && __GNUC__ >= 4 # define TSRM_API __attribute__ ((visibility("default"))) #else # define TSRM_API #endif typedef intptr_t tsrm_intptr_t; typedef uintptr_t tsrm_uintptr_t; /* Only compile multi-threading functions if we're in ZTS mode */ #ifdef ZTS #ifdef TSRM_WIN32 # ifndef TSRM_INCLUDE_FULL_WINDOWS_HEADERS # define WIN32_LEAN_AND_MEAN # endif # include # include #elif defined(GNUPTH) # include #elif defined(PTHREADS) # include #elif defined(TSRM_ST) # include #elif defined(BETHREADS) #include #include #endif typedef int ts_rsrc_id; /* Define THREAD_T and MUTEX_T */ #ifdef TSRM_WIN32 # define THREAD_T DWORD # define MUTEX_T CRITICAL_SECTION * #elif defined(GNUPTH) # define THREAD_T pth_t # define MUTEX_T pth_mutex_t * #elif defined(PTHREADS) # define THREAD_T pthread_t # define MUTEX_T pthread_mutex_t * #elif defined(TSRM_ST) # define THREAD_T st_thread_t # define MUTEX_T st_mutex_t #endif #ifdef HAVE_SIGNAL_H #include #endif typedef void (*ts_allocate_ctor)(void *); typedef void (*ts_allocate_dtor)(void *); #define THREAD_HASH_OF(thr,ts) (unsigned long)thr%(unsigned long)ts #ifdef __cplusplus extern "C" { #endif /* startup/shutdown */ TSRM_API int tsrm_startup(int expected_threads, int expected_resources, int debug_level, char *debug_filename); TSRM_API void tsrm_shutdown(void); /* allocates a new thread-safe-resource id */ TSRM_API ts_rsrc_id ts_allocate_id(ts_rsrc_id *rsrc_id, size_t size, ts_allocate_ctor ctor, ts_allocate_dtor dtor); /* fetches the requested resource for the current thread */ TSRM_API void *ts_resource_ex(ts_rsrc_id id, THREAD_T *th_id); #define ts_resource(id) ts_resource_ex(id, NULL) /* frees all resources allocated for the current thread */ TSRM_API void ts_free_thread(void); /* frees all resources allocated for all threads except current */ void ts_free_worker_threads(void); /* deallocates all occurrences of a given id */ TSRM_API void ts_free_id(ts_rsrc_id id); /* Debug support */ #define TSRM_ERROR_LEVEL_ERROR 1 #define TSRM_ERROR_LEVEL_CORE 2 #define TSRM_ERROR_LEVEL_INFO 3 typedef void (*tsrm_thread_begin_func_t)(THREAD_T thread_id); typedef void (*tsrm_thread_end_func_t)(THREAD_T thread_id); typedef void (*tsrm_shutdown_func_t)(void); TSRM_API int tsrm_error(int level, const char *format, ...); TSRM_API void tsrm_error_set(int level, char *debug_filename); /* utility functions */ TSRM_API THREAD_T tsrm_thread_id(void); TSRM_API MUTEX_T tsrm_mutex_alloc(void); TSRM_API void tsrm_mutex_free(MUTEX_T mutexp); TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp); TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp); #ifdef HAVE_SIGPROCMASK TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset); #endif TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler); TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler); TSRM_API void *tsrm_set_shutdown_handler(tsrm_shutdown_func_t shutdown_handler); /* these 3 APIs should only be used by people that fully understand the threading model * used by PHP/Zend and the selected SAPI. */ TSRM_API void *tsrm_new_interpreter_context(void); TSRM_API void *tsrm_set_interpreter_context(void *new_ctx); TSRM_API void tsrm_free_interpreter_context(void *context); TSRM_API void *tsrm_get_ls_cache(void); TSRM_API uint8_t tsrm_is_main_thread(void); TSRM_API const char *tsrm_api_name(void); #if defined(__cplusplus) && __cplusplus > 199711L # define TSRM_TLS thread_local #else # ifdef TSRM_WIN32 # define TSRM_TLS __declspec(thread) # else # define TSRM_TLS __thread # endif #endif #define TSRM_SHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)+1) #define TSRM_UNSHUFFLE_RSRC_ID(rsrc_id) ((rsrc_id)-1) #define TSRMLS_FETCH_FROM_CTX(ctx) void ***tsrm_ls = (void ***) ctx #define TSRMLS_SET_CTX(ctx) ctx = (void ***) tsrm_get_ls_cache() #define TSRMG(id, type, element) (TSRMG_BULK(id, type)->element) #define TSRMG_BULK(id, type) ((type) (*((void ***) tsrm_get_ls_cache()))[TSRM_UNSHUFFLE_RSRC_ID(id)]) #define TSRMG_STATIC(id, type, element) (TSRMG_BULK_STATIC(id, type)->element) #define TSRMG_BULK_STATIC(id, type) ((type) (*((void ***) TSRMLS_CACHE))[TSRM_UNSHUFFLE_RSRC_ID(id)]) #define TSRMLS_CACHE_EXTERN() extern TSRM_TLS void *TSRMLS_CACHE; #define TSRMLS_CACHE_DEFINE() TSRM_TLS void *TSRMLS_CACHE = NULL; #define TSRMLS_CACHE_UPDATE() TSRMLS_CACHE = tsrm_get_ls_cache() #define TSRMLS_CACHE _tsrm_ls_cache /* BC only */ #define TSRMLS_D void #define TSRMLS_DC #define TSRMLS_C #define TSRMLS_CC #define TSRMLS_FETCH() #ifdef __cplusplus } #endif #else /* non ZTS */ #define TSRMLS_FETCH() #define TSRMLS_FETCH_FROM_CTX(ctx) #define TSRMLS_SET_CTX(ctx) #define TSRMG_STATIC(id, type, element) #define TSRMLS_CACHE_EXTERN() #define TSRMLS_CACHE_DEFINE() #define TSRMLS_CACHE_UPDATE() #define TSRMLS_CACHE #define TSRM_TLS /* BC only */ #define TSRMLS_D void #define TSRMLS_DC #define TSRMLS_C #define TSRMLS_CC #endif /* ZTS */ #endif /* TSRM_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */ PK!ع^^sapi/cli/cli.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Johannes Schlueter | +----------------------------------------------------------------------+ */ #ifndef CLI_H #define CLI_H #ifdef PHP_WIN32 # define PHP_CLI_API __declspec(dllexport) #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_CLI_API __attribute__ ((visibility("default"))) #else # define PHP_CLI_API #endif extern PHP_CLI_API ssize_t sapi_cli_single_write(const char *str, size_t str_length); typedef struct { size_t (*cli_shell_write)(const char *str, size_t str_length); size_t (*cli_shell_ub_write)(const char *str, size_t str_length); int (*cli_shell_run)(void); } cli_shell_callbacks_t; extern PHP_CLI_API cli_shell_callbacks_t *php_cli_get_shell_callbacks(); #endif /* CLI_H */ /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: noet sw=4 ts=4 fdm=marker * vim<600: noet sw=4 ts=4 */ PK!'wmodules/wddx.sonuȯELF>%@@@8 @nn xx x   H{H{ H{ 888$$mmm Stdmmm PtdeeeQtdRtdxx x ppGNUev%]Sfv+ wQ@ QTBE| pqX9W6 unESSw0[ \H7s k uU 7O~JUc4, [ F"  J `;  __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_efreezend_register_list_destructors_exphp_session_register_serializerphp_info_print_table_startphp_info_print_table_headerphp_info_print_table_rowphp_info_print_table_endmemcpyphp_parse_dateconvert_scalar_to_number_zval_ptr_dtor_safe_emalloc_zval_dtor_funczend_empty_stringphp_base64_decode_exzend_str_tolowerexecutor_globalszend_hash_findbasic_globals_object_init_exzval_add_ref_zend_hash_mergestrlen_zend_hash_str_update_emalloc_40_call_user_function_ex_zend_handle_numeric_str_ex_zend_hash_index_update_zend_hash_next_index_insertzend_update_propertystrcmp__stack_chk_failphp_store_class_namephp_error_docref0_emalloc_32_estrdupstrtolap_php_snprintf_array_init_estrndupadd_assoc_zval_exmemchrzend_hash_str_findget_modulephp_escape_html_entitiessmart_str_erealloczend_parse_parameters_ecalloczend_register_resourcezend_fetch_resourcezend_list_close_zval_get_string_funcstrchrzend_long_to_strzend_throw_errorzend_unmangle_property_name_exphp_lookup_class_name_emalloc_48zend_rebuild_symbol_table_convert_to_stringphp_XML_ParserCreatephp_XML_SetUserDataphp_XML_SetElementHandlerphp_XML_SetCharacterDataHandlerphp_XML_Parsephp_XML_ParserFreephp_set_session_varphp_add_session_varphp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_ex_php_stream_copy_to_memps_globalsphp_get_session_varlibc.so.6_edata__bss_startwddx.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64ii ui x p'x 0'x x x \cx ^x { x qcx _x z y cy >y z y c(y @0y @z @y cHy WPy y `y chy [py y y cy cz cXz cz cz c{ ^b0{ c a( x 0 'P 0(X Ec Lc   " # 1 G I J N`} h} p} x} } } } }  }  }  }  }  } } } } } } } } ~ ~ ~ ~  ~ (~ 0~ 8~ @~ H~  P~ !X~ $`~ %h~ &p~ 'x~ (~ )~ *~ +~ ,~ -~ .~ /~ 0~ 2~ 3~ 4~ 5~ 6~ 7~ 8~ 9 : ; < =  >( ?0 @8 A@ BH CP DX E` Fh Hp Kx L M N O PHHb HtH5z` %{` hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGq%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%[ D%}[ D%u[ D%m[ D%e[ D%][ D%U[ D%M[ D%E[ D%=[ D%5[ D%-[ D%%[ D%[ D%[ D% [ D%[ D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%Z D%}Z D%uZ D%mZ D%eZ D%]Z D%UZ D%MZ D%EZ D%=Z D%5Z D%-Z D%%Z D%Z D%Z D% Z D%Z D%Y D%Y D%Y D%Y D%Y D%Y D%Y D%Y D%Y D% % H5>11H>11C,H>IM11%AUC*Am8*Lt &*U*YH<[]1A\1A]A^A_H>115L11b7H=Y HY H9tHX Ht H=Y H5Y H)HHH?HHtHX HtfD=mY u+UH=X Ht H=NQ YdEY ]wSH_H;HtWtHHCH[fD/u݃tfH1H9H=H2H5S5H=9X 1Hf.HSH9H591Hw9H591HfDHcu@uBAWAVAUATUSHHOLdA|$ AD$H ;HHcH>fDM4$HcIFHL,I} HAFA>HLLhIHHH@M<$H)IOHHH4I$HPDH[]A\A]A^A_HcH{ HA|$HHIHIEMuIELI]AD1LUAD$I$HAUiAm^LH[]A\A]A^A_ffDHcH{ H HHIHI]I}IEIE$ADLM,$AD$H[]A\A]A^A_+H=n7t1H=\7HAD$DAD${fLH{ H[HHIHIEI}IEI]_ADM,$AD$ I$HLpLIIHMuMuIELIEI$HPHpI$HHHxLIEADAD$ I$*I<$fM,$AEteAD$KIvIHIIOIGHMoIFHPGHAFA.AEAD$L5I|$HtFID$AD$H[]A\A]A^A_ff.AWAVAUATUSH8Hc/dH %(HL$(1ɅHH=!5H€)HKHcLdAT$gHƹH=5uUL-R I<$I;}Hw1HLH6HuI,$E<ҁAT$HSHH\CPL+<t IEHPxIIl$HH=U4HDsA|${I$HpHj{`AVHxUI$L5zQ H@II4$bH~H0H?Q E1H9 tH)E1HHl$HGIPHD$L3HH@PxHP 1LHE|HD$HT$CHLfDH=2H€H=2H€H=2H€zH=2H€[H=~2H€< H=f2H€H=Q2H€ H=92H€H=22H€H{HoHCHD$(dH3%(H8[]A\A]A^A_Du{CDHIAcE<9LLHL6I|$LfLIEAD$I$DL+FfDHl$IE1H@E11HHH@LH0H__wakeupHpL@ H$D$LHDLLHHrHuHt$ HI@H{HtH}HC$HD$8@HL|$HL$1LHHMtJLLLD$L)HH$1LIH$HLLLD$LM`M,LM)LLIHuM9Lt$1LLLLHnHcHSLDAx1HHI8HHHP HH@HT$ D$(ff.fHD @AUIATIUSHHHH}HPHjH;opfo)HD'>Hion='1.0HHfpHHhME11LLoHHHHPLbL;cH
HtHL`HHdHPLb L;cXHDLmHHL`HHUHHHL$ L;cH|LHL`HHHPLb L;cHfHHL`HHGHPLb L;c;HHL`Uu mHH|HPHjH;kssHDa>HHhHHuHHMHHPvHEf.ALHHHPHHHHPy@A LHHHPA LHHHPNILHHT$HHT$HH@A LHgHHP HHHHHP@Iff.ATUHH5A$SH ,dH%(HD$1HL$HT$HD$HD$vti"HT$Ht$HH HHt]HPLbL;csUH5#A HHLHL`cE HEHD$dH3%(u*H []A\ALH7HHPifUSHHHHtsHPHjH;osjHDtaHHhHHt^HPHj H;ksUHHHhH[]DHHHHP HHhHHPff.@ATUHH5!SH,dH%(HD$1HH$? H5!H8]HHHHHPLb L;cHDHHHL`HHt HPDHHE@t0EH$H8-HD$dH3%(uFH[]A\@E@A LH?HHP`EbfAWAVIAUATIUSHH(dH%(H$1HHrE1Hz1HH@HxHMHo IHELHp1LH IHHAML;CH|LLL$HL$LL@UumuHAF<uM6AF< <H5!HcH>HHHPHjH;kHHtHHhI>HwH<HHHPHj H;kHHHhMt9HHHPHjH;kHDr>HHhfD1<H@L-H<HLDHHPL4*L;sHDIUHpHHILHLH)LH)1H< H<9rHLp}DIH$@ <H4$IFt F M.AMIEHHH9t31fxtHx?H9P5HH H9uL|$AM1H@LL6UH!%tDHUHD@HHL)HcHHHT H;SSHttAHHPImEmIIL9E1LL|$[H_LHHH1^Uu m,LHt.LUH!%tDHUHD@HHL)HHPLlL;kHT zt&AALfLHLh?ILHL$H L$HAfDHHpHHP@ILp@AHH6HPHjH;k)HAH|HHhImEmIIL9u'DHUHt/HHH I9tc}tL9tEu1H}HHHHD$HD$Hu(uHmfDEtSHHHPHj H;kHHHhH$@h HH.HPHjH;k!HHtHHhf.HD$HzLHHILHLH)LH)HHLh5DKnfDHf.1HE1HHPLpHHHHL, L;kH|LHLhUgm]HhG HHHHPF@HHHHP@ILHHHP\fDHHHHP@ILHbHHP[fDHD$H~HHILHLH)HLH)HI*HHHHPf{HHHHP HHHHPYHHHHT$HHT$HHILHH$xHH$HH4AALLHAALLH_ALfLHJT@AWAVAUATUHSHHH3 dH%(H$1HH@H; {LhAEHHKHT$pE11@__slAHHH0eefpH@H@@p@HD$`HD$`HD$hHT$(HD$0HH{HPLbL;coL$H 9HHtHLǾHLD$L`1LD$MA$I!%tDIT$LDHIM)HHHM< L;{HtDAALxHHHPLbL;cHM}HLHL`HIUHHHL$ L;cH|LJHL`HHHPLb L;c{HHL`HH HPLbL;cHDr>HvAVuA.uLtdfI L9l$teA}tI}L9tHLI}CLHIHANuA.uLuI L9l$uf.Ll$8HHHPHj H;kHHHhAUuAmuL#fDH|$0H|$(H$dH3%(HĘ[]A\A]A^A_D$xtLd$p<t<uHD$pH|$(H@PxIMeHHHHLyL;{L$HHHtHLǾH LD$Lx1LD$L‹ H!%tDHJHDщHHL)HHHL< L;{HtуbytA|HLxHH6HHLyL;{*HMEHtHLxHIUHHpL<2L;{H|0L@HLxHHHHLy L;{ HDHHLxHHHHLyL;{HDr>H+fDAtډALfLH HIHaGfossIHIEIEIEAEAE(_ClafA},AE.D HHHHP@MLHLD$HLD$HH;@ALHHHPzALHoHHPALHOHHP A LH/HHPnILHHT$ HHT$HH@H$H~HHILHLHLH)H)HAALLHcA LHHHHALHzHHHILHLD$HT$VHLD$HT$HHALH/HHHILHLD$HT$ HLD$HT$HpALHHHHAADDHADfDHtf.AWIAVAUIATUSHDfAAD$<wOL6AIFHPxIAnI^HHAE u4H9t{t HLH H9uH[]A\A]A^A_fDH9tCtAt-< HLJH H9uH[]A\A]A^A_fAF { t}HLAn IuH_HqxuHIUHLH[]A\A]A^A_PA~  HLHpb@HLHpz@ATUHH5% SH0,dH%(HD$(1HL$HT$ HD$LD$tL5mHtI$HXH! H0H@DhHXIIL9t=f{t,HkHKHHHtHHLH I9uI$HHPHZ I;\$s~HDLHI$HXI$Ht HCDI$CuLlH[]A\A]A^ûHL`I$HP HL@I$HPjUHH5RSH(,dH%(HD$1HL$HLD$HD$HD$tj1HT$Ht$HHH4$1HHHHt HBDHHUBu0EHfHD$dH3%(uH([]Ef.ATUHH56SH0,dH%(HD$(1HL$HT$ HD$ )G11HH8HHLHPLbL9c@HHLHL`D$E1WHID9d$~=LHHt$ F< u HHp@<vHHt$Ht$HHHPLb L;cHDHHHL`HHt HPDHHE@u/EHHD$(dH3%(uZH0[]A\@EA LHHHPaALHoHHPHHwddxenabledWDDX SupportWDDX Session SerializertruefalsestringnumberbooleannullarraystructrecordsetbinarydateTimephp_class_namevarfieldwddxPacketcharcode%cfieldNamesWDDX packet ID%srecursion detectedr+UTF-8zstreamSkipping numeric key %ldz|s7.2.34API20170718,NTSwddx_serialize_valuewddx_serialize_varswddx_packet_startwddx_packet_endwddx_add_varswddx_deserializepacketpacket_idvar_namescommentmm4mmmz c@@z cWy c[y cccccc^bc  ax x o`  L H}   ooooo#H{  0@P`p 0@P`p 0@P`p  0 @ P ` p !! !0!@!P!3ax '0(EcLcGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1a GA$3p1113%aGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY'aGA+GLIBCXX_ASSERTIONS ' a% &9 &Q %j & & & & & ' '7 'WP 'o &(  &( z( z( , ($( % E ,i 3 ,e %  3 3 3l, 3Q S;t 3 S; l; l; > >) ?L ?o @ @ A A K Lf 8 %V K fV &h fV W pVl p& 0 WQ Xp X Z Z [ [& \H &e \ \ \ W] W] ^5 &R ^z _ _ a{ H z 0% z 0B @z 0Z y Hp y 0  &  &  0'   x  p' x  m#  0(J0  A G  X_  `]}t  p;r  ZR  @.  a  _  W  >  ^ x  x .  \C  'FS  [h H{ q  ]W  e  H}  ?a 8`    `! % aaefmx x x H{ H}   `    / > T p           2 B V j        !9Mb q~ =Qd~   `; 8O [gz 1CWh ".annobin_wddx.c.annobin_wddx.c_end.annobin_wddx.c.hot.annobin_wddx.c_end.hot.annobin_wddx.c.unlikely.annobin_wddx.c_end.unlikely.annobin_wddx.c.startup.annobin_wddx.c_end.startup.annobin_wddx.c.exit.annobin_wddx.c_end.exit.annobin_release_wddx_packet_rsrc.start.annobin_release_wddx_packet_rsrc.endrelease_wddx_packet_rsrc.annobin_zm_startup_wddx.start.annobin_zm_startup_wddx.endle_wddx.annobin_zm_info_wddx.start.annobin_zm_info_wddx.end.annobin_php_wddx_process_data.start.annobin_php_wddx_process_data.endphp_wddx_process_dataphp_wddx_process_data.cold.7.annobin_php_wddx_pop_element.start.annobin_php_wddx_pop_element.endphp_wddx_pop_elementphp_wddx_pop_element.cold.8.annobin_wddx_stack_push.constprop.6.start.annobin_wddx_stack_push.constprop.6.endwddx_stack_push.constprop.6.annobin_php_wddx_push_element.start.annobin_php_wddx_push_element.endphp_wddx_push_element.annobin_get_module.start.annobin_get_module.end.annobin_php_wddx_packet_start.start.annobin_php_wddx_packet_start.end.annobin_zif_wddx_packet_start.start.annobin_zif_wddx_packet_start.end.annobin_php_wddx_packet_end.start.annobin_php_wddx_packet_end.end.annobin_zif_wddx_packet_end.start.annobin_zif_wddx_packet_end.end.annobin_php_wddx_serialize_var.start.annobin_php_wddx_serialize_var.endphp_wddx_serialize_objectphp_wddx_serialize_var.cold.9.annobin_php_wddx_serialize_object.start.annobin_php_wddx_serialize_object.endphp_wddx_serialize_object.cold.10.annobin_php_wddx_add_var.start.annobin_php_wddx_add_var.endphp_wddx_add_varphp_wddx_add_var.cold.11.annobin_zif_wddx_add_vars.start.annobin_zif_wddx_add_vars.end.annobin_php_wddx_deserialize_ex.start.annobin_php_wddx_deserialize_ex.end.annobin_ps_srlzr_decode_wddx.start.annobin_ps_srlzr_decode_wddx.end.annobin_zif_wddx_deserialize.start.annobin_zif_wddx_deserialize.endzif_wddx_deserialize.cold.12.annobin_php_wddx_constructor.start.annobin_php_wddx_constructor.end.annobin_php_wddx_destructor.start.annobin_php_wddx_destructor.end.annobin_ps_srlzr_encode_wddx.start.annobin_ps_srlzr_encode_wddx.endps_srlzr_encode_wddx.cold.13.annobin_zif_wddx_serialize_value.start.annobin_zif_wddx_serialize_value.end.annobin_zif_wddx_serialize_vars.start.annobin_zif_wddx_serialize_vars.endarginfo_wddx_serialize_valuearginfo_wddx_serialize_varsarginfo_wddx_serialize_startarginfo_wddx_packet_endarginfo_wddx_add_varsarginfo_wddx_deserializederegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zm_info_wddxphp_wddx_serialize_varphp_wddx_deserialize_exps_srlzr_encode_wddxphp_wddx_packet_startps_srlzr_decode_wddxzif_wddx_packet_end_finizif_wddx_serialize_varszif_wddx_add_varszif_wddx_packet_startzif_wddx_serialize_value__dso_handlewddx_functionsphp_wddx_constructorzm_startup_wddxzif_wddx_deserialize_DYNAMICphp_wddx_destructorwddx_module_entry__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_php_wddx_packet_endzend_update_propertyphp_lookup_class_namefree@@GLIBC_2.2.5add_assoc_zval_ex_zval_ptr_dtorzend_parse_parameters_ITM_deregisterTMCloneTablezend_list_close_zval_get_string_funcphp_base64_decode_exap_php_snprintf_zend_hash_str_updatesmart_str_erealloc_edata_estrdup_safe_emallocstrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4_zval_dtor_funczend_fetch_resourcestrchr@@GLIBC_2.2.5php_info_print_table_rowzend_str_tolowerzend_unmangle_property_name_ex_emalloc_32php_XML_SetUserData_zend_hash_index_updatezend_register_resourcememchr@@GLIBC_2.2.5ps_globalszend_fetch_resource2_exstrcmp@@GLIBC_2.2.5php_store_class_name__gmon_start__zval_add_refstrtol@@GLIBC_2.2.5php_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14php_XML_Parsephp_XML_ParserFreeconvert_scalar_to_number_zend_hash_mergezend_register_list_destructors_exphp_get_session_varphp_file_le_streamphp_XML_SetElementHandlerzend_long_to_strbasic_globalsphp_parse_datephp_info_print_table_headerzend_hash_str_find_php_stream_copy_to_memphp_add_session_varget_module_ecalloc_zend_hash_next_index_insert_call_user_function_ex__bss_start_array_init_convert_to_string_efree_emalloc_40php_XML_ParserCreatephp_set_session_var_object_init_ex_zend_handle_numeric_str_ex_emalloc_48php_session_register_serializer_estrndupphp_escape_html_entitieszend_empty_stringphp_file_le_pstreamexecutor_globals_ITM_registerTMCloneTablezend_rebuild_symbol_tablephp_info_print_table_startzend_throw_error__cxa_finalize@@GLIBC_2.2.5php_XML_SetCharacterDataHandlerzend_hash_find.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``48 @ LHoUo@d nBxs~`!`!%%;aa aaeeff<mm x xx xx x H{ H{H} H}  0- `؀H  #PK!6{  modules/mysqli.sonuȯELF>0@@8 @ !!@H   " "888$$ Std Ptd QtdRtd!!??GNUM@)㿶?S#y@`y}BEJ| pqX&O= ji j=^ `p9 St5|n?WF[%`%6Y3 " ~|d;#OWv M 1|  #sN,  F"Udu  "D &("2  "__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizezend_ptr_stack_cleanzend_ptr_stack_destroy_efreezend_hash_find_convert_to_stringzend_get_std_object_handlers_zval_dtor_funcexecutor_globals__stack_chk_failzend_throw_error_emalloc_56_zval_ptr_dtor_zend_hash_init_zend_hash_addmysqli_objects_new_ecalloczend_object_std_initobject_properties_initinstanceof_functionphp_error_docref0convert_to_booleanzend_object_std_dtorzend_hash_destroyzend_unregister_ini_entriesphp_info_print_table_startphp_info_print_table_headermysqlnd_get_client_infophp_info_print_table_rowap_php_snprintfphp_info_print_table_enddisplay_ini_entries__zend_mallocmemcpy_emalloc_24zend_register_ini_entrieszend_register_list_destructors_exzend_new_interned_stringspl_ce_RuntimeExceptionzend_register_internal_class_exzend_declare_property_longzend_declare_property_stringzend_register_internal_classzend_declare_property_nullzend_ce_traversablezend_class_implementszend_register_long_constantmysqlnd_reverse_api_register_apiget_modulezend_parse_parameterszend_wrong_param_countzend_parse_method_parameterszend_fetch_class_object_and_properties_initzend_merge_propertieszend_fcall_info_argszend_get_executed_scopezend_call_functionzend_fcall_info_args_clearzend_standard_class_defzend_ce_exceptionzend_throw_exceptionzend_throw_exception_exOnUpdateLongdisplay_link_numberszend_ini_boolean_displayer_cbOnUpdateBoolOnUpdateStringOnUpdateStringUnemptyadd_property_str_exadd_property_stringl_exadd_property_string_exadd_property_long_exmysqlnd_connection_initzend_strpprintf_safe_emalloc_zend_get_parameters_array_exstrlen__zend_realloc_ereallocmysqlnd_debug_object_init_array_initadd_index_zvaladd_index_longmysqlnd_get_client_version_emalloc_32convert_to_longzend_llist_get_first_exadd_assoc_long_exadd_assoc_string_exadd_next_index_zvalzend_llist_get_next_ex_emalloc_112_zend_hash_next_index_insertzval_add_ref_estrdupstrncasecmpmysqlnd_connection_connectzend_ptr_stack_num_elementszend_ptr_stack_init_ex_zend_hash_str_updatemysqlnd_global_stats_mysqlnd_get_client_statsmysqlnd_pollzend_hash_internal_pointer_reset_exzend_hash_move_forward_exzend_hash_get_current_data_ex__errno_locationzend_vspprintf_object_init_exzend_update_property_stringzend_update_property_longzend_throw_exception_objectzend_iterator_initzend_errorlibc.so.6_edata__bss_startmysqli.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64  ii  ui  !! ! !@!~`!!X!B!!@B!!A!!PA !O0!@@!NP!@`![p!@8!h!P:!!p7!Ε!@=!y!@@ !O0!?@!P!;`!p!`?!!<!X!1!!pC!!/ !0!/@!P!6`!Np!>![!5!h!9!O!>!,! 5!5!P4 !0!P1@!WP!3`!np!0!!@<!!2!y!>!Ǖ!0!!=X!!>!!C!G(!L@!bX!}!>!C!G!L!b!}X!p!N!!!N!0!x!!!!!0!x!ѐ!>!ѐ!X!>p!!!>!X!B!!!>!(!X!͇!͇!͇!͇0!x!!͇!>!͇8!>P!͇!>!͇!>!͇(!X!Ö!>!Ö!і!ܖX!p!і!ܖ!!!X!!!!8!tx!!t!!t8!x!!ۂ!!!!0!.H!Bx!>!ۂ!!!!!. !BX!ۂp!!!!!.!0!H!x!>!!!!B8!>P!B!B!ז!>!B(!זX!Bp!ז!>!B!ז!זX!>p!ז!ז!>!זX!Bp!ז!>!B!ז!yX!>p!y!>!!(![@!X!!!%!%8!P!h!%!!%!!0o!!n !hy0!n@!wyP!n`!Vp!nx!n!y!o!`n!y!o!!p!N!@p@!@H!s`!h!pp!! ("!!" (""0"H" ("X"x"؆" (""fy"̂" ("" " ("P"h" (""" ("""" (""5("O@" ("P"fyp"`" (""fy"@" "O(""0"!@"dH" !P"!`"yh"p"!"""!"Ŏ""P""" !"""P" ""P "("g0"P@"(H" 'P"P`"͑h"@p"P"""P"""P"D""@!"""P"" "P "P("%0"!@"H"(P"P`"Mh"dp"P"@"p"Ŏ""P"L""P""" ! "("0"P@"H"P"P`"ďh"p"@!""PU"!""0U"!""@U"P"*"Z"!">""P "b("P0"@!@"H"P"P"m""!""j"@!"""!"""P"Ŏ""P "Ҏ("0"@!@"H"PTP"@!`"*h"0p"P"A""!"͐"h"P""p"P""PV"P "S " "P "( "e0 "P@ "H "0P "P` "h "`p "@! " "0Z "! "@ "`T "@! "͑ " "P " "p "P " "P  "! "8( "P 0 "P@ "DH "_P "!` "Ph " p "! "͇ "@\ "! "z "@ "! " "@ "! " "b "P "! "@ "! "( "P0 "@!@ "ҒH "lP "!` "h "p "! "ڒ "k "! "  " "! " "h "`! "6 "P  "! " "@ "! "( "p0 "P@ "xH "$P "P` "h "*p "! "ؕ "`- "P " "p- "P " "P  "@! "Q " "! "f( "0 "@!@ "xH "jP "!` "h "p "`! " " "! " " "! "ˎ " "! "َ "PT "@!""pT"P "("T0"P@"H"P"!`"#h"0p"!":""!"G""!"T""!"a"W"!"s"" ! "("0" !@"H"P"`!`"h"p"`!"""!"׏""`!""PU"!""0U"!""@U"`! "#("Z0"@!@"7H"P"`!`"Hh"p"!"["P"!"m" "`!"""`!""PV"!""V"P "Ɛ("h0"!@"ِH"pP"0`"h"p"!" "l"0"!""!"6"0"!"L""!"c""! "}("e0"!@"H" P"P`"h"p"!""`"!""`"!"Ƒ""!"ڑ"0Z"!""p"! "("0"`!@"H"PP"`!`""h"P p"!"1"P "!"="_"!"I" "!"X"0m"@!"f"@\"! "s("@0"`!@"H"@P"!`"h"Pp" !""b"!"˒"l"@!"""!""k"!"""@! "("h0"!@")H"P" !`"Ch""p"!"X" !"`!"m"" !"""!""" !"""`! "ē(""0" !@"֓H"#P" !`"h"Xp" !""" !""0" !")"" !"A"d" !"X"g" ! "q("$0"!@"H"P" !`"h"@p" !""" !"ɔ"" !"ޔ"p" !""%"`!" " " ! "(" '0" !@"8H"P"!`"Sh"(p" !"l")" !""0"!""@"!""p"!""*" ! "(",0"!@"ѕH"`-P"P`"h"p-p"!"" /"!" "P "!""@"!"/"P  "@! "`( " "0 "@8 "@ "H "@P " X "gh " ("p " "n " " "@ "@w "w "w " w "`w "w!H!H8"H"H0"Hx"H!h"h`""X""" "-"-X"-""" " """z"/"0"<"a"e"i"q8"@"H"P"X"`"h" p" x" " """"""""""""""""!"""#"$ "%("z0"&8"'@"(H")P"*X"+`",h".p"1x"2"3"4"5"6"7"8"9":";"=">"?"@"A"B"C"D"E"F"G "I("J0"K8"L@"MH"NP"OX"P`"Qh"Rp"Sx"T"U"V"W"X"Y"Z"["\"]"^"_"`"b"c"d"f"g"j"k"l "m("n0"o8"p@"qH"rP"sX"t`"uh"vp"wx"xHH٪!HtH5"!%#!hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhha%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%ݟ!D%՟!D%͟!D%ş!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%ݞ!D%՞!D%͞!D%Ş!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!D%E!D%=!D%5!D%-!D%%!D%!D%!D% !D%!D%!D%!D%!D%!D%ݝ!D%՝!D%͝!D%ŝ!D%!D%!D%!D%!D%!D%!D%!D%!D%}!D%u!D%m!D%e!D%]!D%U!D%M!DPH5d11+ZPH5`111ZH@H1HH1H\1H11[AHBHHHH11 AD$bYH% HBHHHHH% HAHSHHH11E7ZHAHHHHIT$H511H[HB1HHH1HhE[HD$pH1HH1>[H!1H5H8!w[HB1HHH1HEJ[H 11E)[I$IL$H1H@HL@H]!H81+\HG!IL$H31H8H1ZH% HBHIHHH11CC_HBHHHHHB1HHH1HCx`HB1HHH1HCK`HB1H+HH1HC`LbH11oAEobH{11MAEMbH111+AE+bHB1HHH1HAEaHB1HHH1HAEaHB1H%HH1HAEaaHs11uCPcHBHNHHH11HC#cHBHHHHHB1HHH1HEdHB1HHH1HEcHB1H0HH1HEcHBHHHH11AD$eHBHHHHHAHAHHH11;AD$gHAHHHHHB1HHH1HCgHB1HHH1HCgHB1H!HH1HCwgHBHHHH11pEhH11OEgHBH(HHHHBHHHH11 ChHBHkHHHHBHHHH11CciHBH)HHHHBHHHH11AD$*jHBHHHHHBHKHHH11EEjHBHHHHHBH HHH11CkHBHaHHHHAHHHH11CFlHAHHHHHBHHHH11AFmHBHHHHHBHHHH11HHHHBHHHH11AD$rHBHHHHHBH`HHH11ZCsHBHHHHHBHHHH11AD$sHBHtHHHH% H% HBHHHH11CtHBHHHHH011CuHBHcHHH11]C}uHBHHHHHBH!HHH11CvHBHyHHHH11vHBHHHH11EvHBHHHHHBHHHH11}C^wHBHHHHH11GwHBH'HHH11!EwHBHHHHHAHHHH11C!xHAH=HHHHBH(HHH11ExH11|HEE~xHBHMHHHHAH81HH1H2CyHAH 1HH1HCyHAHc1HH1HCyHBHHHH11EzHBH HHHHBHoHHH11iAD$J|HBHHHHHBH+HHH11%Ed~HBHHHHHBHHHH11AE鈀HBH@HHHHB1HHH1HCgHB1HrHH1HsC:HB1HHH1HFC H11%CǁHB1HHH1HC隁HB1HHH1HCmHB1H"HH1HC@HBHwHHH11qCցHBHHHHHBH5HHH11/E飂HBHHHHHBHHHH11CHBHKHHHH11CHBHHHH11C\HBHHHHHBHNHHH11HC黃HBHHHHHBH HHH11C5HBHdHHHHBHHHH11CքHBH"HHHHB1HHH1HCCHB1HTHH1HUCHB1HHH1H(CHBHHHH11CzHBHYHHHHBHHHH11AD$JHBHHHHHBH{HHH11uAD$馇HBHHHHHAH7HHH111AD$鎈HAHHHHHBHHHH11C#HBHKHHHHBHHHH11C鸉HBH HHHH[11uCkHAHN1HH1HHC>HAH!1HH1HCHAHy1HH1HCHBHHHH11C遊HBHHHHHBHHHH11CHBHHHHHBHCHHH11=AD$ȋHBHHHHHBHHHH11E鏌HBHWHHHHBHHHH11CGHBHHHHHBH{HHH11uCrHBHHHHHBH9HHH113EYHBHHHHHBHHHH11AD$鬐HBHMHHHHBHHHH11E鼑HBH HHHHBHqHHH11kCHBHHHHHBH/HHH11)E铓HBHHHHHBHHHH11C鯔HBHEHHHHG H01HH1HC$H11CHG H1HH1HWCvHD116CUHG H1HH1H CȕH11C駕H11C.H11C)HG H1HH1HyCHf11XC髗HG H1HH1H+C~H11 C-HG Hh1HH1HCH11C鯘HG H1HH1HC邘H|11nC1HG H1HH1HACH.11 C[HG H~1HH1HC.H11CݚHG H01HH1HC鰚H11AD$麛Ho11aAD$HL11>EySH*H11C[H龝HHt$Ht$'HHt$Ht$oSHG HH;1HH1HC[H11C锞H釞Hr11dC֞H{ɞHD116CHM H11CZHM骟H11C鉟H11CH11C Hg11YC<s2H<11.CqHgH11C馠霠H11CޠdH11CCH]̡HP魢HBL1L@1I^H11B魤HBL1L@1I鉤HBH|1L@1IaH11FH11HH11.H@H HHH11AF魩H@HZHHHH11KCPHBH$HHH11C#HBH|HHHHBHHHH11C˳HBH:HHHHBHHHH11AEHBHHHHHBH]HHH11WAEJHBHHHHHBHHHH11E#HBHrHHHHFHHHH11EH11EHFHHHHHH811rAF<HDHBHAHHH11;EHBHHHHHBHHHH11CcHBHWHHHHBHHHH11CRHBHHHHHBH{HHH11uCHBHHHHHB1H2HH1H3CHB1HHH1HCHB1H]HH1HCH11CGHBHHHH11CHBHHHHH11HRH|$ HW111HBHHHH11 CHBHHHHH11CmHB1HHH1HC@HB1HzHH1H{CHB1HHH1HNCH_11-HAHHHH11 C7HAHHHHH% H% H11AE|rH11AEPHJ11HeHlAE&HJ11HHBAEHJ11HHAEHJ11HHAEHJ11HBHAE~HJ11HHAETLL$1ELH1mH|$(HB [HB1]A\HH1H9HB 1HHH1HHA H1HH1HHA Ha1HH1HH/11[H5Y1H=v!Hv!H9tH6u!Ht H=v!H5zv!H)HHH?HHtH=u!HtfD=Ev!u+UH=u!Ht H=N5!dv!]wHGH@ff.fHHGHGHG HGHG(HG0HG8HG@HGHHGXHGPHG`HLJHLJHGhHLJƇff.H|!1H|!H|!SH_Ht"H1H5H)H[[ff.H?t@H=U|!HtH1H1ff.fAWIAVAUMATIUSHH8L7T$Hl$dH%(HD$(1~t&HNHD$L$tHl$|$HuZI~HtbH3HtUHI~LPHH9tWHT$(dH3%(u}H8[]A\A]A^A_f.HI~HuZMLT$HLP H9uD$tHL$)uH|$HD$HD$HAr!nAWIAVIAUIATUSHH(dH%(HD$1~It#HVH$T$tI|$LuNImH}HtVH3HtIHH}LPL9tPHD$dH3%(u[H([]A\A]A^A_LImH}Hu>LLHLP(L9uD$ tH$*uH<$f.AWAVAUATUHSHHHt$dH%(HD$81HHXHp!1IƋCLpL{[HLI9tmLl$Ld$ AtPIMLHHHD$ @<1%D$("H;{p!tHt$ HLI L9uHD$LHL$8dH3 %(uHH[]A\A]A^A_ff.ATUSGHw )HcHHH!HHfHPHtHЀ8uHpH=w!HtHLeHHELtHLH5x!H*Ht!tL[HU(]A\H5w!HHu!uH5w!HHr!uH5ew!HHs!uH5+x!HHq!Hv!HD{f.AVIAUIATIUSH H6dH%(HD$1HHxHu*HL$dH3 %(H []A\A]A^tH11g1ILLL1H;1n!t1Hǀx@MILLL1H;m!HVH1V{@?fLLLPXASHHHtH[UHSHH_HtH;tH{۾HHH[]fSHGHHtHHt 1HH[sgSH=to!]H=n!QH=n!EH=Nn!9H=o!-H=t!!z1[fDUHSH8dH%(HD$(1H HH51q1H5uH1$ H1H t!Hi1HڿH5W H1H t!H61HڿH5< H1H 5t!H1HڿH5#HHD$(dH3%(uH8[]"fSt 1H[fDHHH5kt!HxtHHXHHHtHH[ff.vl!DSHH?HtHGP`H{HHtnH[eDSHGHHt H8HtH[ fSHHHtWtHC{u [fD/ut&QH{C[fDfATIUSH_Ht3H+Ht+H}t S1H6HXHC[L]A\=ff.fAWIAVIHz AUHIATMUHSH(dH%(HD$1bHLHHH{HHCHkMHHHLD+LDMHH$LDD$hHtHAFuyHEHLhL`Su+t'HD$dH3%(uaH([]A\A]A^A_t;HD$dH3%(u5H(H[]A\A]A^A_Df@H!AWAVAUATUSHdH%(H$1L$)H= H!H1H=%p!oHHP2o! /o!oP3o!oX$7o!o`4%;o!ohD-?o!opT5Co!oxd=Go!o@tKo!o Lo!oMo!oNo!o%Oo!o-Po!HHRo!1҉Lo!HHjn!HHhn!fDo-Gn!H`n!HfDo%@n!HQn!HE@Hfo=sn!fo5{n!D)-#m!H!H0Ht0LxL-b!@IOMGLI IW@IwHuH H5HH5HH5iܼHH5_üH H5%誼H H56葼MHuLHa!H=Xg!DŽ$H$耼 liHfpH8HH@H@@mysq@ALHDŽ$H$HF!HDŽ$H$H^!HDŽ$HDŽ$ HDŽ$(HDŽ$0HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$8HDŽ$@HDŽ$HHDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$PHDŽ$H$ٻ1HH=_!HHf!蕻Hn !H0Ht/LxL-_!IOMGLI IWpIwHu߹ H5H> HH5.%HH5,  HH5 HH5ڹHH54HH5(訹 HH5菹 HH5v HH5]HH5D HH5+ HH5HH5HH5HH5tǸHH5_许 HH5蕸 HH5|HuLH]!H=Gc!H$DŽ$o(ngHHmysqli_wHfH$HxHH@H@@ arni@&ALHDŽ$H$HB:!HDŽ$H$HZ!HDŽ$HDŽ$ HDŽ$(HDŽ$0HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$8HDŽ$@HDŽ$HHDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$PHDŽ$H$躷1HHH=Z!IHwb!rHK8!H0Ht4LxH-Z!IOMGHI IWHIwHuLH5زLH5LH5WIuLH6Z!H=`!H$DŽ$׵(]HHmysqli_rHHxHH@H@ @ esul@$t@%ALHDŽ$H$H>!HDŽ$H$HW!HDŽ$HDŽ$ HDŽ$(HDŽ$0HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$8HDŽ$@HDŽ$HHDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$PHDŽ$H$'1HIH=X!IH_!H!H0Ht5LxH-X!fIOMGHI IWIwHuL H5P膳L H5mLH5]TLH5y;LH51"H=;^!HOHHV!HPHU!H1詶IuLHW!H=]!H$DŽ$ܲ(bHHmysqli_sHtmfP HxHH@H@ @"t@#ALHDŽ$H$Hr8!HDŽ$H$HT!HDŽ$HDŽ$ HDŽ$(HDŽ$0HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$8HDŽ$@HDŽ$HHDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$HDŽ$PHDŽ$H$*1HLH=U!IH\!H!H0Ht0HhL5lU!@HMLELH HUHuHu߹ H5L莰 LH5JuLH5\ LH5RC LH5*LH5LH5x LH5l߯LH5sƯLH5譯IuLH?T!H=xZ!H$DŽ$蠯AعH=:"AعH=6A1ҹH=4AعH=1˰AعH=+議Aع H=!菰AعH=qAعH=SAعH=5Aع!H=Aع#H=AعH=ۯAع H=软AعH=蟯AعH=聯AعH=cAعH=~EAع@$H='Aع@)H= Aع@*H=Aع%'H=ͮA1ҹH=貮AعH=蔮Aع H=vAعH=ݪXAع H=ݪ:Aع H=̪Aع H=A1ҹ"H=PAعH=ŭA1ҹH=読AعH=茭AعH=nAعH=PAعH=dz2AعH=nAعH=eAعH=[جAعH=T躬AعH=O蜬Aع H=B~Aع@H=9`AعH=0BAعH=-$AعH=%AعH=Aع@H= ʫAعH=謫AعH=莫AعH=pAعH=ܩRAع H=۩4A1ҹH=کAعH=ЩAعH=éݪAعH=迪AعH=衪AعH=胪AعH=eAعH=GAعH=~)Aع H=u Aع H=iAع H=\ϩAع H=O豩Aع H=F蓩AعH=9uAعH=/WAعH="9AعH=AعH= AعH=ߨAعH=AعH=裨AعH=腨AعH=ߨgAعH=ҨIAعH=ɨ+AعH= AعH=AعH=ѧAعH=賧AعH=蕧AعdH=wAعeH=YAعH=z;AعH=pAعH=fAعH=]A1ҹH=TƦA1ҹH=K諦Aع&H=B荦Aع !H=LoAعH= QAعH= 3AعH= AعH=AعH=٥AعH=軥AعH=蝥Aع H=ܧAع@H=էaAعH=̧CAع H=ħ%Aع+H= AعH=AعH=ˤAعH=譤AعH=菤AعH=qAعH=SH=\F!ǣ1H$dH3%(uH[]A\A]A^A_ۢff.HeE!@AUATIUSHH(dH%(HD$1G,H M!1HH5#:H$HHBHxL(I}PϤHIEH8HXPPHEf1HLL$H aM!LD$H5萠H$HHBHxL(.I}#P!L fHEHp H f.ATUHSHHAuHH5R薚HKDCTHL%ĥH5hHID茝HKDCXHH5PHIDiHK DC\HH5*HIDFHK8DChHH5HID#HK(DC`HH5߰HIDHH פH5Ϥ蕝HKHH H5=HK@HH5o%KtH H5KlHH5KxHH5KpH[]H5dA\ŝDAVI8AUIATAUS1ҾH茚HHttŜHH@Et#A}(IE Hh[]A\A]A^HYE!H8AFIHh[]A\A]A^fH訜[]AFA\A]A^SHHw HdH%(HD$1HD!(Lt1,1HHZt\H$HHBHxHPHHDH8HXHtHH9w#HCHD$dH3%(u7H[H1H5Ţ1ݗH@<%C識ff.fSHHw H dH%(HD$1HC!(Lt1,1HL$LL$HMStQHD$HHBHxHHH~H8t$HXCHD$dH3%(uH [fAWAVAUATUSH8_,dH%(HD$(1IHXB!I1A|$(Lu It$ HL$HHHD$(P1LL$(gZYHD$HHBHxH(ʟH}HE1HT$ A|$(AAHND)HH9HGH;D$ Hc1Ҿ訖HI{D9H}HL$HGHL$IHH1AD)HL$HAf.CHHLL@DNFHBLVH9HAH}HGH}IHGH}AHGLDHʅLr1HAEHD$(dH3%(H8[]A\A]A^A_H}LHGPpHcH?!tPȾ11GDHZ荖H}LHG@H?!LǗVDL谗?豔AUATUSHHw H(dH%(HD$1H4?!(Lt1HL$H,H^HD$ P1LL$TZYHD$HHBHxxH(>H}H1HGDl$A9H}Ld$HGHtrEt/AuHIT$HMD4Hz2HHHyqI9uH}HHWu$SHD$dH3%(uH([]A\A]fDlff.AVAUATUHHw SH@dH%(HD$81H>!(H$Lt1HH,H HD$8PHD$(PHD$@PHD$0PHD$HP1LL$8H0tuH$HHBHzxH@HHH8LL$(E1HL$HT$HXHt$AH==!u41EEHD$8dH3%(uH@[]A\A]A^fHH8HXtHH8HXIHH8HXAHH8HXLDHcґfAUATIHw USHdH%(HD$1H=!(Lt1,1HH'腐H$HHBHwxH;HH/H8HXHHtVHHx IH返LHHHH{HHCLk蔒BD+I$AD$HD$dH3%(u H[]A\A]AUATUSHH~ Ha;!Hh{,u&H;HGPHHH[]A\A]1H2!HsHXٔHtL El$ A9t C,@HMd$H8HXhL-:!At?H111H8HXu!H;HGPDImfA$AD$H+9|@)I|$A|$D@AD$HH4t;Ic $ID$HH @ID$A$HPIT$H(IE 끐;fATIHw USHdH%(HD$1H:!(Lt1,1HHtnH$HHAHAPHH;1H H$HHRBH(H}蝑HEH荑AD$HD$dH3%(u H[]A\vfDSHHw H0dH%(HD$(1H9!(HD$HD$HD$ Lt1HD$ HL$,PHHD$ P1LL$ ZYt[HD$HHBHxHhHH/H8HL$T$HXCHD$(dH3%(uH0[ff.@UHHw SH(dH%(HD$1H7!(Lt1,1HL$LL$Hɑ"tUHD$HHBHxH8H{  H|$x8HShHt$H9s(HEHD$dH3%(uH([]ÐE袌fSHH57H ,dH%(HD$1HL$HT$tH|$ CHD$dH3%(uH [:f.SHHw HdH%(HD$1Hy7!(Lt1,1HHtKH$HHBHPxHHH H8HXCHD$dH3%(uH[ff.@SHHw HdH%(HD$1H6!(Lt1,1HH̏*tIH$HHBHҖxHHHH8HXCHHD$dH3%(uH[AUATIHw USHdH%(HD$1H6!(Lt1,1HHuH$HHBH]xH!HHH8HXHHtVHHx IH词LHHHH{HHCLk脋BD+I$AD$HD$dH3%(u H[]A\A]豉AVAUATUHHw SHdH%(HD$1H24!(Lt1,1HHctiH$HHBHxHWH;HKHGPuVEL%3!A$tH;HG(H{HUyHD$dH3%(uH[]A\A]A^L%3!A$tLH;HGt;H;HGH;IHGH;AHGLDHxENaSHHw H dH%(HD$1H2!(Lt1,1HL$HtMHD$HHBHxHMH9HAHGHt$Pht4|$tCHD$dH3%(uH [CC蒇f'USHHw HdH%(HD$1H1!(Lt1,1HHۋ9tEH$HHAHxHHHHt2HjHHHD$dH3%(uH[]C†fAWAVIHw AUATUSH8dH%(HD$(1H01!(Lt1,1HL$HoHD$HHBH_xL $1L LAT$ptKDx1Hl$HÉLA$HIuLHHHL輆HCI9uHD$(dH3%(uH8[]A\A]A^A_迅ff.@UHHw SH(dH%(HD$1H(0!(Lt1,1HL$LL$H bthHD$HHBHkxHH|$HSpHt$H9iHHHt0HpHHHD$dH3%(uH([]fDEʄf.AUATUHHw SHdH%(HD$1H4/!(Lt1,1HHutkH$HHBHxHՑHIHt^1HHSpt%Dh1fHIHH~HCL9uHD$dH3%(uH[]A\A]f.E҃f1ɺSHHw HdH%(HD$1H /!(Lt1,1HHztIH$HHBHVxHHHH8HXCHHD$dH3%(uH[ATIHw USH dH%(HD$1H-!(Lt1,1HL$LL$HgtTHD$HHBHxHƐHl$HHSp9t$HAD$HD$dH3%(u H []A\IfSHHw HdH%(HD$1H,!(Lt1,1HHt6H$HHAHxHEHCHHD$dH3%(uH[褁@SHHw HdH%(HD$1H,!(Lt1,1HHZtDH$HHAH!xHH1H$HH{ HCHD$dH3%(uH[fDAU1IATUSH踀HtXHH踀Hx IHXLHHHH{HHCLc-BD#I]AEH[]A\A]S1HCH[AUIHw ATUSHdH%(HD$1H+!(H$Lt1,1HH~H$HHBHՎxH$HHHL`xMtsLHx HHCHHkH{HLHHCHD+I]AEHD$dH3%(u"H[]A\A]@L%<1H0SHHw HdH%(HD$1Hy*!(H$Lt1,1HH}tIH$HHBHuxH;HH/H8HXCHHD$dH3%(uH[y~fAUATIHw USHdH%(HD$1H)!(H$Lt1,1HH}H$HHBHxHHHH8HXHHtVH}Hx IHWLHHHH{HHCLk,BD+I$AD$HD$dH3%(u H[]A\A]Y}fSHHw HdH%(HD$1H(!(H$Lt1,1HH|tGH$HHBHxHHHՌH8HXCHHD$dH3%(uH[|ff.AUATIHw USHdH%(HD$1H'!(H$Lt1,1HH߀={H$HHBHxHZHHNH8HXHHtVH{Hx IHwLHHHH{HHCLkL}BD+I$AD$HD$dH3%(u H[]A\A]y{ft(HG Hxtf1D(HG HxtfDfDSHHw HdH%(HD$1HI&!(Lt1,1HH\ytVH$HHBHmxH3HH'H8HXHH9w)HCHD$dH3%(u=H[fH1H5%1=yH@<%C zff.fAUATUSHHw H(dH%(HD$1HD%!(Lt1,1HL$LL$HU~xtUHD$HHBHÊxH(HEH|Ht$HMH8HXPpu+CHD$dH3%(H([]A\A]DH#!thHEH8HXtPHEH8HXIHEH8HXAHEH8HXLDHhCXxSHHw HdH%(HD$1H#!(Lt1,1HH|ZwtHH$HHBHxHxHHlH8HXPHCHD$dH3%(uH[wfUHHw SHdH%(HD$1H8#!(Lt1,1HHK|vt`H$HHBH]xH#HHH8HXPHHH8HXP@EHD$dH3%(uH[](wSHHw HdH%(HD$1H!!(Lt1,1HH|{utBH$HHBHЈxHH9HHGP0CHD$dH3%(uH[xvUHHw SHdH%(HD$1H !(Lt1,1HHz)utTH$HHBH{xHAH;H5HGP0 H;HGP8EHD$dH3%(uH[]u@SHHw HdH%(HD$1H) !(Lt1,1HH zjtt3H$HHAHxHćHRpCHHD$dH3%(uH[uUHHw SHdH%(HD$1H!(Lt1,1HHkystZH$HHBHrxHHC Ht xdHShHHH9w(ShEHEHD$dH3%(uvxHvH:uHL$HuHL$H:HT$t$ HGCHD$(dH3%(uH0[c[SHHw H dH%(HD$1H!(HD$Lt1,1HLL$H_ ZtSH$HHBHuxHuH9HxuHGHT$t$u+HD$CHHD$dH3%(uH [fDCZf.SHHw HdH%(HD$1H !(Lt1,1HH^:YtCH$HHBH.uxHtH9HtHGCHHD$dH3%(uH[YAUATIHw USHdH%(HD$1HT!(Lt1,1HH'^XH$HHBHtxH}tH9HqtHGHHtVH%YHx IH\LHHHH{HHCLkZBD+I$AD$HD$dH3%(u H[]A\A]XATUHHw SHdH%(HD$1H!(Lt1,1HH]wWH$HHBHsxHsH;sPZIHH8HXPPI$HtXZL H@H!H8 XEHEHXHD$dH3%(uH[]A\DLZEWf.AUATUSHHw H(dH%(HD$1H$!(Lt1HH,H[HD$P1LL$FVZYt[H$HHBHsxH(rH}HrHGHT$Ht$u=H$HH@@CHD$dH3%(|H([]A\A]DHy!tPH}HGt>H}HGH}IHGH}AHGLDHFCpOVff.@AUATUSHHw HdH%(HD$1H!(Lt1,1HHZTtyH$HHBHqxH(qH}HqHGIHtXAXL H@H-!H8UCHHhHD$dH3%(u{H[]A\A]@H!tPH}HGt>H}HGH}IHGH}AHGLDH8ECuTAUATUHHw SHdH%(HD$1Hd (Lt1,1HH7YStBH$HHBHpxHpH;HpHGu-EHD$dH3%(H[]A\A]H;HGP HuH tLH;HGt;H;HGH;IHGH;AHGLDHCEcSff.AUATIHw USHdH%(HD$1H$ (Lt1,1HHWURH$HHBHoxHoH9HoHGHHtVHRHx IHVLHHHH{HHCLkjTBD+I$AD$HD$dH3%(u H[]A\A]RAUATUHHw SH(dH%(HD$1H (HD$Lt1,1HL$LL$HW5QHD$HHBHnxHnHHnH8HXH@8D$IH HMt!HH8HXH=\A0TL H@H H8QEHEHXHD$dH3%(H([]A\A]fDIVtdHH8HXtMHH8HXIHH8HXAHH8HXLDHAEWPSHHw HdH%(HD$1H (Lt1,1HH UjOtGH$HHBHrmxH8mHH,mH8HXCHHD$dH3%(uH[PF@AUATUHHw SHdH%(HD$1H4 (Lt1,1HHGTNH$HHBHlxHlHHlH81HXP0IH Mu\QL H@H H89OEHEHXHD$dH3%(H[]A\A]HH8HXH=-Y'?~ftdHH8HXtMHH8HXIHH8HXAHH8HXLDH>E=BNfSHHw HdH%(HD$1H (Lt1,1HHRLtIH$HHBHkxHLkHH@kH8HXCHHD$dH3%(uH[MHH\Ff.H% HHRxFHSHHHjHHjx kHHtVH8HXHH9wHCH[HH5V11KCHH[fDHF[ff.SHHHjHHjxjHHtVH8HXHH9wHCH[HH57V11MKCHH[fDHF[ff.SHHHRjHHFjxijHHtVH8HXHH9wHCH[HH5U11JCHH[fDHF[ff.SHHHjPiHHtHiHH8HXHt^HH9w'HCH[HF[@HH5T11ICHH[fDHHC[fAUATUSHHHHyiHHmixBiHHt}H8HXIHteHEJHx IHMLLHHH}LeHEHEKBD%HH+CH[]A\A]CHH[]A\A]AUATUSHHHHhHHhxhHHt}H8HXIHteHuIHx IHMLLHHH}LeHEHEJBD%HH+CH[]A\A]CHH[]A\A]AUATUSHHHHuhHHihx>hHHt}H8HXIHteHHHx IHELLLHHH}LeHEHEJBD%HH+CH[]A\A]CHH[]A\A]AUATUSHHHHgHHgxgHHt}H8HXIHteHGHx IHuKLLHHH}LeHEHEIIBD%HH+CH[]A\A]CHH[]A\A]AUATUSHHHHqgHHegx:gHHt}H8HXIHteHGHx IHJLLHHH}LeHEHEyHBD%HH+CH[]A\A]CHH[]A\A]AUATUHSHHH LMtlLdFHx IHJLLHHH{LcHHCGBD#HH]EH[]A\A]f.FHH[]A\A]ff.AUATUSHHHH?fxfHH8Ht~HGIHtlHEHx IH4ILLHHH}LeHEHEGBD%HH+CH[]A\A]f.CHH[]A\A]ff.AUATUSHHHHexeHH8Ht~HGIHtlHDHx IHdHLLHHH}LeHEHE8FBD%HH+CH[]A\A]f.CHH[]A\A]ff.AWAVAUATIUSH8dH%(HD$(1HHexdL(1LFMIEHHHHLt$LDHHHl$L=U@1H~FKLHkGHKHH5[DH HH5lUCHLBIELHHHtBHHuHT$(dH3%(LuH8[]A\A]A^A_CDAWAVAUATIUSH8dH%(HD$(1HHcxcL(1LEMIEHHHH@xHHLt$LuCHHHl$L=[TD1H.EKLHFHKHH5`ZBH HH5TBHLAIELHH@xH'AHHuHT$(dH3%(LuH8[]A\A]A^A_AAUATUHSHHHbxbHHSpAEtHHIHt71H1;DITHHH?L9uHH[]A\A]ÐEHH[]A\A]ff.SHHdH%(HD$1FHHabxWbHHtHHH8HXtHT$dH3%(Hu)H[@H$H@<%C@@HHHazaHHt"Hx FHHHDFHHfHHHazaHHt"HHH@FHHHfDFHHfSHHHaHHaxoaHHt&H8HXCHH[DHF[ff.SHHHdaHHXax-aHHt&H8HXCHH[DHF[ff.SHHH"aHHax`HHt&H8HXCHH[DHF[ff.SHHH`HH`x`HHt&H8HXCHH[DHF[ff.SHHH}`x}`HHtRHPhHH9wHCH[fDHH5G11H H%H$H$H- H|$pH$u HE8H$H|$`SH|$X7L|$PMIH|$x=H;tBLP4HEH5cBL6)IWH}0HT$PXH|$`Ht$hC,H>LL$XHL$pHHDHHDMLDHWHDVHL$HDH5A112IHCXH+ ZLHX+8HL8AG D$j9D$HD$E1E1HD$HD$ HD$(HEHt HMH9 HE(HtHM HMH9WHAD$HEH8LLL$LT$0LD$HL$ HXHT$(xLT$0MtL5HD$(HtH5HD$ HtH5HD$HtH5H|$t H|$v5LHLjH$P$H$PH$PL$D$H$H$H$+3H0HHH8HXHD$HH8HXHt$HHUhH8HX(M:AD$EtD$D tHEC(HD$HH HEH3HtHHx4H3H1AFIL`EtAFH$dH3%(H[]A\A]A^A_HL$xHT$PHH$H5?PH$PH$PH$PH$PH$PH$P1L$L$]/H@XHD$HHrHHxH H03THD$HHL`M?I$D$>HM(L}@L|$PH;ttAT$wL|$PMHEH;HMH9LME1D$ZDHEPHD$pf.@tHD$pHD$`HD$hHD$XHD$PEeH Hs Lf.HEHHD$XfH}X1H|$`HtT$'/T$H$D1E18T$1D$>T$HH$f.HD$HHL`zLM11.IHHE1D$fHHH8HXHJHH8HXHHH8HXAHH8HXHHHDH1&E H;HGPHH{HtWu / HCC,Eu|$>tH0AFeDHۜwD$A0IHfDHD$E1E1HD$HD$ HD$(A1ҿDD$?LT$0t-HH#DD$?LT$0D$H{H4fD@LHi@+DML,+IGA/AHPIWH@HL$Hm HHL$hHT$`H8Ht$XHXJH;HH@HD@ELP(MtL+H;IHH@HHH0HL$(Ht$HLT$+H;LT$HD$(HH@HHH8HL$ Ht$HLT$+H;LT$HD$ HH@HHH@HL$Ht$HLT$U+H;LT$HD$HH@HH@HAHD$Ht%HDD$0LT$+H;LT$HD$DD$0HGDD$0LT$PHLT$DD$0IHD$6b D$+HHD$,H: LT$IwIWHt$ `LT$(HT$,.LT$(Ht$ HT$L$LT$0H$H HL$DŽ$HHH H$HX)E1LT$0HD$HD$HD$ HD$(f,,HH8HX`HEHH8HXIHH8HXLMAD$DHD$E1HD$HD$ HD$(0+HT$Ht$ LT$(R)1-\Ho81A1*MMff.@111H H@xFHfDAUATUSHH{ LMtgLH(Hx IH4,LLHHH{LcHHC *H]EBD#H[]A\A]DFH[]A\A]fD111ɺЈSHHw H dH%(HD$1H (HD$Lt1,1HL$LL$H,&tFHD$HHBHMxHLHt$HLHLHHQXHD$dH3%(uH [T'@S,HuHZ H[H8+fD1H51%u[SHHw HdH%(HD$1HY (Lt1,1HHl+%t@H$HHBHaLxH'LHHLH8HHXHD$dH3%(uH[j&f.AWAVAUIHw ATUSH8dH%(HD$(1H (Lt1,1HH*%H$HHBHKxL KI<$KL1(I$HHHHLt$L&HHHl$L=}71HN(KLH;)HKHH5=%H HH5<7%HL$I$LHHHD$HHuHD$(dH3%(uH8[]A\A]A^A_$AWAVAUIHw ATUSH8dH%(HD$(1H` (Lt1,1HH3)#H$HHBHJxL oJI<$dJ1L"'I$HHHH@xHHLt$L%HHHl$L=51H&KLH'HKHH5;[$H HH55D$HL9#I$LHH@xH"HHuHD$(dH3%(uH8[]A\A]A^A_\#ff.ff.fAVAUATUHHw SHPdH%(H$H1Hl (HD$Lt1HL$H,Ht'HD$ P1LL$ !^_tWHD$HHBHIxHHHHHH8K(HXtEHT$Ht$Pu\EH$HdH3%(HP[]A\A]A^fD1 HC(H8HXf.HLd$ EH LHHHtgHXHHtMH8HXIHH8HXAHH8HXLDHHHS(t"HXH HC(HHELHHE-!ff.fAUATUHHw SH8dH%(HD$(1Hd (HD$HD$ Lt1HD$ HL$,PH/HD$ P1LL$ ^_uHT$HQGHD$ HHHt HiGHL$H1HNH?GyHFH HFH9K(LXt*A HC(HD$ H:HT$LXHt$ARHH8HXHHD$ H:HHXH H1R0IMH[ tHH8HXH|$"L H@H H8hEHEHXfHD$(dH3%(H8[]A\A]ÐE1E1AR H tdHH8HXtMHH8HXIHH8HXAHH8HXLDHEIfD$ C0E*f.H tHH8HXH|$EDHH8HXIHH8HXAHH8HXLHi8DH1-fHR8tIfI|ff.AWAVIH5+AUATUSHx,dH%(HD$h1HL$HT$HHD$0HD$8HD$@HD$HHD$PHD$PP1LL$PLD$0ZY;H|$@CH|$HCH|$HH|$Ht LD$HHL$@HT$8LL$ Ht$0H|$(=H\$Ll$ AHGLd$81H|$P&Mt!HhHXHHH9LHT$PD$XIUHt$AEHt H|$(Ht$Ht H|$0H|$8HtH|$(HtH|$0HtEHcD$ AFIHD$hdH3%(Hx[]A\A]A^A_fDH|$PH#HtHIfH H9#{tHI $H@HH9uAFzH|$P1H|$HBPHt$0&AHt$(H|$H#ff.AUATUHHw SHdH%(HD$1H (Lt1,1HHeH$HHBHAxH_AHHSAH8HXP( HH8HXHC0H:HX1R0IMtk\L H@HH H8EHEHXHD$dH3%(H[]A\A]ÐEHH8HXIHH8HXAHH8HXLH3DH1 EnfDR8IMff.fAUATUSHHw HdH%(HD$1HT (Lt1,1HH'tvH$HHBH?xH(?H}H?HGP(IHt[L H@H H88CHHhHD$dH3%(u~H[]A\A]H tPH}HGt>H}HGH}IHGH}AHGLDHCrwATUSHHw HdH%(HD$1H (Lt1,1HH'tIH$HHBH>xH(>HEH>H8HXu CHD$dH3%(uWH[]A\HEH8 IBL HL`@H H8CHHhmff.fATUSHHw HdH%(HD$1H (Lt1,1HHtCH$HHBH>xH(=H}H=HGu&CHD$dH3%(u`H[]A\fDHEHH8 I/L HL`@H H8CHHhZf.SHHw H dH%(HD$1H (Lt1HH,HHD$P1LL$ZYtMH$HHBHf=xH,=HHHP`1DH HHFHAU1ATIUSH HI Hx HHHLHHH{HkHHCrD+LI$AD$H[]A\A]ff.HHHt!HHtH RHVt @1ff.fHHHt!HHtHJRHVt 1ff.fHHtHHtHc@ FHHf.USHdH%(HD$1(a7Ho HHw H}tjH3 ,HHCL1 tNH$HHAH6xH6Ht!HB(HtHUHCCHD$dH3%(uH[]- ff.fHtgUSHH'@Ct HS*t1Hk(HHt0HC tH*uH; DH{ DH[]Ðff.@AW H5%AVAUATUSHH8dH%(HD$(1HXPHXH111P0IHD$HD$ H|$Hw$H|$Hw$H|$Hw$& xItH5 H|$IIHw$AH|$Hw$ 0E7IV AMIIEAOItAtLm HEw HHIDH@H@@HY00@0@IGAGHtL}(H|$LHT$LAT$H|$H|$1LA$HH\$(dH3%(uH8[]A\A]A^A_@1 AUATUSHdH%(HD$1,c4HI1HH5^,H$H ش HHPH;H  H;3H@H4xH4H;H4HG3HHH8bIľ }(L`HL L%[ @tBI<$AEIEHXHD$dH3%(H[]A\A]f.HE I4$Hx t}(3HE HXH@Ht3xH3HH4H8HX2HH8wI f.AUAATIUSHHL$XLD$`LL$ht=)D$p)$)$)$)$)$)$)$dH%(HD$81HL$ H|$1H$ D$ HD$(HD$@D$$0HD$0H 03H- H\$HHuE LD$MtH}HHH H}MtjMHHc H|$ H}McH޹HH HD$8dH3%(u3H[]A\A]LHH nf.@1hHG`HGpFHff.fSHH8H{`[DHWXHH32ATUSxL 1Ho`HHlLH\f{huHCp[]A\ff.HOXHH2xH1SHB HHt"xd2HCpH[W1HUHSH1xHHHEUHC8S@tHEHH L HCpHCXHHKHH[]HHCannot write propertyCannot read propertyenabledMysqlI SupportClient API library version%ldActive Persistent LinksInactive Persistent LinksActive LinksMySqli persistent connectioncode00000driver_versionembeddedreport_modeprotocol_versionmessagecurrent_fieldMYSQLI_READ_DEFAULT_GROUPMYSQLI_READ_DEFAULT_FILEMYSQLI_OPT_CONNECT_TIMEOUTMYSQLI_OPT_LOCAL_INFILEMYSQLI_INIT_COMMANDMYSQLI_OPT_READ_TIMEOUTMYSQLI_SERVER_PUBLIC_KEYMYSQLI_CLIENT_SSLMYSQLI_CLIENT_COMPRESSMYSQLI_CLIENT_INTERACTIVEMYSQLI_CLIENT_IGNORE_SPACEMYSQLI_CLIENT_NO_SCHEMAMYSQLI_CLIENT_FOUND_ROWSMYSQLI_STORE_RESULTMYSQLI_USE_RESULTMYSQLI_ASYNCMYSQLI_STORE_RESULT_COPY_DATAMYSQLI_ASSOCMYSQLI_NUMMYSQLI_BOTHMYSQLI_STMT_ATTR_CURSOR_TYPEMYSQLI_CURSOR_TYPE_NO_CURSORMYSQLI_CURSOR_TYPE_READ_ONLYMYSQLI_CURSOR_TYPE_FOR_UPDATEMYSQLI_CURSOR_TYPE_SCROLLABLEMYSQLI_NOT_NULL_FLAGMYSQLI_PRI_KEY_FLAGMYSQLI_UNIQUE_KEY_FLAGMYSQLI_MULTIPLE_KEY_FLAGMYSQLI_BLOB_FLAGMYSQLI_UNSIGNED_FLAGMYSQLI_ZEROFILL_FLAGMYSQLI_AUTO_INCREMENT_FLAGMYSQLI_TIMESTAMP_FLAGMYSQLI_SET_FLAGMYSQLI_NUM_FLAGMYSQLI_PART_KEY_FLAGMYSQLI_GROUP_FLAGMYSQLI_ENUM_FLAGMYSQLI_BINARY_FLAGMYSQLI_NO_DEFAULT_VALUE_FLAGMYSQLI_ON_UPDATE_NOW_FLAGMYSQLI_TYPE_DECIMALMYSQLI_TYPE_TINYMYSQLI_TYPE_SHORTMYSQLI_TYPE_LONGMYSQLI_TYPE_FLOATMYSQLI_TYPE_DOUBLEMYSQLI_TYPE_NULLMYSQLI_TYPE_TIMESTAMPMYSQLI_TYPE_LONGLONGMYSQLI_TYPE_INT24MYSQLI_TYPE_DATEMYSQLI_TYPE_TIMEMYSQLI_TYPE_DATETIMEMYSQLI_TYPE_YEARMYSQLI_TYPE_NEWDATEMYSQLI_TYPE_ENUMMYSQLI_TYPE_SETMYSQLI_TYPE_TINY_BLOBMYSQLI_TYPE_MEDIUM_BLOBMYSQLI_TYPE_LONG_BLOBMYSQLI_TYPE_BLOBMYSQLI_TYPE_VAR_STRINGMYSQLI_TYPE_STRINGMYSQLI_TYPE_CHARMYSQLI_TYPE_INTERVALMYSQLI_TYPE_GEOMETRYMYSQLI_TYPE_JSONMYSQLI_TYPE_NEWDECIMALMYSQLI_TYPE_BITMYSQLI_SET_CHARSET_NAMEMYSQLI_SET_CHARSET_DIRMYSQLI_NO_DATAMYSQLI_DATA_TRUNCATEDMYSQLI_REPORT_INDEXMYSQLI_REPORT_ERRORMYSQLI_REPORT_STRICTMYSQLI_REPORT_ALLMYSQLI_REPORT_OFFMYSQLI_DEBUG_TRACE_ENABLEDMYSQLI_SERVER_QUERY_WAS_SLOWMYSQLI_SERVER_PS_OUT_PARAMSMYSQLI_REFRESH_GRANTMYSQLI_REFRESH_LOGMYSQLI_REFRESH_TABLESMYSQLI_REFRESH_HOSTSMYSQLI_REFRESH_STATUSMYSQLI_REFRESH_THREADSMYSQLI_REFRESH_SLAVEMYSQLI_REFRESH_MASTERMYSQLI_REFRESH_BACKUP_LOGMYSQLI_TRANS_START_READ_WRITEMYSQLI_TRANS_START_READ_ONLYMYSQLI_TRANS_COR_AND_CHAINMYSQLI_TRANS_COR_AND_NO_CHAINMYSQLI_TRANS_COR_RELEASEMYSQLI_TRANS_COR_NO_RELEASEOOsOlInvalid value for resultmodeO|SzCould not find class '%s'O|lCould not execute %s::%s()mysqli7.2.34API20170718,NTSsplmysqlndmysqli.max_links-1mysqli.max_persistentmysqli.allow_persistentmysqli.default_hostmysqli.default_usermysqli.default_pwmysqli.default_port3306mysqli.default_socket/var/lib/mysql/mysql.sockmysqli.reconnectmysqli.allow_local_infileInvalid value for has_set_existsError occurred while closing statementMYSQLI_OPT_NET_CMD_BUFFER_SIZEMYSQLI_OPT_NET_READ_BUFFER_SIZEMYSQLI_OPT_INT_AND_FLOAT_NATIVEMYSQLI_OPT_SSL_VERIFY_SERVER_CERTMYSQLI_CLIENT_SSL_VERIFY_SERVER_CERTMYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERTMYSQLI_CLIENT_CAN_HANDLE_EXPIRED_PASSWORDSMYSQLI_OPT_CAN_HANDLE_EXPIRED_PASSWORDSMYSQLI_STMT_ATTR_UPDATE_MAX_LENGTHMYSQLI_STMT_ATTR_PREFETCH_ROWSMYSQLI_SERVER_QUERY_NO_GOOD_INDEX_USEDMYSQLI_SERVER_QUERY_NO_INDEX_USEDMYSQLI_TRANS_START_WITH_CONSISTENT_SNAPSHOTinvalid object or resource %s Class '%s' cannot be instantiatedThe result type should be either MYSQLI_NUM, MYSQLI_ASSOC or MYSQLI_BOTHParameter ctor_params must be an arrayClass %s does not have a constructor hence you cannot use ctor_paramsmysqli.rollback_on_cached_plinkmysqli_sql_exceporgnameorgtabledefcatalogmax_lengthcharsetnrflagsdecimals%luObO+Osss!O|lsInvalid field offsetOlzOlsInvalid parameter numberOffset must be positiveOsssssOllfrom previous queryInvalid type or no types specifiedNumber of elements in type definition string doesn't match number of bind variablesNumber of variables doesn't match number of parameters in prepared statementUndefined fieldtype %c (parameter %d)Number of bind variables doesn't match number of fields in prepared statementFunction cannot be used with MYSQL_USE_RESULTField offset is invalid for resultsetprocessid should have positive valueThere is no next result set. Please, call mysqli_more_results()/mysqli::more_results() to check whether to call this function/methodThere is no next result set. Please, call mysqli_stmt_more_results()/mysqli_stmt::more_results() to check whether to call this function/methodmode should be non-negative, %ld passedProperty access is not allowed yetmysqlnd 5.0.12-dev - 20150407 - $Id: 3591daad22de08524295e1bd073[%d] Couldn't fetch %s|sssslsO|sssslslp:mysqli_%s_%s%ld%s%s%sToo many open links (%ld)Os|lEmpty querya!a!al|lNo stream arrays were passedcollationdirmin_lengthcommentno parameters expectedtotalactive_plinkscached_plinksParameter %d not a mysqli objectInvalid object %d or resource %sHeaders and client library minor version mismatch. Headers:%d Library:%ldPersistent connections are disabled. Downgrading to normalToo many open persistent links (%ld)Mode can be only MYSQLI_FETCH_NUM, MYSQLI_FETCH_ASSOC or MYSQLI_FETCH_BOTHNegative values passed for sec and/or usecThe connection has no charset associatedSavepoint name cannot be emptyInvalid value for parameter flags (%ld)__constructfreemysqli_affected_rowsmysqli_autocommitmysqli_begin_transactionmysqli_change_usermysqli_character_set_namemysqli_closemysqli_commitmysqli_connectmysqli_connect_errnomysqli_connect_errormysqli_data_seekmysqli_dump_debug_infomysqli_debugmysqli_errnomysqli_errormysqli_error_listmysqli_stmt_executemysqli_executemysqli_fetch_fieldmysqli_fetch_fieldsmysqli_fetch_field_directmysqli_fetch_lengthsmysqli_fetch_allmysqli_fetch_arraymysqli_fetch_assocmysqli_fetch_objectmysqli_fetch_rowmysqli_field_countmysqli_field_seekmysqli_field_tellmysqli_free_resultmysqli_get_connection_statsmysqli_get_client_statsmysqli_get_charsetmysqli_get_client_infomysqli_get_client_versionmysqli_get_links_statsmysqli_get_host_infomysqli_get_proto_infomysqli_get_server_infomysqli_get_server_versionmysqli_get_warningsmysqli_initmysqli_infomysqli_insert_idmysqli_killmysqli_more_resultsmysqli_multi_querymysqli_next_resultmysqli_num_fieldsmysqli_num_rowsmysqli_optionsmysqli_pingmysqli_pollmysqli_preparemysqli_reportmysqli_querymysqli_real_connectmysqli_real_escape_stringmysqli_real_querymysqli_reap_async_querymysqli_release_savepointmysqli_rollbackmysqli_savepointmysqli_select_dbmysqli_set_charsetmysqli_stmt_affected_rowsmysqli_stmt_attr_getmysqli_stmt_attr_setmysqli_stmt_bind_parammysqli_stmt_bind_resultmysqli_stmt_closemysqli_stmt_data_seekmysqli_stmt_errnomysqli_stmt_errormysqli_stmt_error_listmysqli_stmt_fetchmysqli_stmt_field_countmysqli_stmt_free_resultmysqli_stmt_get_resultmysqli_stmt_get_warningsmysqli_stmt_initmysqli_stmt_insert_idmysqli_stmt_more_resultsmysqli_stmt_next_resultmysqli_stmt_num_rowsmysqli_stmt_param_countmysqli_stmt_preparemysqli_stmt_resetmysqli_stmt_result_metadatamysqli_stmt_send_long_datamysqli_stmt_store_resultmysqli_stmt_sqlstatemysqli_sqlstatemysqli_ssl_setmysqli_statmysqli_store_resultmysqli_thread_idmysqli_thread_safemysqli_use_resultmysqli_warning_countmysqli_refreshmysqli_escape_stringmysqli_set_optlinkkeycertcertificate_authoritycertificate_authority_pathcipherparam_nrstmtattributevaluedatabasestring_to_escapeoptionconnection_idclass_nameparamsresult_typefield_nrdebug_optionspasswordreadwriteusectypesvars%s used in query/prepared statement %sSHOW WARNINGSNo warnings foundinvalid class argumentnext(%s/%d): %sData fetched with MYSQLI_USE_RESULT can be iterated only onceAn iterator cannot be used with foreach by reference; UH x0 H \5hp`h l$<\~(`F0p.p T[h'i(x3=Gd.T(j4\$ gT !H!}!!!C("`" "N"D##$\H$$F$$L%%P%@&&&Z0'h'' (bh(((L )m)* `*W* ++A,,,,L-`--%-< .S4.p...  /9H/d|///0L0;0f01011l27 3 h4+ 4m 5 5 55 |6 7 h7 7P 8 H8 8[ 8 09>t99x;G@<<t==h>H h$ 8 8L xl    `  ( h < d   h  ,@8ph8@AACHE|hEH8JDKL0LOHQtR S|XU8V 8WXxX8Y8YpZH\<]t(]]^D_``a hbhcc8dXd,xe|8fXgh<8ihixiij(lxlm8n(nhoprHsv,v@x(z$ {h { | }$!x~\!(!!"h<"t""x#X##$$h\$H$($؊%`%%h&ȏT&&&D'|''h'(8,(X@(|((8(4)Ț)*ht*8*4+++X@,,-|-(-.P.X.ȥ.8. /8\//ا/8/,0`0001hH1122333ػ3x404D4X|44H4ȿ45X5x5686,7|787H8X\8(89D999x9::8:L:`:t::8:X:x::;H$;8;L;;;<X<H<X<h< =(==h=zRx $pFJ w?:*3$"D\0p<(2Ef E A #TKH)FEB E(D0A8Gp 8A0A(B BBBK H0FEE E(A0A8G`| 8A0A(B BBBD |@ETBESH FBB B(A0D8D 8A0A(B BBBA ,D &FAA  EBD @(D ?FEE D(A0FPU 0A(A BBBH l@ EU$D 7EDD cDA\ -Ecp l ZET( EDDP  AAA ( REL G yzRx  &x  ;EqdmQ 'E]  gEd G i G ( SFDA }DB`(TOFEI I(D0D8D` 8A0A(B BBBI Y 8D0A(B BBBJ L@E#FBB B(A0A8I# 8A0A(B BBBA @2 8<2FBD A(GP (A ABBF zRx P$N0`3FAD G@  AABE zRx @$L4L43FBA D(ISMPA (A ABBA zRx (u9(d7BAD pFI\8BJJ D(A0V (A BBBH _ (A BBBJ I(A JBB zRx 0( ($9EK  AD zRx   B |9EK0 AA zRx 0 X<:/FBB B(A0A8DpNxMMxAp  8A0A(B BBBA zRx p(DdFBH A(D@ (A ABBA zRx @$D8 d?gFBA C(G0n (D ABBF 0 @FHA D0  AABA zRx 0$D,l AEK@KHMPMHA@t AA zRx @ ( AEHD@ AAB zRx @ c ( $BfEN0L AA L pBEK  AA (B BEK  AA `B8 pCFBH A(D@ (A ABBA hD@ 0DOFBB A(H0D@ 0A(A BBBI zRx @(B EEK0 AA B E ( EEAK0 AAI zRx 0 nBH0 EFBI B(A0A8Dp 8A0A(B BBBA TPC( FEHD@ AAG Sc8 \GFBA H(D@ (A ABBK |fB G 4GEK  AA \B0lpHFHA D@  AABA  Vg HEK  AA B `IEK  AA B4$IFGA A(D0f(A ABB\ JEW8x$J FIA A(D@ (A ABBE $- JEK  AA B8|KFBH A(D@ (A ABBA qD PLLEK  AA , }B8LFBH A(D@ (A ABBA 4oDM( M M*(Y <MEK  AJ  +B8txNYFBA A(KP (A ABBF  c OEK  AA  HB(PEHD0 AAA ,J\ <PEK  AA  nB(tQEHD0 AAA p\ QEK  AA  B(QEHD0 AAD k4,REAKPtXP`MXAP AAB zRx P @HT>FBB A(H0D@ 0A(A BBBG BP0UFBB H(A0GwPMA 0A(A BBBK zRx (~DxTWDPWFBA H(DPrXP`MXAP (A ABBG RBLXFBI A(A0DPqXP`MXAP 0A(A BBBB zRx P( C,pYEK@KHMPMHA@q AA  ,ZEK@pHMPMHA@w AA L N D[EK  AJ B(0 \EHD0 AAA ` B p\EK0 AA c ]EK  AA B ]EK  AA B ]EK  AH  B P^EK  AA ,B $_EK  AA d _EK  AH lBDT`iFBH A(DPiXP`MXAP{ (A ABBC RD8ThaFBH A(D@ (A ABBA FD\(b)FHA DpWEEEEEEECI  AABA zRx $D 8bEK0 AI B plcEK0 AA  B,dEK@kHPPMHA@} AA @ dEK0 AG tzB $HeEK  AA B8\e FBH A(D@ (A ABBA vD0fFAH D0  AABF rBDXgQFBA A(KPiXP`MXAPx (A ABBF XB8P\hYFBA A(K@ (A ABBE JB8li4FBA H(D@ (A ABBH L[5h 9O >, 55P4 P1W 3n0@<2y>Ǖ 0 =>CGLb}>CGLb}NNѐ>ѐ>>B>͇͇͇͇͇>͇>͇>͇>͇Ö>Öіܖіܖtttۂ.B>ۂ.Bۂ.>B>BBז>BזBז>Bזז>זז>זBז>Bזy>y>[%%%% 0onhynwynV nny o`nyopN@p@spp ("( ("0 ("؆ ("fŷ@ ("H ("X ("8 ("P ("5O` ("fy`h ("fy@O"!d !!y!!ŎP !P PgP( 'P͑@PPPD@!P PP%!(PMdP@pŎPLP !PPď@!PU!0U!@UP*Z!>PbP@!Pm!j@!!PŎPҎ@!PT@!*0PA!͐hPpPPVPSPeP0P`@!0Z!@`T@!͑PpPP !8P PD_!P !͇@\!z@!@!bP!@!P@!Ғl!!ڒk! !h`!6P !@!pPx$P*!ؕ`-Pp-PP @!Q!f@!xj!`!!!ˎ!َPT@!pTPTP!#0!:!G!T!aW!s ! !`!`!!׏`!PU!0U!@U`!#Z@!7`!H![P!m `!`!PV!VPƐh!ِp0! l0!!60!L!c!}e! P!`!`!Ƒ!ڑ0Z!p!`!P`!"P !1P !=_!I !X0m@!f@\!s@`!@!P !b!˒l@!!k!@!h!) !C"!X !`!m !! !`!ē" !֓# !X ! !0 !) !Ad !Xg !q$! !@ ! !ɔ !ޔp !%`!   ! ' !8!S( !l) !0!@!p!* !,!ѕ`-Pp-! /! P !@!/P    t x!!o`h +  " k0Q oooooD "u u0u@uPu`upuuuuuuuuuvv v0v@vPv`vpvvvvvvvvvww w0w@wPw`wpwwwwwwwwwxx x0x@xPx`xpxxxxxxxxxyy y0y@yPy`ypyyyyyyyyyzz z0z@zPz`zpzzzzzzzzz{{ {0{@{P{`{p{{{3@!` "@@ g (" n "@@www w`wwGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1tx GA$3p11130xGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113`vGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY0wGA+GLIBCXX_ASSERTIONSGA+omit_frame_pointer0JGA+stack_clashGA!stack_realignGA*GA! GA*GOW*GA*cf_protectionGA*GA*  S) 8? 8Y 0t r 8 8 8 8 ' O u      ". "O <n 0  < c c  1 T 0s J 0 J c J  ? a ְ'"8 %"&"`#"@$"""&"3 ְ]  ?  ?  ?; wd @7 w  -  ? Z | @""8!"8!"8@!"8""8 4 >P >|  @R c&   s !"!  D  e       '    #  K  q  S   ?  ?  z!`  "!  ;  S  |  o  N  o    L;  i      S  99 @!`  `+  /E  8_  8}  r    8  8  8 89 `a  `    r  G m |B  ~  ~ D Ef   Vc  ' E r  @D     > DW x  ȇ   Oc 4 &R &|  B   B > \ 6Du   zB  1 BS x    B + P @Cp   c  < B]    O (B  O1 T jgr   ыB  j" BA jk     09 UZ 0  ߌB   !DA n  eB   D 2 O g  + + Z  Z0 SR Bo S  Ac  n B/ nU 8y \ 8  BB > g \  I B I  G 5  "kQ  G s  I    I     B! $! 4D! VD_! 4! P! P! 5! B" 5>" i" ܑC" " " " # I# p# # # NB# $ |6$ BT$ |}$ 0$ ғc$ 0$ % 5B>% i% z% wB% z% k& B(& kS& |& B& & & =' .' T' ĕBu' ' )' D' )' ?( JD8( ?Z( iz( D( i( N ( ҖB( N  ) !+) BF) !n) !) V) !) "* B$* "I* #l* @B* #* $* D* $+ %6+ ƘBS+ %z+ '+ B+ '+ y(, JBC, y(o, ), B, ), * - ΙD-- *T- ,y- B- ,- ]-- TB- ]-". l-F. l-k. /. B. /. /. ؚB/ /2/ DM/ 8h/ 8/ / c/ 8/ 8 0 8)0 8I0 /q0 /0 /0 /0 00 /1 071 0X1 0l1 N1 01 D11 01 hN2 D132 1T2 P1h2 N2 12 22 12 !3 2*3 }3J3 2]3 %Nx3 }33 M43 33 sN3 M44 5.4 P4=4 NT4 5w4 54 54 N4 54 65 55 ]N,5 6S5 e7x5 65 e75 585 p75 N6 586 9<6 @8L6 Nd6 96 K:6 9;6 G#6 K:7 ;"7 P:O77 j#T7 ;w7 5<7 ;7 !7 7 О8 "&8 "D8 "d8 "x8 "8 5<8 <8 @<8 О 8 <9 7=.9 <W?9 ݞX9 7=t9 =9 @=W9 9 9 9 : .): .E: .`: .~: .: .: .: .: .; .'; .D; .f; =; >; =d; 9.; >< t><< >dW< g.z< t>< >< >d< .< >= T?2= >dB= ß.Z= T?~= ?= `?= += ?= <@> ?L6> +V> <@> @> @@L> G+> @? @? @T.? r+F? @k? DA? @T? +? DA? A @ PAT @ Ƞ+>@ A`@ Yy ny py g8`hk t u { 0 xxp!! ! " " "!"(byyyyyyz$zBzQzgz zzzzzz { {0{<{S{h{x{{{{{ "{{|!|*|7|E|]|q||| &|||| }$}4}H}W}t}}}}}}}}~.~H~_~{~~ ~~~~~~1Ik~3wO("H_ js "Ѐ׀4J_p{<|Ł&; Uhӂ" '<K`z.annobin_mysqli.c.annobin_mysqli.c_end.annobin_mysqli.c.hot.annobin_mysqli.c_end.hot.annobin_mysqli.c.unlikely.annobin_mysqli.c_end.unlikely.annobin_mysqli.c.startup.annobin_mysqli.c_end.startup.annobin_mysqli.c.exit.annobin_mysqli.c_end.exit.annobin_php_mysqli_dtor_p_elements.start.annobin_php_mysqli_dtor_p_elements.end.annobin_zm_globals_ctor_mysqli.start.annobin_zm_globals_ctor_mysqli.endzm_globals_ctor_mysqli.annobin_zm_activate_mysqli.start.annobin_zm_activate_mysqli.end.annobin_php_mysqli_dtor.start.annobin_php_mysqli_dtor.end.annobin_free_prop_handler.start.annobin_free_prop_handler.endfree_prop_handler.annobin_zm_deactivate_mysqli.start.annobin_zm_deactivate_mysqli.end.annobin_mysqli_read_property.start.annobin_mysqli_read_property.end.annobin_mysqli_write_property.start.annobin_mysqli_write_property.end.annobin_mysqli_write_na.start.annobin_mysqli_write_na.endmysqli_write_na.annobin_mysqli_read_na.start.annobin_mysqli_read_na.endmysqli_read_na.annobin_mysqli_object_get_debug_info.start.annobin_mysqli_object_get_debug_info.end.annobin_mysqli_objects_new.start.annobin_mysqli_objects_new.endclassesmysqli_object_link_handlersmysqli_object_driver_handlersmysqli_object_stmt_handlersmysqli_object_result_handlersmysqli_object_warning_handlersmysqli_object_handlers.annobin_mysqli_object_has_property.start.annobin_mysqli_object_has_property.endmysqli_object_has_property.annobin_mysqli_objects_free_storage.start.annobin_mysqli_objects_free_storage.endmysqli_objects_free_storage.annobin_mysqli_warning_free_storage.start.annobin_mysqli_warning_free_storage.endmysqli_warning_free_storage.annobin_mysqli_result_free_storage.start.annobin_mysqli_result_free_storage.endmysqli_result_free_storage.annobin_mysqli_driver_free_storage.start.annobin_mysqli_driver_free_storage.endmysqli_driver_free_storage.annobin_zm_shutdown_mysqli.start.annobin_zm_shutdown_mysqli.endmysqli_driver_propertiesmysqli_result_propertiesmysqli_stmt_propertiesmysqli_warning_propertiesmysqli_link_properties.annobin_zm_info_mysqli.start.annobin_zm_info_mysqli.end.annobin_mysqli_convert_zv_to_mysqlnd.start.annobin_mysqli_convert_zv_to_mysqlnd.endmysqli_convert_zv_to_mysqlndmysqli_convert_zv_to_mysqlnd.cold.2.annobin_php_le_pmysqli.start.annobin_php_le_pmysqli.end.annobin_php_clear_stmt_bind.start.annobin_php_clear_stmt_bind.endphp_clear_stmt_bind.cold.3.annobin_mysqli_stmt_free_storage.start.annobin_mysqli_stmt_free_storage.endmysqli_stmt_free_storage.annobin_php_clear_mysql.start.annobin_php_clear_mysql.end.annobin_mysqli_link_free_storage.start.annobin_mysqli_link_free_storage.endmysqli_link_free_storage.annobin_mysqli_add_property.start.annobin_mysqli_add_property.end.annobin_zm_startup_mysqli.start.annobin_zm_startup_mysqli.endmysqli_reverse_api.annobin_get_module.start.annobin_get_module.end.annobin_zif_mysqli_stmt_construct.start.annobin_zif_mysqli_stmt_construct.endzif_mysqli_stmt_construct.cold.4.annobin_zif_mysqli_result_construct.start.annobin_zif_mysqli_result_construct.endzif_mysqli_result_construct.cold.5.annobin_php_mysqli_fetch_into_hash_aux.start.annobin_php_mysqli_fetch_into_hash_aux.end.annobin_php_mysqli_fetch_into_hash.start.annobin_php_mysqli_fetch_into_hash.endphp_mysqli_fetch_into_hash.cold.6mysqli_deps.annobin_mysqli_api.c.annobin_mysqli_api.c_end.annobin_mysqli_api.c.hot.annobin_mysqli_api.c_end.hot.annobin_mysqli_api.c.unlikely.annobin_mysqli_api.c_end.unlikely.annobin_mysqli_api.c.startup.annobin_mysqli_api.c_end.startup.annobin_mysqli_api.c.exit.annobin_mysqli_api.c_end.exit.annobin_php_add_field_properties.start.annobin_php_add_field_properties.endphp_add_field_properties.annobin_php_mysqli_init.part.2.start.annobin_php_mysqli_init.part.2.endphp_mysqli_init.part.2php_mysqli_init.part.2.cold.3.annobin_zif_mysqli_affected_rows.start.annobin_zif_mysqli_affected_rows.endzif_mysqli_affected_rows.cold.4.annobin_zif_mysqli_autocommit.start.annobin_zif_mysqli_autocommit.endzif_mysqli_autocommit.cold.5.annobin_zif_mysqli_stmt_bind_param.start.annobin_zif_mysqli_stmt_bind_param.endzif_mysqli_stmt_bind_param.cold.6.annobin_zif_mysqli_stmt_bind_result.start.annobin_zif_mysqli_stmt_bind_result.endzif_mysqli_stmt_bind_result.cold.7.annobin_zif_mysqli_change_user.start.annobin_zif_mysqli_change_user.endzif_mysqli_change_user.cold.8.annobin_zif_mysqli_character_set_name.start.annobin_zif_mysqli_character_set_name.endzif_mysqli_character_set_name.cold.9.annobin_php_mysqli_close.start.annobin_php_mysqli_close.end.annobin_zif_mysqli_close.start.annobin_zif_mysqli_close.endzif_mysqli_close.cold.10.annobin_zif_mysqli_commit.start.annobin_zif_mysqli_commit.endzif_mysqli_commit.cold.11.annobin_zif_mysqli_data_seek.start.annobin_zif_mysqli_data_seek.endzif_mysqli_data_seek.cold.12.annobin_zif_mysqli_debug.start.annobin_zif_mysqli_debug.end.annobin_zif_mysqli_dump_debug_info.start.annobin_zif_mysqli_dump_debug_info.endzif_mysqli_dump_debug_info.cold.13.annobin_zif_mysqli_errno.start.annobin_zif_mysqli_errno.endzif_mysqli_errno.cold.14.annobin_zif_mysqli_error.start.annobin_zif_mysqli_error.endzif_mysqli_error.cold.15.annobin_zif_mysqli_stmt_execute.start.annobin_zif_mysqli_stmt_execute.endzif_mysqli_stmt_execute.cold.16.annobin_mysqli_stmt_fetch_mysqlnd.start.annobin_mysqli_stmt_fetch_mysqlnd.endmysqli_stmt_fetch_mysqlnd.cold.17.annobin_zif_mysqli_stmt_fetch.start.annobin_zif_mysqli_stmt_fetch.end.annobin_zif_mysqli_fetch_field.start.annobin_zif_mysqli_fetch_field.endzif_mysqli_fetch_field.cold.18.annobin_zif_mysqli_fetch_fields.start.annobin_zif_mysqli_fetch_fields.endzif_mysqli_fetch_fields.cold.19.annobin_zif_mysqli_fetch_field_direct.start.annobin_zif_mysqli_fetch_field_direct.endzif_mysqli_fetch_field_direct.cold.20.annobin_zif_mysqli_fetch_lengths.start.annobin_zif_mysqli_fetch_lengths.endzif_mysqli_fetch_lengths.cold.21.annobin_zif_mysqli_fetch_row.start.annobin_zif_mysqli_fetch_row.end.annobin_zif_mysqli_field_count.start.annobin_zif_mysqli_field_count.endzif_mysqli_field_count.cold.22.annobin_zif_mysqli_field_seek.start.annobin_zif_mysqli_field_seek.endzif_mysqli_field_seek.cold.23.annobin_zif_mysqli_field_tell.start.annobin_zif_mysqli_field_tell.endzif_mysqli_field_tell.cold.24.annobin_zif_mysqli_free_result.start.annobin_zif_mysqli_free_result.endzif_mysqli_free_result.cold.25.annobin_zif_mysqli_get_client_info.start.annobin_zif_mysqli_get_client_info.end.annobin_zif_mysqli_get_client_version.start.annobin_zif_mysqli_get_client_version.end.annobin_zif_mysqli_get_host_info.start.annobin_zif_mysqli_get_host_info.endzif_mysqli_get_host_info.cold.26.annobin_zif_mysqli_get_proto_info.start.annobin_zif_mysqli_get_proto_info.endzif_mysqli_get_proto_info.cold.27.annobin_zif_mysqli_get_server_info.start.annobin_zif_mysqli_get_server_info.endzif_mysqli_get_server_info.cold.28.annobin_zif_mysqli_get_server_version.start.annobin_zif_mysqli_get_server_version.endzif_mysqli_get_server_version.cold.29.annobin_zif_mysqli_info.start.annobin_zif_mysqli_info.endzif_mysqli_info.cold.30.annobin_php_mysqli_init.start.annobin_php_mysqli_init.endphp_mysqli_init.cold.31.annobin_zif_mysqli_init.start.annobin_zif_mysqli_init.end.annobin_zif_mysqli_init_method.start.annobin_zif_mysqli_init_method.endzif_mysqli_init_method.cold.32.annobin_zif_mysqli_insert_id.start.annobin_zif_mysqli_insert_id.endzif_mysqli_insert_id.cold.33.annobin_zif_mysqli_kill.start.annobin_zif_mysqli_kill.endzif_mysqli_kill.cold.34.annobin_zif_mysqli_more_results.start.annobin_zif_mysqli_more_results.endzif_mysqli_more_results.cold.35.annobin_zif_mysqli_next_result.start.annobin_zif_mysqli_next_result.endzif_mysqli_next_result.cold.36.annobin_zif_mysqli_stmt_more_results.start.annobin_zif_mysqli_stmt_more_results.endzif_mysqli_stmt_more_results.cold.37.annobin_zif_mysqli_stmt_next_result.start.annobin_zif_mysqli_stmt_next_result.endzif_mysqli_stmt_next_result.cold.38.annobin_zif_mysqli_num_fields.start.annobin_zif_mysqli_num_fields.endzif_mysqli_num_fields.cold.39.annobin_zif_mysqli_num_rows.start.annobin_zif_mysqli_num_rows.endzif_mysqli_num_rows.cold.40.annobin_zif_mysqli_options.start.annobin_zif_mysqli_options.endzif_mysqli_options.cold.41.annobin_zif_mysqli_ping.start.annobin_zif_mysqli_ping.endzif_mysqli_ping.cold.42.annobin_zif_mysqli_prepare.start.annobin_zif_mysqli_prepare.endzif_mysqli_prepare.cold.43.annobin_zif_mysqli_real_connect.start.annobin_zif_mysqli_real_connect.end.annobin_zif_mysqli_real_query.start.annobin_zif_mysqli_real_query.endzif_mysqli_real_query.cold.44.annobin_zif_mysqli_real_escape_string.start.annobin_zif_mysqli_real_escape_string.endzif_mysqli_real_escape_string.cold.45.annobin_zif_mysqli_rollback.start.annobin_zif_mysqli_rollback.endzif_mysqli_rollback.cold.46.annobin_zif_mysqli_stmt_send_long_data.start.annobin_zif_mysqli_stmt_send_long_data.endzif_mysqli_stmt_send_long_data.cold.47.annobin_zif_mysqli_stmt_affected_rows.start.annobin_zif_mysqli_stmt_affected_rows.endzif_mysqli_stmt_affected_rows.cold.48.annobin_zif_mysqli_stmt_close.start.annobin_zif_mysqli_stmt_close.endzif_mysqli_stmt_close.cold.49.annobin_zif_mysqli_stmt_data_seek.start.annobin_zif_mysqli_stmt_data_seek.endzif_mysqli_stmt_data_seek.cold.50.annobin_zif_mysqli_stmt_field_count.start.annobin_zif_mysqli_stmt_field_count.endzif_mysqli_stmt_field_count.cold.51.annobin_zif_mysqli_stmt_free_result.start.annobin_zif_mysqli_stmt_free_result.endzif_mysqli_stmt_free_result.cold.52.annobin_zif_mysqli_stmt_insert_id.start.annobin_zif_mysqli_stmt_insert_id.endzif_mysqli_stmt_insert_id.cold.53.annobin_zif_mysqli_stmt_param_count.start.annobin_zif_mysqli_stmt_param_count.endzif_mysqli_stmt_param_count.cold.54.annobin_zif_mysqli_stmt_reset.start.annobin_zif_mysqli_stmt_reset.endzif_mysqli_stmt_reset.cold.55.annobin_zif_mysqli_stmt_num_rows.start.annobin_zif_mysqli_stmt_num_rows.endzif_mysqli_stmt_num_rows.cold.56.annobin_zif_mysqli_select_db.start.annobin_zif_mysqli_select_db.endzif_mysqli_select_db.cold.57.annobin_zif_mysqli_sqlstate.start.annobin_zif_mysqli_sqlstate.endzif_mysqli_sqlstate.cold.58.annobin_zif_mysqli_ssl_set.start.annobin_zif_mysqli_ssl_set.endzif_mysqli_ssl_set.cold.59.annobin_zif_mysqli_stat.start.annobin_zif_mysqli_stat.endzif_mysqli_stat.cold.60.annobin_zif_mysqli_refresh.start.annobin_zif_mysqli_refresh.endzif_mysqli_refresh.cold.61.annobin_zif_mysqli_stmt_attr_set.start.annobin_zif_mysqli_stmt_attr_set.endzif_mysqli_stmt_attr_set.cold.62.annobin_zif_mysqli_stmt_attr_get.start.annobin_zif_mysqli_stmt_attr_get.endzif_mysqli_stmt_attr_get.cold.63.annobin_zif_mysqli_stmt_errno.start.annobin_zif_mysqli_stmt_errno.endzif_mysqli_stmt_errno.cold.64.annobin_zif_mysqli_stmt_error.start.annobin_zif_mysqli_stmt_error.endzif_mysqli_stmt_error.cold.65.annobin_zif_mysqli_stmt_init.start.annobin_zif_mysqli_stmt_init.endzif_mysqli_stmt_init.cold.66.annobin_zif_mysqli_stmt_prepare.start.annobin_zif_mysqli_stmt_prepare.endzif_mysqli_stmt_prepare.cold.67.annobin_zif_mysqli_stmt_result_metadata.start.annobin_zif_mysqli_stmt_result_metadata.endzif_mysqli_stmt_result_metadata.cold.68.annobin_zif_mysqli_stmt_store_result.start.annobin_zif_mysqli_stmt_store_result.endzif_mysqli_stmt_store_result.cold.69.annobin_zif_mysqli_stmt_sqlstate.start.annobin_zif_mysqli_stmt_sqlstate.endzif_mysqli_stmt_sqlstate.cold.70.annobin_zif_mysqli_store_result.start.annobin_zif_mysqli_store_result.endzif_mysqli_store_result.cold.71.annobin_zif_mysqli_thread_id.start.annobin_zif_mysqli_thread_id.endzif_mysqli_thread_id.cold.72.annobin_zif_mysqli_thread_safe.start.annobin_zif_mysqli_thread_safe.end.annobin_zif_mysqli_use_result.start.annobin_zif_mysqli_use_result.endzif_mysqli_use_result.cold.73.annobin_zif_mysqli_warning_count.start.annobin_zif_mysqli_warning_count.endzif_mysqli_warning_count.cold.74.annobin_mysqli_prop.c.annobin_mysqli_prop.c_end.annobin_mysqli_prop.c.hot.annobin_mysqli_prop.c_end.hot.annobin_mysqli_prop.c.unlikely.annobin_mysqli_prop.c_end.unlikely.annobin_mysqli_prop.c.startup.annobin_mysqli_prop.c_end.startup.annobin_mysqli_prop.c.exit.annobin_mysqli_prop.c_end.exit.annobin_link_client_version_read.start.annobin_link_client_version_read.endlink_client_version_read.annobin_link_connect_errno_read.start.annobin_link_connect_errno_read.endlink_connect_errno_read.annobin_link_thread_id_read.start.annobin_link_thread_id_read.endlink_thread_id_readlink_thread_id_read.cold.17.annobin_link_server_version_read.start.annobin_link_server_version_read.endlink_server_version_readlink_server_version_read.cold.18.annobin_link_insert_id_read.start.annobin_link_insert_id_read.endlink_insert_id_readlink_insert_id_read.cold.19.annobin_link_affected_rows_read.start.annobin_link_affected_rows_read.endlink_affected_rows_readlink_affected_rows_read.cold.20.annobin_link_sqlstate_read.start.annobin_link_sqlstate_read.endlink_sqlstate_readlink_sqlstate_read.cold.21.annobin_link_server_info_read.start.annobin_link_server_info_read.endlink_server_info_readlink_server_info_read.cold.22.annobin_link_info_read.start.annobin_link_info_read.endlink_info_readlink_info_read.cold.23.annobin_link_host_info_read.start.annobin_link_host_info_read.endlink_host_info_readlink_host_info_read.cold.24.annobin_link_error_read.start.annobin_link_error_read.endlink_error_readlink_error_read.cold.25.annobin_link_connect_error_read.start.annobin_link_connect_error_read.endlink_connect_error_read.annobin_stmt_sqlstate_read.start.annobin_stmt_sqlstate_read.endstmt_sqlstate_readstmt_sqlstate_read.cold.26.annobin_stmt_error_read.start.annobin_stmt_error_read.endstmt_error_readstmt_error_read.cold.27.annobin_link_error_list_read.start.annobin_link_error_list_read.endlink_error_list_readlink_error_list_read.cold.28.annobin_stmt_error_list_read.start.annobin_stmt_error_list_read.endstmt_error_list_readstmt_error_list_read.cold.29.annobin_result_lengths_read.start.annobin_result_lengths_read.endresult_lengths_readresult_lengths_read.cold.30.annobin_link_stat_read.part.0.start.annobin_link_stat_read.part.0.endlink_stat_read.part.0link_client_info_read.part.16stmt_affected_rows_read.part.15stmt_id_read.part.2result_type_read.part.1.annobin_link_stat_read.start.annobin_link_stat_read.endlink_stat_readlink_stat_read.cold.31.annobin_result_type_read.start.annobin_result_type_read.endresult_type_readresult_type_read.cold.32.annobin_stmt_id_read.start.annobin_stmt_id_read.endstmt_id_readstmt_id_read.cold.33.annobin_link_warning_count_read.part.3.start.annobin_link_warning_count_read.part.3.endlink_warning_count_read.part.3stmt_insert_id_read.part.14stmt_num_rows_read.part.13stmt_param_count_read.part.12stmt_field_count_read.part.11stmt_errno_read.part.10result_current_field_read.part.9result_field_count_read.part.8result_num_rows_read.part.7link_errno_read.part.6link_field_count_read.part.5link_protocol_version_read.part.4.annobin_link_warning_count_read.start.annobin_link_warning_count_read.endlink_warning_count_readlink_warning_count_read.cold.34.annobin_link_protocol_version_read.start.annobin_link_protocol_version_read.endlink_protocol_version_readlink_protocol_version_read.cold.35.annobin_link_field_count_read.start.annobin_link_field_count_read.endlink_field_count_readlink_field_count_read.cold.36.annobin_link_errno_read.start.annobin_link_errno_read.endlink_errno_readlink_errno_read.cold.37.annobin_result_num_rows_read.start.annobin_result_num_rows_read.endresult_num_rows_readresult_num_rows_read.cold.38.annobin_result_field_count_read.start.annobin_result_field_count_read.endresult_field_count_readresult_field_count_read.cold.39.annobin_result_current_field_read.start.annobin_result_current_field_read.endresult_current_field_readresult_current_field_read.cold.40.annobin_stmt_errno_read.start.annobin_stmt_errno_read.endstmt_errno_readstmt_errno_read.cold.41.annobin_stmt_field_count_read.start.annobin_stmt_field_count_read.endstmt_field_count_readstmt_field_count_read.cold.42.annobin_stmt_param_count_read.start.annobin_stmt_param_count_read.endstmt_param_count_readstmt_param_count_read.cold.43.annobin_stmt_num_rows_read.start.annobin_stmt_num_rows_read.endstmt_num_rows_readstmt_num_rows_read.cold.44.annobin_stmt_insert_id_read.start.annobin_stmt_insert_id_read.endstmt_insert_id_readstmt_insert_id_read.cold.45.annobin_stmt_affected_rows_read.start.annobin_stmt_affected_rows_read.endstmt_affected_rows_readstmt_affected_rows_read.cold.46.annobin_link_client_info_read.start.annobin_link_client_info_read.endlink_client_info_readlink_client_info_read.cold.47.annobin_mysqli_nonapi.c.annobin_mysqli_nonapi.c_end.annobin_mysqli_nonapi.c.hot.annobin_mysqli_nonapi.c_end.hot.annobin_mysqli_nonapi.c.unlikely.annobin_mysqli_nonapi.c_end.unlikely.annobin_mysqli_nonapi.c.startup.annobin_mysqli_nonapi.c_end.startup.annobin_mysqli_nonapi.c.exit.annobin_mysqli_nonapi.c_end.exit.annobin_mysqlnd_zval_array_from_mysqlnd_array.start.annobin_mysqlnd_zval_array_from_mysqlnd_array.endmysqlnd_zval_array_from_mysqlnd_arraymysqlnd_zval_array_from_mysqlnd_array.cold.4.annobin_php_mysqli_set_error.start.annobin_php_mysqli_set_error.endphp_mysqli_set_error.annobin_mysqlnd_zval_array_to_mysqlnd_array.isra.1.part.2.start.annobin_mysqlnd_zval_array_to_mysqlnd_array.isra.1.part.2.endmysqlnd_zval_array_to_mysqlnd_array.isra.1.part.2mysqlnd_zval_array_to_mysqlnd_array.isra.1.part.2.cold.5.annobin_mysqli_common_connect.start.annobin_mysqli_common_connect.endmysqli_common_connect.cold.6.annobin_zif_mysqli_connect.start.annobin_zif_mysqli_connect.end.annobin_zif_mysqli_link_construct.start.annobin_zif_mysqli_link_construct.end.annobin_zif_mysqli_connect_errno.start.annobin_zif_mysqli_connect_errno.end.annobin_zif_mysqli_connect_error.start.annobin_zif_mysqli_connect_error.end.annobin_zif_mysqli_fetch_array.start.annobin_zif_mysqli_fetch_array.end.annobin_zif_mysqli_fetch_assoc.start.annobin_zif_mysqli_fetch_assoc.end.annobin_zif_mysqli_fetch_all.start.annobin_zif_mysqli_fetch_all.endzif_mysqli_fetch_all.cold.7.annobin_zif_mysqli_get_client_stats.start.annobin_zif_mysqli_get_client_stats.end.annobin_zif_mysqli_get_connection_stats.start.annobin_zif_mysqli_get_connection_stats.endzif_mysqli_get_connection_stats.cold.8.annobin_zif_mysqli_error_list.start.annobin_zif_mysqli_error_list.endzif_mysqli_error_list.cold.9.annobin_zif_mysqli_stmt_error_list.start.annobin_zif_mysqli_stmt_error_list.endzif_mysqli_stmt_error_list.cold.10.annobin_zif_mysqli_fetch_object.start.annobin_zif_mysqli_fetch_object.end.annobin_zif_mysqli_multi_query.start.annobin_zif_mysqli_multi_query.endzif_mysqli_multi_query.cold.11.annobin_zif_mysqli_query.start.annobin_zif_mysqli_query.endzif_mysqli_query.cold.12.annobin_zif_mysqli_poll.start.annobin_zif_mysqli_poll.endzif_mysqli_poll.cold.13.annobin_zif_mysqli_reap_async_query.start.annobin_zif_mysqli_reap_async_query.endzif_mysqli_reap_async_query.cold.14.annobin_zif_mysqli_stmt_get_result.start.annobin_zif_mysqli_stmt_get_result.endzif_mysqli_stmt_get_result.cold.15.annobin_zif_mysqli_get_warnings.start.annobin_zif_mysqli_get_warnings.endzif_mysqli_get_warnings.cold.16.annobin_zif_mysqli_stmt_get_warnings.start.annobin_zif_mysqli_stmt_get_warnings.endzif_mysqli_stmt_get_warnings.cold.17.annobin_zif_mysqli_set_charset.start.annobin_zif_mysqli_set_charset.endzif_mysqli_set_charset.cold.18.annobin_zif_mysqli_get_charset.start.annobin_zif_mysqli_get_charset.endzif_mysqli_get_charset.cold.19.annobin_zif_mysqli_begin_transaction.start.annobin_zif_mysqli_begin_transaction.endzif_mysqli_begin_transaction.cold.20.annobin_zif_mysqli_savepoint.start.annobin_zif_mysqli_savepoint.endzif_mysqli_savepoint.cold.21.annobin_zif_mysqli_release_savepoint.start.annobin_zif_mysqli_release_savepoint.end.annobin_zif_mysqli_get_links_stats.start.annobin_zif_mysqli_get_links_stats.endzif_mysqli_get_links_stats.cold.22.annobin_mysqli_fe.c.annobin_mysqli_fe.c_end.annobin_mysqli_fe.c.hot.annobin_mysqli_fe.c_end.hot.annobin_mysqli_fe.c.unlikely.annobin_mysqli_fe.c_end.unlikely.annobin_mysqli_fe.c.startup.annobin_mysqli_fe.c_end.startup.annobin_mysqli_fe.c.exit.annobin_mysqli_fe.c_end.exitarginfo_class_mysqli_stmt_attr_getarginfo_class_mysqli_stmt_attr_setarginfo_class_mysqli_stmt_bind_paramarginfo_class_mysqli_stmt_bind_resultarginfo_mysqli_no_paramsarginfo_class_mysqli_data_seekarginfo_class_mysqli_stmt_send_long_dataarginfo_class_mysqli_preparearginfo_class_mysqli_result_and_fieldnrarginfo_class_mysqli_fetch_arrayarginfo_class_mysqli_fetch_objectarginfo_class_mysqli_autocommitarginfo_class_mysqli_begin_transactionarginfo_class_mysqli_change_userarginfo_class_mysqli_commitarginfo_mysqli_connectarginfo_mysqli_debugarginfo_class_mysqli_killarginfo_class_mysqli_multi_queryarginfo_class_mysqli_optionsarginfo_mysqli_pollarginfo_class_mysqli_queryarginfo_class_mysqli_real_connectarginfo_class_mysqli_real_escape_stringarginfo_class_mysqli_real_queryarginfo_class_mysqli_release_savepointarginfo_class_mysqli_rollbackarginfo_class_mysqli_savepointarginfo_class_mysqli_select_dbarginfo_class_mysqli_set_charsetarginfo_class_mysqli_ssl_setarginfo_class_store_resultarginfo_class_mysqli_refresharginfo_mysqli_only_linkarginfo_mysqli_autocommitarginfo_mysqli_begin_transactionarginfo_mysqli_change_userarginfo_mysqli_commitarginfo_mysqli_data_seekarginfo_mysqli_only_statementarginfo_mysqli_only_resultarginfo_mysqli_result_and_fieldnrarginfo_mysqli_fetch_arrayarginfo_mysqli_fetch_objectarginfo_mysqli_no_optionsarginfo_mysqli_killarginfo_mysqli_multi_queryarginfo_mysqli_optionsarginfo_mysqli_preparearginfo_mysqli_reportarginfo_mysqli_queryarginfo_mysqli_real_connectarginfo_mysqli_real_escape_stringarginfo_mysqli_real_queryarginfo_mysqli_release_savepointarginfo_mysqli_rollbackarginfo_mysqli_savepointarginfo_mysqli_select_dbarginfo_mysqli_set_charsetarginfo_mysqli_stmt_attr_getarginfo_mysqli_stmt_attr_setarginfo_mysqli_stmt_bind_paramarginfo_mysqli_stmt_bind_resultarginfo_mysqli_stmt_data_seekarginfo_mysqli_stmt_preparearginfo_mysqli_stmt_send_long_dataarginfo_mysqli_ssl_setarginfo_mysqli_store_resultarginfo_mysqli_refresh.annobin_mysqli_report.c.annobin_mysqli_report.c_end.annobin_mysqli_report.c.hot.annobin_mysqli_report.c_end.hot.annobin_mysqli_report.c.unlikely.annobin_mysqli_report.c_end.unlikely.annobin_mysqli_report.c.startup.annobin_mysqli_report.c_end.startup.annobin_mysqli_report.c.exit.annobin_mysqli_report.c_end.exit.annobin_zif_mysqli_report.start.annobin_zif_mysqli_report.end.annobin_php_mysqli_report_error.start.annobin_php_mysqli_report_error.end.annobin_php_mysqli_report_index.start.annobin_php_mysqli_report_index.end.annobin_mysqli_driver.c.annobin_mysqli_driver.c_end.annobin_mysqli_driver.c.hot.annobin_mysqli_driver.c_end.hot.annobin_mysqli_driver.c.unlikely.annobin_mysqli_driver.c_end.unlikely.annobin_mysqli_driver.c.startup.annobin_mysqli_driver.c_end.startup.annobin_mysqli_driver.c.exit.annobin_mysqli_driver.c_end.exit.annobin_driver_report_write.start.annobin_driver_report_write.enddriver_report_write.annobin_driver_embedded_read.start.annobin_driver_embedded_read.enddriver_embedded_read.annobin_driver_client_version_read.start.annobin_driver_client_version_read.enddriver_client_version_read.annobin_driver_driver_version_read.start.annobin_driver_driver_version_read.enddriver_driver_version_read.annobin_driver_reconnect_read.start.annobin_driver_reconnect_read.enddriver_reconnect_read.annobin_driver_reconnect_write.start.annobin_driver_reconnect_write.enddriver_reconnect_write.annobin_driver_report_read.start.annobin_driver_report_read.enddriver_report_read.annobin_driver_client_info_read.start.annobin_driver_client_info_read.enddriver_client_info_read.annobin_zif_mysqli_driver_construct.start.annobin_zif_mysqli_driver_construct.end.annobin_mysqli_warning.c.annobin_mysqli_warning.c_end.annobin_mysqli_warning.c.hot.annobin_mysqli_warning.c_end.hot.annobin_mysqli_warning.c.unlikely.annobin_mysqli_warning.c_end.unlikely.annobin_mysqli_warning.c.startup.annobin_mysqli_warning.c_end.startup.annobin_mysqli_warning.c.exit.annobin_mysqli_warning.c_end.exit.annobin_mysqli_warning_message.start.annobin_mysqli_warning_message.endmysqli_warning_message.annobin_mysqli_warning_sqlstate.start.annobin_mysqli_warning_sqlstate.endmysqli_warning_sqlstate.annobin_mysqli_warning_errno.start.annobin_mysqli_warning_errno.endmysqli_warning_errno.annobin_zim_mysqli_warning_next.start.annobin_zim_mysqli_warning_next.endzim_mysqli_warning_next.cold.1.annobin_php_clear_warnings.start.annobin_php_clear_warnings.end.annobin_php_get_warnings.start.annobin_php_get_warnings.end.annobin_zim_mysqli_warning___construct.start.annobin_zim_mysqli_warning___construct.endzim_mysqli_warning___construct.cold.2.annobin_mysqli_exception.c.annobin_mysqli_exception.c_end.annobin_mysqli_exception.c.hot.annobin_mysqli_exception.c_end.hot.annobin_mysqli_exception.c.unlikely.annobin_mysqli_exception.c_end.unlikely.annobin_mysqli_exception.c.startup.annobin_mysqli_exception.c_end.startup.annobin_mysqli_exception.c.exit.annobin_mysqli_exception.c_end.exit.annobin_php_mysqli_throw_sql_exception.start.annobin_php_mysqli_throw_sql_exception.endphp_mysqli_throw_sql_exception.cold.0.annobin_mysqli_result_iterator.c.annobin_mysqli_result_iterator.c_end.annobin_mysqli_result_iterator.c.hot.annobin_mysqli_result_iterator.c_end.hot.annobin_mysqli_result_iterator.c.unlikely.annobin_mysqli_result_iterator.c_end.unlikely.annobin_mysqli_result_iterator.c.startup.annobin_mysqli_result_iterator.c_end.startup.annobin_mysqli_result_iterator.c.exit.annobin_mysqli_result_iterator.c_end.exit.annobin_php_mysqli_result_iterator_valid.start.annobin_php_mysqli_result_iterator_valid.endphp_mysqli_result_iterator_valid.annobin_php_mysqli_result_iterator_current_data.start.annobin_php_mysqli_result_iterator_current_data.endphp_mysqli_result_iterator_current_data.annobin_php_mysqli_result_iterator_current_key.start.annobin_php_mysqli_result_iterator_current_key.endphp_mysqli_result_iterator_current_key.annobin_php_mysqli_result_iterator_dtor.start.annobin_php_mysqli_result_iterator_dtor.endphp_mysqli_result_iterator_dtor.annobin_php_mysqli_result_iterator_move_forward.start.annobin_php_mysqli_result_iterator_move_forward.endphp_mysqli_result_iterator_move_forwardphp_mysqli_result_iterator_move_forward.cold.0.annobin_php_mysqli_result_iterator_rewind.start.annobin_php_mysqli_result_iterator_rewind.endphp_mysqli_result_iterator_rewindphp_mysqli_result_iterator_rewind.cold.1.annobin_php_mysqli_result_get_iterator.start.annobin_php_mysqli_result_get_iterator.endphp_mysqli_result_get_iterator.cold.2deregister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__mysqli_stmt_fetch_mysqlndphp_get_warningsmysqli_functionszif_mysqli_stmt_send_long_datamysqli_driver_property_entriesmysqli_result_class_entryzif_mysqli_pollmysqli_driver_class_entryzif_mysqli_savepointzif_mysqli_more_resultsphp_mysqli_result_get_iteratorzif_mysqli_affected_rowszif_mysqli_fetch_field_directzif_mysqli_get_charsetzif_mysqli_stmt_errorzif_mysqli_stmt_more_resultszif_mysqli_fetch_assoczif_mysqli_connect_errnomysqli_stmt_class_entryzif_mysqli_free_resultzif_mysqli_insert_idzif_mysqli_get_client_statsphp_mysqli_throw_sql_exceptionphp_mysqli_fetch_into_hash_auxzif_mysqli_character_set_namezim_mysqli_warning___constructphp_mysqli_initzif_mysqli_get_proto_infozif_mysqli_queryzif_mysqli_preparephp_mysqli_dtorzif_mysqli_errorphp_mysqli_dtor_p_elementszif_mysqli_get_host_infozm_startup_mysqlizif_mysqli_fetch_object_finizif_mysqli_get_links_statszif_mysqli_stmt_constructzif_mysqli_optionszif_mysqli_fetch_lengthszif_mysqli_statzif_mysqli_stmt_preparezif_mysqli_real_escape_stringzif_mysqli_get_client_versionzif_mysqli_dump_debug_infomysqli_read_propertyzif_mysqli_stmt_next_resultzif_mysqli_stmt_bind_resultzif_mysqli_use_resultmysqli_object_get_debug_infomysqli_link_property_entriesmysqli_stmt_property_entrieszif_mysqli_infophp_mysqli_report_indexzif_mysqli_rollbackzif_mysqli_init_methodmysqli_result_methodszif_mysqli_set_charsetmysqli_write_propertyzif_mysqli_get_server_versionphp_mysqli_result_iterator_funcszif_mysqli_stmt_resetzif_mysqli_stmt_store_resultzif_mysqli_num_fieldszm_activate_mysqlizif_mysqli_connect_errorphp_mysqli_fetch_into_hashzif_mysqli_get_client_infomysqli_globalszif_mysqli_multi_querymysqli_warning_methodsmysqli_add_propertymysqli_module_entryzif_mysqli_change_usermysqli_exception_methods__dso_handlezif_mysqli_stmt_num_rowszif_mysqli_fetch_allzif_mysqli_store_resultzif_mysqli_refreshzif_mysqli_stmt_get_warningszif_mysqli_debugzif_mysqli_stmt_insert_idzif_mysqli_stmt_initmysqli_common_connectphp_mysqli_closezif_mysqli_reportzif_mysqli_closezif_mysqli_field_seekmysqli_stmt_methodszif_mysqli_result_constructzif_mysqli_ssl_setmysqli_result_property_entriesphp_le_pmysqlimysqli_link_methodszif_mysqli_stmt_errnozm_info_mysqlizif_mysqli_stmt_field_countzif_mysqli_get_server_infozif_mysqli_link_constructzif_mysqli_killzif_mysqli_connectzif_mysqli_stmt_closezif_mysqli_stmt_free_resultzif_mysqli_stmt_param_countzif_mysqli_field_countmysqli_link_class_entryzif_mysqli_release_savepointzif_mysqli_get_connection_statszif_mysqli_warning_countzm_shutdown_mysqlizim_mysqli_warning_nextzif_mysqli_stmt_result_metadatazif_mysqli_stmt_bind_param_DYNAMICmysqli_exception_class_entryzif_mysqli_sqlstatemysqli_driver_methodszif_mysqli_field_tellmysqli_warning_class_entryzif_mysqli_stmt_error_listzif_mysqli_commitphp_clear_warningszif_mysqli_fetch_fieldzif_mysqli_real_queryphp_mysqli_report_errorzif_mysqli_errnophp_clear_stmt_bindzif_mysqli_stmt_attr_setzif_mysqli_thread_safemysqli_warning_property_entrieszif_mysqli_thread_idzif_mysqli_driver_constructzif_mysqli_autocommit__GNU_EH_FRAME_HDRzif_mysqli_stmt_affected_rows__TMC_END___GLOBAL_OFFSET_TABLE_zif_mysqli_stmt_get_resultzif_mysqli_initzif_mysqli_stmt_executezif_mysqli_stmt_fetchzif_mysqli_select_dbzif_mysqli_real_connectzif_mysqli_stmt_attr_getzif_mysqli_get_warningszm_deactivate_mysqlizif_mysqli_stmt_data_seekzif_mysqli_fetch_fieldszif_mysqli_fetch_arrayzif_mysqli_fetch_rowzif_mysqli_error_listzif_mysqli_stmt_sqlstatezif_mysqli_begin_transactionzif_mysqli_reap_async_queryzif_mysqli_num_rowszif_mysqli_pingzif_mysqli_data_seekzif_mysqli_next_resultphp_clear_mysqlzend_ini_boolean_displayer_cbconvert_to_longfree@@GLIBC_2.2.5zend_vspprintfadd_index_longzend_ptr_stack_num_elementsmysqlnd_global_stats__errno_location@@GLIBC_2.2.5_zval_ptr_dtorzend_parse_parameters_ITM_deregisterTMCloneTableadd_property_str_exzend_register_ini_entrieszend_ptr_stack_destroyzend_iterator_initzend_parse_method_parameterszend_ce_exceptionOnUpdateStringUnemptyzend_strpprintf_emalloc_56zend_llist_get_next_exzend_object_std_initap_php_snprintf_zend_hash_str_updatezend_new_interned_stringzend_wrong_param_countzend_declare_property_null_edataadd_next_index_zval_zend_hash_add_zend_get_parameters_array_ex_estrdupOnUpdateBool_safe_emallocmysqlnd_get_client_infostrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4_zval_dtor_funcmysqli_objects_newzend_unregister_ini_entriesphp_info_print_table_rowmysqlnd_connection_init_emalloc_32zend_declare_property_long_zend_hash_initadd_assoc_string_exOnUpdateStringzend_register_internal_classzend_ce_traversablezend_standard_class_def_emalloc_112mysqlnd_reverse_api_register_apiadd_index_zval_erealloczend_llist_get_first_exmysqlnd_connection_connectcalloc@@GLIBC_2.2.5zend_update_property_longzend_ptr_stack_init_exzend_register_long_constant_object_and_properties_init__gmon_start__zval_add_ref_object_initphp_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entriesmysqlnd_pollzend_hash_destroyadd_property_stringl_exzend_register_list_destructors_exzend_call_functionOnUpdateLongzend_throw_exception_exzend_hash_get_current_data_ex__zend_mallocstrncasecmp@@GLIBC_2.2.5zend_register_internal_class_ex__zend_reallocphp_info_print_table_headerzend_throw_exceptionadd_property_string_exget_module_ecalloc_zend_hash_next_index_insertzend_object_std_dtor__bss_start_array_init_convert_to_string_efreezend_declare_property_stringinstanceof_function_object_init_exzend_throw_exception_objectzend_class_implementsadd_property_long_exzend_fetch_classzend_errorzend_update_property_stringspl_ce_RuntimeExceptionzend_merge_propertieszend_hash_internal_pointer_reset_exexecutor_globalszend_hash_move_forward_exadd_assoc_long_exdisplay_link_numbers_ITM_registerTMCloneTableconvert_to_booleanphp_info_print_table_startzend_fcall_info_args_clearzend_throw_error_emalloc_24zend_get_executed_scopezend_get_std_object_handlers__cxa_finalize@@GLIBC_2.2.5mysqlnd_get_client_versionzend_fcall_info_argszend_hash_findzend_ptr_stack_clean_mysqlnd_get_client_statsmysqlnd_debugobject_properties_init.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``88  @hh+ HoUo@d0QnBkk xttsuu~{{00^xx xx  ppt3 !! ! :  "  "  "  !"  0 - (b(!@&j ؐw#PK!a@modules/opcache.sonuȯELF>0@@8 @ && ih ww&w&888$$ Std PtdLLLT T QtdRtd&&eeGNU2wHmJd+P@$BE|qXbE^xmt ^ p H _J(  < $  c  A  < 7 \    7vY 6 X}<V  H G &6  1,bq  oXIph w" ) 7 L y W +  \md5Vy    } c#X FM    6rf E  2 Y _ U+ #  a     /O i <I B ]  k $,  Yj w F"Y ?  6 RW&x'^&`&0&__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalize_efreememcmpmemcpyzend_hash_funcphp_stream_locate_url_wrapperexecutor_globals_setjmp__stack_chk_failzend_empty_stringzend_one_char_string_emalloc_32zend_known_stringscompiler_globalsmodule_registryzend_signal_globalszend_signal_handler_unblockgetcwdzend_interned_string_find_permanentpcre_globalszend_hash_del_bucketPHP_MD5InitPHP_MD5UpdatePHP_MD5Finalsapi_globalssapi_get_request_timerealpath_cache_cleangetpidfcntl__xstatzend_function_dtor_zend_hash_init__errno_locationkillusleepstrerrormemsetfopenfscanffclosemmapmunmapmprotectmadvisezend_errorsapi_modulestrcmpzend_interned_strings_set_request_storage_handler__zend_malloczend_compile_filezend_stream_open_functionzend_resolve_pathzend_hash_str_findzend_extensionszend_llist_del_elementzend_interned_strings_set_permanent_storage_copy_handlerfileno__fxstatzend_message_dispatcher_zend_bailoutcore_globalszend_hash_existsstrlen__memcpy_chkzend_get_executed_filename_exaccess_estrdupstrstrzend_hash_destroyzend_hash_add_empty_element_php_stream_stat_pathzend_file_handle_dtorzend_hash_index_delzend_is_auto_globalzend_extension_entryextension_version_infotsrm_realpathzend_dirnamezend_strndupfgetsexpand_filepath_exexpand_filepathphp_pcre_compilephp_pcre_freecallocglobglobfreephp_pcre_execlocaltimeasctimestderr__fprintf_chkfwrite__vfprintf_chkfputcfflushexitphp_info_print_table_startphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entriesap_php_snprintfzend_unregister_ini_entrieszend_register_ini_entriesstrtolOnUpdateBooladd_next_index_stringlzend_parse_parametersdestroy_op_arrayzend_destroy_file_handle_zend_get_parameters_array_ex_array_initadd_assoc_bool_exadd_assoc_long_exadd_assoc_double_exadd_assoc_zval_ex_zend_hash_str_updateadd_assoc_str_exadd_assoc_stringl_exadd_assoc_string_exzend_startup_modulezend_ini_boolean_displayer_cbOnUpdateLongOnUpdateStringUnemptyOnUpdateStringgc_remove_from_bufferzend_get_constant_strzend_extensions_op_array_persistzend_hash_applyzend_extensions_op_array_persist_calc__snprintf_chkmkstempfchmodunlinkzend_hash_index_find_zend_hash_index_add_newzend_hash_cleandestroy_zend_classdestroy_zend_function_efree_56_emalloc_112_zend_hash_updatezend_hash_extendzend_hash_findzend_set_compiled_filenamezend_get_object_type_emalloc_24_emalloc_16_emalloc_448zend_hash_apply_with_argument_emalloc_224zend_mangle_property_namezend_do_delayed_early_bindingzend_register_long_constantshmdtshmgetshmatshmctl_zval_dtor_funczend_vm_set_opcode_handler_zend_hash_add_zval_copy_ctor_func_emalloc_80get_binary_opzend_binary_op_produces_numeric_string_error_zval_get_long_funcget_unary_opzend_is_trueconvert_to_array_zval_get_double_func_zval_get_string_func_erealloczif_display_disabled_function_convert_to_stringzend_string_tolowermemmove_zend_handle_numeric_str_exzend_str_tolower_emalloc_largezend_vm_set_opcode_handler_exstrncasecmpzend_binary_strcasecmpmemchr_is_numeric_string_exconvert_to_longconvert_scalar_to_numberzend_get_call_opzend_is_smart_branchzend_new_interned_string_zend_hash_add_new_zend_hash_str_addzend_sort_emalloc_56_zval_ptr_dtor_zend_hash_index_addzend_array_destroyinstanceof_functionzend_get_opcode_namezend_ce_generatorzend_get_resource_handlezend_is_identicalincrement_function_zend_hash_index_update_zend_hash_next_index_insertdecrement_function_safe_emalloczend_hash_index_existscompare_functionzend_dval_to_lval_slowfputszend_get_opcode_flagslibc.so.6_edata__bss_startopcache.soGLIBC_2.27GLIBC_2.14GLIBC_2.4GLIBC_2.3.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64Muii ti ui && & &@&X<P&=`&=p&=&yH&yH&H8&x&H&&&&&&O0&-OH&:O`&@p&0rx&Ì&s&ʌ& w&Ҍ&s&݌& w&&&\ &0&|8&P&h&!&3&B&G&V&f&x&(&@&X&p&\&|&&͍&&&& &!0&5H&J`&bx&O&x&&&&Ǝ &֎ &\0 &|8 &P &\h & & &  & & && &7!&w(!&@@!&IX!&Zp!&g!&z!&!&!&!&"&"&ɏ0"&ϏH"&ُ`"&x"&"&"&"&7"&?"&J#&U #&c8#&mP#&h#&#&#&#&#&#&#&$&($&J@$&_X$&Tp$&j$&Ő$&̐$&Ӑ$&ې$&%&\%&0%&H%&`%&vx%&%&%&%&%&)%&3&&; &&J8&&RP&&h&&_&&n&&x&&&&&&&&'&('&@'&bX'&p'&'&ˑ'&ב'&'&'&(&(&0(& H(&`(&x(& (&+(&7(&?(&(&K)&N )&O8)&ZP)&bh)&g)&w)&)&n)&v)&)&*&(*&@*&X*&p*&*&*&*&*&˒*&Ԓ+&ݒ+&0+&H+&`+&x+&+&+&U+&+&+&&,&1 ,&@8,&PP,&]h,&e,&n,&Z,&b,&k,&y,&-&(-&@-&X-&p-&Ǔ-&Г-&ۓ-&-&-&.&.&"0.&8H.&H`.&Yx.&j.&n.&s.&y.&.&/& /&8/&P/&h/&/&/&/&/&/&/&0&(0&@0&jGX0&p0&0&Ô0&ϔ0&Ӕ0&F0&ה1&ݔ1&01&H1&`1&x1&1&1& 1&1&1&k1&"2&/ 2&=82&BP2&Lh2&V2&^2&f2&m2&t2&{2&3&(3&@3&X3&p3&ʕ3&3&3&3&3&.4&l4&:04&SH4&h`4&Fx4&4&4&4&4&Ŗ4&ܖ5& 5& 85& P5&h5&5&*5&:5&B5&S5&i5&6&(6&@6&X6&p6&ɗ6&ޗ6&6&6&6&7&7&!07&2H7&G`7&Qx7&7&^7&l7&y7&7&8& 8&88&ИP8&ߘh8&8&8&8&"8&08&?8&K9&R(9&[@9&eX9&lp9&t9&|9&9&r9&9&9&r9&9&r:&:&r:&(:&r0:&@:&rH:&ÙX:&r`:&͙p:&rx:&ՙ:&:&r:&:&r:&:&:&\;& ;&8;&P;&h;&;&#;&);&0;&5;&;;&A<&H(<&N@<&TX<&^p<&h<&n<&t<&z<&<&=&=&0=&cH=&`=&x=&=&=&=&Ϛ=&ݚ=&>&  >&'8>&AP>&\h>&w>&>&>&>&қ>&>&?&(?&(@?&?X?&Tp?&p?&?&?&?&Ĝ?&ٜ@&@&0@&H@&`@&x@&,@&<@&R@&f@&z@&A& A&8A&˝PA&hA&A&A&(A&>A&ZA&jA&vB&(B&@B&XB&pB&B&B&̞B&ʞB&ўB&ݞC&C&0C&<HC&`C&xC&C& C&dC&C&C&!D&+ D&58D&?PD&IhD&SD&]D&gD&pD&GD&yD&E&G(E&@E&GXE&pE&E&E&E&E&E&F&F&ß0F&ɟHF&ϟ`F&ޟxF&F&F& F&!F&F&4G&? G&G8G&NPG&WhG&aG&kG&tG&}G&G&G&H&(H&@H&ȠXH&ՠpH&H&H&H&FH&H&I&%I&?0I&1HI&@`I&2xI&8I&>I&EI&I&LI&WJ&# J&r8J&lPJ&qhJ&HJ&vJ&J&~J&uJ&J&K&N(K&N@K&XK&pK&K&0lK&K&ɡK&ԡK&ޡK&L&L&0L&HL&`L&3xL&AL&YL&dL&qL&L&M& M&8M&PM&hM&עM&M&M&M&M&(M&9N&O(N&f@N&}XN&pN&N&N&N&ˣN&ܣN&O&O&0O&HO&+`O&8xO&BO&NO&\O&{O&mO&bP&O P&t8P&PP&hP&P&P&P&̤P&P&P&Q&&(Q&=@Q&WXQ&hpQ&HQ&HQ&rQ&{Q&yQ&R&R&0R&DHR&`R&xR&R&R&˥R&R&R&S& S&8S&&PS&2hS&;S&DS&VS&hS&xS&S&T&(T&@T&¦XT&զpT&T&T& T&!T&:T&PU&jU&0U&(HU&`U&xU&ʧU&U&U&U& U&V&% V&28V&HPV&ThV&_V&jV&tV&V&V&V&W&I(W&@W&XW&pW&W&W&W&ШW&W&X&X&0X& HX&/`X&AxX&SX&hX&tX&X&X&Y& Y&8Y&ѩPY&hY&Y&Y&Y&(Y&<Y&NY&_Z&q(Z&@Z&XZ&pZ&Z&ǪZ&۪Z&Z&Z&[&%[&00[&FH[&Z`[&ox[&[&[&[&[&[&ɫ\&ث \&8\&P\&h\&\&$\&5\&E\&S\&a\&r]&(]&@]&X]&p]&]&ɬ]&ڬ]&]&]&^&^&0^&'H^&2`^&=x^&K^&_^&j^&v^&^&_& _&8_&έP_&h_&_&_&_&,_&>_&N_&_`&q(`&@`&X`&p`&`&`&Ϯ`&ݮ`&`&a&Na&0a&&Ha&=`a&Gxa&Qa&\a&ga&sa&}a&b& b&8b&Pb&hb&ïb&ϯb&ݯb&b&b&b&*c&:(c&O@c&dXc&ypc&c&c&c&°c&԰c&d&d&0d& Hd&`d&-xd&Fd&Od&]d&ld&d&e& e&8e&ԱPe&he&e&e& e&e&)e&1e&>f&L(f&^@f&qXf&pf&f&f&IJf&ʲf&ݲf&g&g& 0g&Hg&%`g&7xg&Ig&cg&og&{g&g&h& h&Ƴ8h&ճPh&Phh&ph&h&h&h&h&h&i&#(i&-@i&CXi&Vpi&gi&i&i&i&̴i&j&j&0j&Hj&`j&$xj&,j&2j&9j&@j&Hj&Ok&V k&a8k&hPk&ohk&wk&k&~k&k&k&k&l&(l&@l&ȵXl&Եpl&l& l&l&l& l&m&#m&/0m&BHm&S`m&^xm&hm&sm&m&m&m&n&Ŷ n&UE(n&28n& &Hn&`Nhn&wEn& &n&`Nn&En& &n&`Nn&Eo& & o&G@o&EXo& &ho&Go&Eo& &o&`No&Eo& &o&Gp&E0p& &@p&G`p&Fxp& &p&`Np&Cp&/p& &p&Gp&XKq& &q&=8q&C@q&p1Pq& &`q&Gq&ICq&0q& &q&Nq&1Fq& &q&Gr&LF(r& &8r&GXr&jFpr& &r&mNr&Kr& &r&mNr&xKs& &s&0s&FHs& &Xs&xs&Fs& &s&Gs&Fs& &s&Gt&F t& &0t&`NPt&Ght& &xt&Gt&@Gt& &t&Gt&Ft& &u&G(u&dE@u& &Pu&Gpu&Fu& &u&u&XGu& &u&v&*Gv& &(v&GHv&mG`v& &pv&Gv&bLv&&v&^Lv&&&^=&e=&`<&k< &t<(&m=0&w=8&}=@&=H&=P&=`&<h&(;p&=x&=&=&&& 8&/;`&<h&&p&/x&`/&*&(;&&G&G&pD&K & H(&>0&&@&HH&3P& &`&3Hh&0?p&&&LH&?&K&fH&6&`&& &&&&&pPn&n&n&(o&po&o&p&Hp&u&Xu&xv&pn&6n&6o&6Ho&6o&6o&6 p&6s&6t&6t&60u&6Pv&6hp&p&q&r&`r&r&s&Xt&t&r&8s&Wxu&Wu&Wv&W& & (&0&8&@&H&P&(X&+`&4h&Mp&Zx&d&v&|&~&&&&&&&&&&&(y&0y&8y&@y&Hy&Py&Xy&`y& hy& py& xy&y&y&y&y&y&y&y&y&y&y&y&y& y&!y&"y&#y&$z&%z&&z&'z&) z&*(z&+0z&,8z&-@z&.Hz&/Pz&0Xz&1`z&2hz&3pz&5xz&6z&7z&8z&9z&:z&;z&<z&=z&>z&?z&@z&Az&Bz&Cz&Dz&Ez&F{&G{&H{&I{&J {&K({&L0{&N8{&O@{&PH{&QP{&RX{&S`{&Th{&Up{&Vx{&X{&Y{&[{&\{&]{&^{&_{&`{&a{&b{&c{&e{&f{&g{&h{&i{&j|&k|&l|&m|&n |&o(|&p0|&q8|&r@|&sH|&tP|&uX|&w`|&xh|&yp|&zx|&{|&}|&|&|&|&|&|&|&|&|&|&|&|&|&|&|&}&}&}&}& }&(}&0}&8}&@}&H}&P}&X}&`}&h}&p}&x}&}&}&}&}&}&}&}&}&}&}&}&}&}&}&}&}&~&~&~&~& ~&(~&0~&8~&@~&H~&P~&X~&`~&h~&p~&x~&~&~&~&~&~&~&~&~&~&~&~&~&~&~&~&~&&&&HH9%HtH5%%%hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!hhhhhhhhhhhqhahQhAh1h!h%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%}%D%u%D%m%D%e%D%]%D%U%D%M%D%E%D%=%D%5%D%-%D%%%D%%D%%D% %D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%}%D%u%D%m%D%e%D%]%D%U%D%M%D%E%D%=%D%5%D%-%D%%%D%%D%%D% %D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%}%D%u%D%m%D%e%D%]%D%U%D%M%D%E%D%=%D%5%D%-%D%%%D%%D%%D% %D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%}%D%u%D%m%D%e%D%]%D%U%D%M%D%E%D%=%D%5%D%-%D%%%D%%D%%D% %D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%}%D%u%D%m%D%e%D%]%D%U%D%M%D%E%D%=%D%5%D%-%D%%%D%%D%%D% %D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%%D%}%D%u%D%m%D%e%D%]%D%U%D%M%D%E%D%=%D%5%D%-%D%%%D%%D%%D% %D%%D%%D%%D%%D%%DH5{1%4?tH={}^*H5Ձ1F]% ]H=+]1H5vHT$H%H5HL$HH$H1w1H5yHD$@wH511SyIEA|$8HPt.ID$@IL$xH5pD@H1ZIEHPH51:HBA}8HPt,IE@IMxH5D@H1HBHPH5+1HcHc% f.H= %H%H9tH%Ht H=%H5%H)HHH?HHtH]%HtfD=%u+UH=B%Ht H=~[% dm%]wSH%uHHU%H5%[@HH?@H=%Ht@Wu'/u"Ht1tH%H@H%@͐AWAVAUATUSH(L%I9xxwII9LoHLMAMD HAHD$HEHD$ D[ tpHLL9kuLcM9|$uHt$I|$LLD$LD$uUumuHghLcH(L[]A\A]A^A_fII IJ:I9AAHuCAHIIVHEH HIIFMnIF@IFHUHPIFHUHPIFHx5IFHL$AFIH*%HAV HUumuHt^ffDMfH5iu1I:XDLHL%L}IHExqLcHH|$Ht$dH%(H$1HH|$@1HD$(HtwHHLHxAH%H$HǀHT$Ht$ tFHG%Ht$ T$HH$dH34%(HĘDH|$(Ht$E1HL$0HPH%Ht$ Ht$uHL$foD$0foL$@foT$P)fo\$`fod$pfo$)Ifo$fo$)Q fo$)Y0)a@)iP)q`)yp),HD$H@X1AWAVAUATIUSHHH-%H}L-!%HE1@hHL H@H@@IDHHuL-B%1MeIHI<$I$H`uH%H@8DhHhIIL9ufDH I9}tH}HtHELeI|$Ht ID$LeID$(HtAT$PtAT$ tL`HRLtM<$IvLAHI M<$IM9uH I9^H %H@@DxLpIK>HD$I9A~I~M.HtIFI}HtIEEMIMM9t;f.At!II/HtIGH}HtHEI M9uAmXMePHLI9t8A|$t$I|$HtID$M<$IHtIGI L9uEIIIL9t'f}tH}HtHEH I9uI L9t$Hl%HDhHhIIL9t4}t$H}HtHELeI|$HtID$H I9uHn%HDhHhIIL9t<}t*LeI<$GuI<$I$H}HtHEH I9uH`%D`HhIIL9t"@}tH}HtHEH I9uH[]A\A]A^A_SHķ%=o%upHܻ%HH=%%H%HH=%u#P;Ct-[D1Q>P;Cu[<@H=q|f.USHH $HdH%(H$1H%Ht'H$dH34%(H[]fDHHxHtHH!%tDHSHDډHH)H{ HHH0HpH@HXs:umt UuoHDH %H=q%%@H$Hx HHPHLHLHHH)H)HfDUڋLL둉LfL@USHH $HdH%(H$1Hƹ%H1H=j%H!HtWu/:f.HH!%tDHSHDډHH)H{ HyHH0HpH@HXs'tJUPt>LfL0H$Hx HHPHLHLHHH)H)HDHt%HH%H$dH3%(uH[]fDHtWu/u tPH%t#UPڋLLkfDff.SHHoKu+uHD$HtHD$H[@kHD$H[ATL%%USAl$I\$HHH9u=DH H9t/{tH{tHCHLH %H9u[]A\ff.USHdH%(H$1HH$H!H5nHH5nH H5nHHHZHH%LK@@@ DF0NWAFȃp0< JHWGHHBL9uH$dH3%(u H[]Kff.H=%tCH{%HHt?HPHtu HH9%tbHt@ H=/bHt& H=bH fDH=%褶ÃBu=`H;&H=a%HH@8H%=H=&ܻ@Ha%L%j%L-C?%L=OaIH@XH%H} IIHHLL0HHHH@HHhI\$HD+HI|$HCID$H>%I9t5ImM}HH5y]11% >@K趼=%DH%H5`HH%H"HH[%HH%HHH%HHf%HHHݢ%Hx8Ht H8H_% H5ͻHȸ%HŸ%H Ht$HHP(H%HPHӦ%HHP%HGxHǘHGH Ҷ%HHH?HHH1H)ι/H=%Hʤ%Hf.H%Hr(H9wXuHtH$HtHP0HH@XHHD$Ht{HHtsHx8tlHU%H$@HǀH\$Ht$5H%Ht$\$H1H$dH34%( H[]DH;Hl$ H<H<$HtHD$PHHD$xHhHC`HhHHt>fD߃Avn<9vdH9t<:OHT$ H%uH{XHt$ 2w%D3HT$ SHsHyH|$H$HP8Hƚ%H\$H\$fo$fo$fo$fo$fo$)D$ fo$fo$)L$0fo$ fo$0)T$@)\$P)d$`)l$p)$)$)$y@H{XHaz/z/Ht$ H,uDAVAUATUSH@OhH|$t$HT$ dH%(H$81D$XHD$(uHHAHHXH:%t.HD$HHpXADHD$Hp`HtbH=/&HR2tN=%H%H@=%t$H|$%HL$ HD$HifD=˭%H %|HHt$hHD$hHNH\$HeHD$(Hu{t$HN%HL$ HHD$H$8dH3 %(HD$'H@[]A\A]A^ÐH=P%vHHD$hHt$htfDH!%HudHE%HH;D$h=%LHU%H@=ά%t$H|$%HL$ H1H q%H)H9~t$H|$R%HT$ HDH=bQE1詰3@薰9Hl%Lm%HHD$HJ8HB0LB8HD$8H%HL$@HJ@HǀHL$HH HJ@H|$\H|$pHt$PHHT$0H0Ņ2L%ӕ%t$H|$E$D:A$6%LL$ HL$HHHT$0Ht$PIHD$8E$|$\L-$%ID$0HD$@IL$@IID$8IIAHLt$H=?%IoHAFoKANoS AV(o[0A^8oc@AfHokPAnXos`Avho{pA~xoAoAoAoAoAoAH%HH%AI0Ls H3LeD EHEL9uHD$=թ%`t&HL$HD$(HhHé%H%HHD$HX`HCuHD$HH{ HsH{HCHI%HL$0D$XH%HHL$8ǂHJ0HL$@HJ8HL$HHJ@HT$PHHT$\H|$H=6%聿D$X_QH5q%I0-EfDf1@HD$L`XLHx HHOHLHHHH{HCHkD+DATUHSHHĀdH%(HD$x1H=%tH Ũ%H9Hu`HH;H9gHVH9WHHHh1H\H9ht0H1HD$hHPHD$`HT$X0H;hH\%H%H1HL$xdH3 %(H[]A\LeXL\L%IHH;H9HPH9WbHHpMLe`Hh1HzH9hAT$u"A,$uLjf.HE`Hh1HH;hfDHE`HE`HhtJ1HH9h^AT$uA,$uLta@HE`xAD$uA,$uLt\HE`ZfDfDAD$uA,$uLtLff.SHH="%uH=%u"H[@1Ht$THt$DD$:D$H[AWAVAUAATUHSHHXdH%(HD$H1%IDmH|$HdH3<%(LeHX[]A\A]A^A_HhH߃Ai<9WH9t<:j=#%tD%%H%HD$ED=%Hw%HD$ECD%AD=TMcH޹LA]H=/%LT$LT$HcIcL5%Ht$ACƄ$:M$LEH_%HtYHtOHX D|/tHuIcHLHAHpAƄ$:HIcAL|IcAƄ$L5m%D%b%De\fHHzf.z/z/;file;pharuf{:/u{/fDE1IcAHt$IcAƄ$:IcELDIHd %uZH@EfHD$H=%Ht(HGHt%HwAHt$HHD$=V%%4H|IHH%IL$H+HxH^LL$ D$?HIqDHHIHHHHHI)L؃0H wI؀H=̡%I)AQED %Hc#H%HD$f{:/V{/LI=r%%PIHH8%INH+HxHmLL$ D$?HIqHHIHHHHHI)L0H wIAH=Ѡ%H)%AǃHcJH%HD$@LL$ HD$?IIq @HHHIH~IHHHI)L؃0FH wHG-HڿH5D1$L=%A=%̠AFuAL)I9IX=f%APAA;GMLL$ HD$?IIqHHHIH~IHHHI)L0FH wHG-19CL=%A=Ǟ%H=(%GuRH;%LE肠=%ulAPAA;GtnM¢AVA.Lt8(1肢as謼w`ff.USHHHx Hxv xphart1H[]Df:/uـ/uHx詻H5EHHHt@H1HH[]fSH0dH%(HD$(1=%t =%u1HL$(dH3 %(u{H0[D蓟H&H$HD$81HD$t O%뜐 RٿH56CH1!3HH=&=%tv=ߊ%tmH=%R%uxÕH%H%H5HH% H 胿HtHH%HPHb%tH'H=0%HY%HpH H=%H;%ViH=YdHff.@USH(dH%(HD$1HrCH$HuCHD$HHD$H̉%xitHD$dH3%(H([]H5H&H@ []A\A]A^D1@AWAVAUATUSHHdH%(HD$1=D%t0L%%I$HtlHPHtBf.Hՙ%H߉H͙%%HHL$dH3 %(HH[]A\A]A^A_fDH%H9x(uE1=%H߉Ȇ%HH\Hu%HHx0%HH=Lp Ap+M=L= %A=%Ct$HL聙=%APAA;GI$HtHH%L5%fDHxI@ HT$HAIHH~%T$LHx0n'HH@ pI$HtHH%H%HCMEH%H%)%̚1ƻff.AWAVIAUATAUSHdH%(H$1HX=%rHs%xqHJ%Ht=Hƀ%HHHPHtuHH9%MnX=%WL׳HT$$LHHH%T$$HHx0#HHLH%Ĕ%H%ptr=%{ L=T%A=%S =%fH ϔ%HtH1HHH>%HH3HHL-%IHtHHtH@Ht IhHt`qtWHHxH?Hphar:/fEH}E/H3HFHHP葶HHT$P11萯HhLаH̔%=%H@APAA;GD`EHMEٿH5;H1}DHݔ%DLHԔ%6%H$dH3%( H[]A\A]A^A_DHhL߃A<91L9t<:EANhuI~XL%Iv`H HK%Hx0b IHHX HpSL=|%A=%t迓t$$LH[=i%>APAA;G趷HHDH&HT$0D$0HD$8HD$@8148f|$0WHX%@qH%C%H%1ۅuVH7&HT$0D$0HD$8HD$@81貮)%H>fDL={%A=C%H&HD$H{%MnXL;h(oH=c%ag%1D$$H-V%DL%a%Mt$ At%IM9u@t$t$fLHU觑pjH&HD$9L-2{%H\$IHH@(HD$H~%H@z @iÈD$%[APAA;GHT$(DLA=ˏ%HÍBA7HWE1HtDd$$HHl$0qƅH5%H%Hdƅo襐H}%H3Hx0HtHP pcH}%xD9x@ԑHt$0DH߹/h@H褉HE%HJ1HH׮H(%H?HH%!HHt$0DnH~H+HtHEHvH}HD8.phaWD$HxLqL %IM9t@HUH5P41@2HI1ɉHHPHpH|%Hx0IHHH5c6HP1Hl$0Hth}pharHDH9PuHxHt?H4|%MDHHx0=HHT$0H551lLt$EMIHG(A9Ih@IHH荫A9r#Hu%%Hl%HJfDI<$ t$%Kt$ft$7t$fDz/z/A}fileA}pharfA}:/A}/1lfzIBB4@IvXAKp1f%APAA;GDLz%wDH耮9H;AH5u11HW41@AVhyHiIvXA<謫H=X0;1@苧ұٿH52H1 DLy%fVH &ƃpHǃhHD$HHPx mH4y%1XD9X@@cPfDf1َH=n%t 轎APAA9GHD$(諯HfD1艎@v1i@kfA}:/SA}/HH|$0Ht=ʉ%tiHhH9htY衋1u1^艋1>1H5/eHD$H@ HDf}:/m}/cЧxrH51*HD$1H5. HD$H@ c%OH=-贫1Wff.fAUATUSH8(%dH%(HD$(1t(1HL$(dH3 %(H8[]A\A]DH- &I$HD$LHD$}mAŃtSHv%xqu %놋}1L$HD$HD$!t8LdٿDHH5/1 6ٿH50H1n AUATUSHdH%(H$1=׆%HAAąH߉u%HHHu%HHx0HHt pt\r%Su+uH询H$dH3 %(DH[]A\A]HsD$hHt$XH\$`EL-p%AE=c%蓇puDH&ƅpHDžhHHPx tHt%1HD9H@@=%DAEPAUA;EJDHa&HT$pD$pHD$xHDŽ$81٢ۡ("H5-H1Z D=[%H8H9tHSH9WH脦Hh1HH;hDŽ$HE1H|$pHPH$H$H;hUfDfD1<@A SH0dH%(HD$(1%tHD$(dH3%(ukH0[H&H$HD$HD$81OuU蜪ٿH5f,H1}f.AWAVAUATUSL$HH $L9uHhdH%(H$XP1HHH5HѨHHL|$0IH5,1JLHߧIHtSLH!%tLDHVHDHL)eLHc$I1LHL$@LHHc$HD$DLLHHeL H!%tDHJHDщ@HL)SуHc€|0 D$0< BLHDG)< t<"2Z?;QHcMHL$LLHH$yL $LUH!%tLDHUHDH蕝D)HcS H;S2HlHcS HcHHH$蠤H$HHcC HHHHH:-J HH so@4tA$@C WD$01< L<"@Hcƀ|"HI$HyLHHITHTH)H)HfD0tHc|0 [/LHH$)L ${ HljSHcHKHcS HL'MtLDC EH$P ^(HCE1H$HT$$L$GPHT$HT$(L%*f$P HT$HD$H$R E9IcHH H1HcIHI94H*H)f订IHH@H<$E1HL$HT$IHsHD$L8IGDC HD$H$HE9YDH$XPdH3%(HhP[]A\A]A^A_[^/]HHL9+#JH~YwKIc L>fD~*tY[^/]HH@*\HHHAHHAHAUA9t(|HAH|.*HHfHXAD0H5|'1LA$AD,D)HH5q'1L踙HL$(T$$1H5f'H5'1wAD,fD)]ATIUSHco HHHH9sfH;H4H9wI$H#I\$I$Ht,L%g%f.H;A$HkHHHu[]A\SH?H HG t `HcsbHHt HC[H5&1[ATf1UHSH1HHPdH%(HD$H1I)$L)D$)D$ )D$0HD$@LtH<$u0HH5>&1HD$HdH3%(u9HP[]A\Ð11@HT$HH4'CHH;$rL蓗|ff.USHH_Ht=Hf.HjHE1jH;E11_ZYyH[HuH1[]H[]@G ~=AUIATIUHS1HHLHHH}A9] H[]A\A]AVAUATIUSHHT$@HL$HLD$PLL$Xt:)D$`)L$p)$)$)$)$)$)$dH%(HD$(1H-y%HcH;~;&HD$(dH3%(H[]A\A]A^fD1H|$HD$bH:I@HHt8uRL-#e%ImrLHAH%1-H %HcHH>H=L%H€tH5=%HL-d%HHuImwfDH=)%肟HL$LHH$D$HD$HD$0D$0HD$ f HHaI;mHwf.H=$sDH=q$ڞHL$LHH$D$HD$HD$0D$0HD$ 辔 HQH蹛I;mXf. H=#ZHL$LHH$D$HD$HD$0D$0HD$ > HјH9I;mDH=#ڝSDHL$LHH$D$HD$HD$0D$0HD$ 贓 HGH诚I9mIf.WG1GH?H ff.fH#SHHHD fDH9s^H9usCH<CaqHHt9CH<@HIqHCHt SH;1[H~fD@H5-11[_ff.@AWIAVIAUATUSH(L$1LD$tAx(LHI y(uAIMXLMIK|HHHHHZHHBHHHH0HBHHHHHrHHHHHZHHHHBHHHHHHrHHHHHBHHHH3H9aIKHHHHHrHHHHHrHHHHHHVH6HHHzHHHHHHwHHHHHHHHVH6HHHHHHHs%H?A~H31҉|$ILHIHIHu`H[HtOL9#u9kuH{LLHL$L$腕L$HL$uȀ{(HHK ]AF9D$H@PHI^|$AVu@HD$AFC(HC L#L{kIJHCIJH(H[]A\A]A^A_HK C(HHHzHL$^LL1HtAnHK C(HD$HC HC HL$HH }ff.@AVAUATIUSHnHLkHvHt}HFr%AL$1AH3HHI$HHtAADH[Ht.H;+uD;suH{LLuC(H[ tH[ H[]A\A]A^DL(HsHHCkAVAUATIUSHnHLkHvHtuHq%AL$1AH3HHI$HHt;ADH[Ht(H;+uD;suH{LL5uـ{(tH[ H[]A\A]A^LpHsHHCsAVIAUAATMUSIMMLMIJtfHLRHHHHBHHLLRHHHLHHHBIIHLLRHHLHHJIIHLLRHHLHHBIIHJH9bIK4HL*Ic L>HHHHHJHHHHHJHHHHHHQH HHHrHHHHHHNHHHHHHHHQH HHHHHHHio%OH?H31HHHHHu;@H[Ht.H;+uD;cuH{LLuC(H[ tH[ H[]A\A]A^H_HH:LLDAVIAUAATMUSIMMLMIJtfHLRHHHHBHHLLRHHHLHHHBIIHLLRHHLHHJIIHLLRHHLHHBIIHJH9bIK4HLIc L>HHHHHJHHHHHJHHHHHHQH HHHrHHHHHHNHHHHHHHHQH HHHHHHH9m%OH?H31HHHHHu5@H[Ht(H;+uD;cuH{LLuـ{(tH[ H[]A\A]A^HeHH@LLff.AWAVAUATUSIHH;L]HMINLHHHHHBHHBHHHHHJHHHHHZHHHHBHHHHHHJHHHHHJHHHHBHHHHHL9bIO IL Kc L>HHHHHJHHHHHJHHHHHHQH HHLJHHHHHIIHHIHHHHHQH HHHHHHH k%OH?H31HHHHL8H$MtSIH|$E1DIGMHtLII9uE9guIHL蟌uA(t`IWMtbIVH[]A\A]A^A_H[]A\A]A^A_HHIIHyHt$nH4$HSH_HHwHdH%(H$1HT$ Ht+HY%HH:T$ H0HHt pt 1H$dH3 %(uIHĐ[fHt$1HHH i%H\$htH譈ff.fAVAUATUHSH0dH%(HD$(1HH!i%{BHH51݈{@tHX%8HH51譈{@t2HW%HHW%8t HH51u萋H踋HD$(dH3%(H0[]A\A]A^HkH:H5;1fHH51HH51ևIlH5H1踇L-W% LHIEH1蔅1LH5~L5%Ix IEHHH L1LL1H56HkI LH+ZHHH)1L1H5\kHS LH1ӄL1H5t轆I LHHH1蠄L1H5芆IEHPxHHt}HHtqH)Ѿ L1HJL1H54IE LHHH+1 1LH5IEHHL 1HكL1H5ÅIELH H@1覃L1H5b萅IELHU HD1sL1H5;]IELH HH1?L1H5)IELHm HH 1 L1H5IELH9 HH(1ׂL1H5G@H+HMf.H聄1HDHH=>%1HDUH~1SH HRHHHH~H1H[]H51H51HO%H5H H¸HtH* 衇HHH@H@@8@HE([ff.UH~1SH HrHcHH1w%f*^%1H[]H591H5C1HN%H5@H +H¸HtH* 豆HHH@H@@5@HE(Vff.AUH~1ATUH, SH~HcH8H=xAHL%H@BHM%H5H XH¸Ht[(L*ޅI $HH0HHAL$H@H AL$ H@fH$AL$@'H&IE(H]1H[]A\A]DH51HH515L%-@@BH5$1H5Q1L%@B@AAAUH,SH^HHFHtmHuGHH=}ty1 HՃWH`%EBBH[]HuHH=9k}ufHH=\Q}uKfDHHHcWH7Hƀ1Hff.@SHp,Ht$HL$(HT$ H5 dH%(H$h1H$}H_%xBHD$ H$Ƅ$HDŽ$H$HQK%DŽ$HHHH\$Ht$ H|$0H$H\$HJ%HH$HtGH}HGHD$@H|$0q|H$hdH3%(uHp[DHD$@=~ff.fH(dH%(HD$1t1HT$dH3%(u0H(H3}t׀|$uH<$Htg}UHSHH,uHHH[]%M%fEH[]fUHSHH,HuHHH[]%M%fEH[]fUHSHH,uHHH[]%jM%fEH[]fAUATUSHH]%HHtK;tFH|IHI%L`(MrLr|L9aLHL[KH[]A\A]fDAWAVAUIH5^ATUSH,dH%(HD$x1HT$/D$/zv1H L%81LH\$0蚁H\%LH5B HB L%% LH53 I$H ~H-K%LH5 HEHi~HELH5 Hq~1HH8\%L|`I$H5 HL+z LH) U` H5 HHI$ HH5 HH҂I$H@HfH*H[%fɺHH5 H*^YI{Hٺ LH5 xHEHxxHHH\$`1HHE HH5: HH+HxHE HH5 HH+HxHE HH5 HH+ǁHEHH5 詁HٺLH5 BwH\$@1HSHEHH5 HHhHEHH5 H@MHEHH5 HD2HEHH5[HHE HH5 HHPHEHH5j HHX߀HE HH5` HHÀHE HH5Q HH 觀HEHH5C HH(苀I$x HEHHuH+HH5HaHEHH5 HHEHUHBHfH*HBH^fH*^H $H5 YyHE $HHfH*^YH5 HxHٺLH5 Ku|$/tHX%xBHD$xdH3%(HĈ[]A\A]A^A_f.AEfDHƒfHH H*XjffH5Hxf9kHD$P1HHD$|HUBD$Ll$@$HR0HHLd$`&DSHsLH|$PuH[HW{(uLs 1L3|M.AEuNM}IuHt$I H}Ht$LIHIEI}IEM}1zCD=L H5LD{ILH5}ALH5}IsHjvHIuIHtH@C| LDL LH5}ILH5yW}HPV%Ih H5WL(}HU$$;BDTLl$2HL$LH5rd@HƒfHH H*XfHƒfHH H*Xtff.fSHH5H ,dH%(HD$1HL$HT$D$LD$qrtu#CHD$dH3%(u,H [fDT$t$H|$MuCKtff.UHSHHdH%(HD$1 t HT%xBu"CHD$dH3%(u=H[]@},1HH5qtH<$VCsAUATIUSHH,dH%(HD$81\ou+AD$HD$8dH3%(PHH[]A\A]H1L-ƉLx1HxH-S%HߺH5M@#vHߺH5vHߺH5uHߺH5uHߺH5uHߺH5uHߺH5uHߺH5fuHߺH5KuHHߺH5yHHߺH5yHHߺH5 yHHߺH5yHߺH5srHHߺH5^HyHHߺH5^-yHHߺH5ayHHߺH5T HIDrHHߺH5<HID^rHHߺH55xHHߺH50HID!rHߺH5 sHߺH5sHߺH5sHHߺH5%xHHߺH5HIDqHHߺH5ewHHߺH5wHHߺH5HID;qHߺH5rHٺ LH\$H5$m1H:uHH hH5HpHH DH5pHٺLH\$ H5Hl1HtH=7%HH5HHٺ LH5kl@H5l ofS,Huat)HO%x@tH>%8tH>%HxhuC[fDKQqQC[1H5 Rluff.HO%x@tH0>%:t u fSH9% H5kH{8rHtHH HP0HH0HM>%H{8H5@rHtHH QHP0HH0H>%H{8 H5rHtHH5HP0Hp0H=%[ff.fH=U;%uSHH{Ht :RHCHHt %RHHHt RHHHt QHHHt QHHHt QHH Ht QH H@Ht QH@HHHt }QHHHHt eQHHHt MQHH0Ht 5QH0H(Ht QH(H8Ht QH81[f.AVAUATUSHG DoHG0؉LAH_WIHIM)ƅDH<A9H]L%HLHHHHHHE U؉HH@oL(qE ؉HHEUE1uWf.Ou'/u"HD$ohHD$f.HCHAAD9mDHH]{tH{HtH:%HH;xxr H;rOH{HsHG1HptLH{IWu/u gLsI~AF[H K%HpH:%HJHGH[]A\A]A^f9 U HJ%HHHHHMHHcE HMHH}HH)iHD%E HpxH3%HHeHEH[]A\A]fDH;HHHC H[]A\A]DH;xHHH;]EHHX5H;HHHHC H[]A\A]DH13%H;HH;xxr H;r?HH;H{Ou"/uHD$Z`HD$DHc H[]A\A]fDC tZH;fG?8DH5MHHHC HHHHH`H;1Ҿ8IDHD`HH@0A0P@ ؉HAN9KLmHLH)˃  U HB%HHHHMHHcE HMHHpHxfIELkPH-HHEH"ff.fH7>tAWAVAUATIUSHH->%HHHHxHHHH)H)HI<$HbBHL--%HI$HIEH{H;xxr H;r(BH{H Ou /n HCH{@H5cH{(HtGHcs H8?s HC(~*E1 HC(LIHHD9c H{0HtGHcs$H>K$HC0~*E1 HC0LIHHD9c$HC8HH5HHt*HG1Hp}>HHxIL AD$HHt. IEH;xxH;fDH{xH5(tHHtaHǃtHHtaHHǃHHUH E1E1 AHH H:Ht\IUH;zxr H;rIq@HHJ"HH:Ou/uHJ"HHHJD%HHxHteIUH;zxr H;rR@HHJ"HHzOu/HJ"HHBHJ HH@HJ, H}<HEHLH}HGHtbIUH;Bxr H;rOH[?HHJ"HzOu/IHJ"HBHLH}I<ANHEHJT%HDAvHcHH;HHHHH $1=fDLH;I$$HHH(H$ $HH:IUHJxH9r H;rQ@>HgHH*HH:Ou/dHH*HHIUHHJxH(HHxH9r H;rR=HMHH*HHzOu/HH*HHBHH(HH@HL$(I<$c:I$HL$(M<$MGMI8HE1E1FHH*HJLHHHL<(IAVMGK< HlAIUH9zxw H9w<HHH*HJLH9Hw@u/uHD$? UHH*HBLHHD$Xc<HHOu"/uH${ TH$H@H1H(H@J< HGHp8HH*HrLH>Hw@u/HH*HJLHHHH(H@N< IAGH{@AvHcHLh8IGLIM<$;\fD4$HcHH&8HH[]A\A]A^A_IwIC^IGHH(H@N< RHD$MSHHD$H*HDHD$bSHHD$H*HDH1H(HHxHGHp_7HH*HHzOu4/HD$ RHHD$H*HDHBHH(HL`I|$AD$HH(HLDH1H(HH8HGHp6HH*HH:Ou6/HD$BQHHD$H*HHHH(HL I|$AD$IUHHJx2fDHD$QHH*HBLHHD$8fDH$kVQHH$J"fH1J HxHGHp5HJ"HzOu/HJ"HBHJ HhH}ZEHLH}-+YHHD$H*H YHHD$H*HhH$nPHH$J"HH$l>PHH$J"HpH1J HH8HGHp4HJ"HH:Ou/HJ"HHHJ HH(H}REHH1J HHxHGHp3HJ"HHzOu/HJ"HHBHJ HHhH}EHJ HD{WyfDfD[WHH$J"1BWHH$J"H&WHH$J"HVHH*HHH*HH$&gNH$wHuH}YHEHJ HH(HuH}XHEHJ HHh5H0HǃIIt$I|$XID$HH(HL It$I|$xXID$HH(HL`.HpHxOXID$LHuH}1XHEHJ HhHG1Hp1H{IWu/u'MLcI|$AD$)H$LHH$J"H$cLHH$J"H(UHHD$H*H UHHD$H*HH$qLHH$J"H TH$QTHH$J")HG1Hp0HHGu/u KHH}E)HH2HW/KSHH$J"H)SHH$J"HIt$I|$ VID$Lc&SH$HuH}UHEH8}SsSiS@AUATUHSHf@yZG1H4@/IċEt"1ۉM,I}Ht IE9]wHRHL[]A\A]fDf1DAH4.IfEtHXAEMlH;HtJHHL9u@1Ҿ.HxI`wff.ATUSHHH?i1HtHH[]A\HL%&-%oI$oJHI$H;0I$H+HE HI$H}0H}HEHtA$t0Ht,HEj0HtvHEH[]A\DH%H}HH;xxr H;&0H}HtfOu/uHD$HHD$zfDH}H/H}Wm/dtJHUHG1Hp-H}HGu/u tIgHH]H{t"CrP PHD$HsH{RHCH]Pff.AWAVAUATUHSHHHW0dH%(HD$x1Ht *'HC0HtfL%%fHD$ H=)D$0M$)D$ )D$@)D$P)D$`H\$8I$JHt HHXM$H{pHt.HmHCpH{@.HHHt .HH{@.H{HC@HL=%IH;xxql.D$HCH{xHt%HG1HpH+HCxHxHEH{(H}CDc @tHADL$E%ADH4@H*IEHAD$H@MtH}Ht[L=%IH;xxr H;rB-H}H Ou#/uHD$EHD$fDHELeIL=T%MIILL;@xr L;rXLLD$HT$-LD$HAHIu+HT$*u!HD$H8[ELD$fDAM LeHI9IEC@LELk(H{`HtHcCXH4@H)HC`H{Ht w,HCHL%E(%H|A$]DD$EL=H%IH;xxr H;rF!,HHqOu /uHD$pDHD$HH{hHtHcs\H(HChH{PHtL$+HCPH{H{H+HtHCI$HHFHHHI$HD$xdH3%(_HĈ[]A\A]A^A_ÐH0LfHtTHc1H (LcLHHIIL9sDHHI9wLKs8H{@1H'H{@HKHHk@HmKH{HǃD$HL=y%IH;xxr H;N*H{HGOu /uHD$BHD$HCD$HCvt$u Wu/uLB@HǃHcsHH&SHHCP1L=%@HSPLHH9kHHCPHHSPHD$LIwIcIIGqGHSPHD$L_FHG1Hp"H{HGu/u J>HkH}ED$JFHG1Hp"HHWu/u=HH}tKEt?FHD$-0Fs&FHD$DHuH}_HHEHkWHuH}EHHEHE$Ey@ff.@USHHH/H$Ht#HHU0Ht *H[]HH-f %oHoJHoR P oZ0X0ob@`@ojPhPor`p`ozpxpooooooHH;p#HHHHH;?H1[]H}0H[]DAVAAUAATIUSHHH-M%HHx"HߺH HMtI<$HtAv1, I$ƃpHEH%H;HH;xxr H;r@"H;HOu#/uHD$C;HD$fDHHL H5pLH?HHHHHH}H5LDHH5[{t%ƃpHHDžH[]A\A]A^H{Hfƃp@HG1HpH;IWu/u tXS:L#I|$t%AD$f.BHD$It$I|$DID$L#kBffDUSHHHK!HtH[]HH H-%HH HH{pucH %HH;xxr H;r%HH9Ct_HCtH{HtHGHp,HHHaHGHpHHH릐HHHHqHHHff.OWAVAUATUSG ؃u 9L-%HIHHHGII1u@H %HH;xxr H;rGH9CHCHAԃA9nvUHI^{tH{HtIptHGHpIHHD[]A\A]A^Aw/L-%IHIHHȉ9rAfHpHHPIHHff.UH-SHHC<wjHcDH>H-i%H;HpH{ %HH9xxw H9wEHH;HGtc H[]@H;tH%HHHHHHxH[]^fDH;KtH%HHHHHH@H;8 XHl%H5SHHHHH;H[]HGHpHHHH;gUSHHH HtH[]HHH-%HHH tH{HtHGHp HHHff.Hi%HHf@USHHxIfHLHt#GHkH\H}HtHH9uH[]G1HDHGtډH|Ht_9kwH[]HHH ff.AWAVAUATUSHH;tH[]A\A]A^A_H-i%HHH{HpHh%HH;xxr H;rBH9CHCH{@H5( H{(t>HHcC HHS ~!E1@LIHH{($D9c H{0tAHcC$HHHC$~$E1LIHH{0D9c$HH5h3HHtHGHpHHHt)HHtHGHpHHHH{xH5HH HHE1E1i@H%HH;zxr H;r%AHJ"H9B5HBHHIAMHJ"HAHHHH9H pH h%H HqxH9H;J"HHzHt:H9r H9T@HJ"HH9BHBHHHHJ"HzHpHGHp HHHH@?HJ"HH9HHHJ"HHzH^puHO%HHqxHGHpHHHHAEHHHHHH2HHE1E12@HIANHHJ(HeAHH:HpH%HHJxH91H9$J(HHxH9w H9w!v>HJ*HH9BFHBHHHJ(HRH3H:HHpE1E1rH %H H9yxw H9w1=HJ*HrLH9HHHJ (IAwHIJtHH[] HXH3AUAATIUSHHH- %HLJxHLJHLJHLJƇpHuƇpHP HHHMtAuL/ HHHH;HGHp HH H5HHHH?HHHH5X{u H{DHƃpH?HHHHDžHH[]A\A]HcLDž~UAUBATLlIUHcSHHf.LLLHHI*IIL9uH[]A\A]fff.@AUIHMATUHLSHH%H5%HH=%LHH~%BLAąu`HUHtLAE~41HH=ʪLH=LH$H-"HH+HxHL$uLt$HsHLH S%MLAŃ\H%HCH%Lc`R@AEALHHf@@ @0Hك%Hc@IHcډHHHH<AMHM,M9HD$ LeHHD$GfDHIFHH9rHHH9sHH)IFI M9At싃HI WHcHH4p ~H4IWHPIWHPHHH+I@Hz I9H2L.H*HIf.IFPHCPI~0hIHH<1HHHHCHtHHH+HCHHtHHH+HHHtHHH+HHHtHHH+HHHtHHH+HHHtHHH+HH HtHHH+H H@HtHHH+H@HHHtHHH+HHHHtHHH+HHHtHHH+HH0HtHHH+H0H(HtHHH+H(H8HtHHH+H8HHH9eDHH|uzHcH#IHH8"1DID-IHH(oA$H@ID$I$HID-H*HHHo HRHPHH<(uLHELHHFH9{DHH|uzHcHKIHH88M1HHIH<(!IEIHH(oAIHIEH*HHoHRHPIEHHHtH9BHH|uzHcHIuHVH H1DH HNHH HuHHHFLHELHD$8dH3%(HH[]A\A]A^A_IH3-HǃEIuHt$Ht$H HH~VHxH|$PIEAE HHD$ HHT$D$( HIuHt$"Ht$H HH~VHxH|$PIEAE HHD$ HHT$D$(D ?LLJI6Ht$Ht$H HH~VHxLPIAF HHD$ HHT$D$( ) fSHo$HxHHHHǀH1H)HH H$1H  H[ff.SHtdH]HH/HPHl H ` H;HtWu/u t5H[ HLJHLJP fUH5SHHHo0HG0 Hk0H[]AW1AVAUATIUSHHHG0HG0wHsH$AD$DxIDLmIELHE C HsH4u HsLCDC+I IMt$MA~tI8uvkMnDEHHHkDCHEEAEvcAEuAEI}[IuI}DD$ T$DD$ T$IE3H$ID$0H[]A\A]A^A_H-$SH5H&$Hx8HJCC8[fAWAVAUATAUSHHxdH%(HD$h1ocokos(o{8H ocHhokXp oshx0o{x`@ohPop`oxpoooEL%/$11Ҿ I|$HI$IDŽ$HHH=$HGHLIOIHH)H9HIH?HI$HHHDH@foPfoHHJ@fo@foX )R))J )B0HH9uD<Eg HXHHfo'D$XHE1HOFFSET__H|$@)D$@HD$PHJIH$LHAUuAmuLQI|$HIDŽ$u)H|$hdH3<%(HHx[]A\A]A^A_L%Y$HHMl$ ID$ , Ml$ DH1$1Lx8HD$(AwLDHD$0LHD$ IMM9uBLZICHBA G IwH4r IWD AGEWI M9A~tIvLC HI$I$M^H+AWIDRIHIWEWHBAC`AgACuAI{EIsI{HT$DT$DL$L$u L$HT$DT$DL$IC fH$H8H0H Hx@+ofDIvIH~f~\I$I$LD$8H+HT$0HT$ c fD<1HLpL)L9IBHIH=$IJ (HPLxL0HHH(Aw1AG$IuI}E1HXL%$HHMl$ ID$ { Ml$ RH$H8H01Hx@ H]$1L`8HD$(At$LLHLH$I9uJHDMMIAIEA D$ It$H4Au It$AD$Et$I L9<$AtIwLmHEl$IMOEuLIMl$Et$IEAEAAlAd$AAuAIyPIqIyT$LL$LL$T$IA(Lt$(L(H$AƆHzxKH$HB@@AF(A}} @NIwH~t.~u(LLAT$1AD$$kM/Lt$(L AƆI}xIE@@AF(A<$fAWDIAVAUATUST$|$1HHD$l$HD$HP@DsHDkDcDkD[ADSDKEDCDKEDSD{DDAEAEEC<DCEщ|$DL$A{DDCt$DL$AsDEDADT$H;\$>qL$AiA)Ǹqi)H|$L$HD$IۋL$TȃL\$M%L$LHD$AEpIEhE`DAhAXAEXEPEDEHAPEDAxApDDExAEDEDB APDȉL$D$AH׉T$D$APADD$L9D$BL\$HD$L)HHM\D$t"D$T$LA IADL9uT$DqiA)NjD$i)D$D$[]A\A]A^D A_ff.ATUSHxHH9vIHI)DL)HHHt[HƸ]A\fD[]A\f. fDHH1HAWAAVAUATIUSHHH$HL$dH%(H$1H?H=wII vL9vIqAIIXL9LDHFŃtHC1H $IHH4HI$HWH $Hc1H HL$IH1 DI$H4H$HH 9HD$ E1HD$ZHD$hA~11IFHA~HT$1L)AI H$MnIFD9 ~mL9MLFEt1LAFu1H$dH3 %(u}HĨ[]A\A]A^A_DHD$H 9HfHD$A~HT$ 1H H1DHD$H ܓH1p f.fDHHHH0y1HfAUIATI UHSHI$HHH@E1AH!H1HCHt&HCHkH[]A\A]f.E1A!H1FHCHuHIE1DHIEH1[]A\A]G tH*tDH?B<t(<uHFHt@u Rtb1HRLHHЄIExuUSHHHhHt-H HHtHH[]H$HHzHt"HtĀuHHtH;SxtH1[]f.AUATUSHo8H_@HHH9sjII H H9vV{=uC I$H4IEHHtHSBuALAH9Q FQ )H CH9wH[]A\A]ff.USHH,>HH9v0H{uc{uc HH H9wH[]@UHSHHW8HG@HHH9sxuhxuh H H9w}C"HC "8QHC`H BHCHHtKHƒ`H`u&@u C"PHu@}8H[]fDHH=C!HCtHƒ`H`tH1C!HCfDHHC!SHCMfHH,C HCHgCC HCHGC HCHHSC HCHH7rC 1H-1HJbD1Hˎ1H-b91HA1H b1H1Ha31H1Ha91H1HaB1H\1Ha1H1HaH8C!uoHCfHH% C 1H81HHa1HH1H0a1H>1Ha1H 1Hayff.AVAUATIUHSHH0dH%(HD$(1HtPHMEHT$HL$D$tuqH{I4$qHD$(dH3%(H0[]A\A]A^L/IEI}HH)H7vIHG8IEH{1ɾH*uDHHT$HT${fL)IHOv#H HPPIHxLhHLpHAPff.@@v @vD@!s( f@wD@u.@@u*@@up@@u@@uP@@u@@ f.f. f.f.AWDAVIDAUATIUHSH7HLDIu'w-uoA|$E<u@@tOra5tHtCHX$HLLDǃADH[]A\A]A^A_DtA|$t}u@}u:HEHyy@<tl}u"HEHuQ@H0fDH ff.ATI@UHSHt" u MQw1[HL]A\DHAD$1[]A\Ðf CSLHHIcL>HC1H[fGH1[ÐzHH1CH[Ðz1CH[BtR<u~H@uH@D1sH[HRHWtHH1[@6fDHHHYH׉t$ t$ yf.~uHH@GH1ff.SHHH6H1HtH1QH3StuH[fDH߉D$ D$ fDAUIATUHSHDA\$HcHHHHIMHDAUHPHDHD[]A\A]ff.fHH $HHHHHt7H1:t HHi$H9B0Hf.1ff.AWAVAUATIUHSHH(dH%(HD$1FfD1A|$wA)ȃHK@H IHI4<7tDBu HcBHH)VHcBHH)FHcB HH)V DB HHHyHAHHH9t@xt HcHH)HH H9uHcBHH)VfDHcBHH)Vf.F*<H چHcH>fF LG@HHHDPHHIIL9t;yt%HcHL)HD L)HLH)HLG@H I9uHcFHL)HH)HLH)Ff.HcFHO@HH)HDL)HHH)FHcN HH+G@HHH)N @HcNHH+G@HHH)Nf.HcFHO@HH)HH)HHH)Ff.B;<6ATIUSHHHcH>DH$HHrHt%HtuHPxHt I;T$xtD1[]A\Ð{uHS H HH@HExu@HHtI$S @HTH2Hx@H{uHC |H\`H3HtHHuoH3@H$HuHS HH HH@HEHHHH)H[H]A\HH8HC%=K HHH4 HH@HEƀx\I|$HNGD@toHT H2H@vH%HI\$PH9XցtHgHHHHHH 1ff.fHWHH t8H tZHHned_varsH3W Hget_defiH3GH fHparse_stH9Gƒ!Hmb_parseHWH9GuQHfunc_getH9G1fHtr1H uHfunc_numHGH9WHfunc_getH9WuŁx_argux suDextrHGt{compDasseufrtu11 r1z_str@z_argx1)@fxacyxto@fxacfxt\1Zx_argx s@AWAVAUATIUHSHH(dH%(HD$1F<~HHcH>fA|$u`I$P9S/-uIHQЀ w=HpHHxet)AD$ t I$*AD$H$I$LHC CAHHxHL$dH3 %(DH([]A\A]A^A_~uE1A|$wtLLHgC HHP C eE1wE1A|$hI<$? ?H$@<%D$AD$ t I$*ILHC .E1A|$LC I<$IH$@<%D$I|$ HHhC A|$lI<$HGHWHt5HDH9w+8:HWf.8:HH9usE1cBC;M,$A}\LHC I<$IH$@<%D$I|$HHC HHP C fDE1A|$sLffDE1A|$=@HH{iHsH{HCS@HwHfDIEHxLpHIuLIHIIIGMwoCD7AD$ uRM<$AD$fDIt$I|$yID$It$I|$YID$I$*t(AGM<$<%I<$S?I<$EI<$: AWAVIAUAATUSHH8Dg8HO@dH%(HD$(1III9w"f.@8ktBH I9@8kuD9kuCp@fH=i@Hc4H>D9k uLHL1IcvXHH)AHvHL)HH4vL "Iv`H9~w v9!H L9uHCCCA@ tI*u I8H|$(dH3<%(H8[]A\A]A^A_Ld$l{L{ufDI AtfAAu<1A MGAGu fI AxtfAxA$H I9gH$dH3%(R HĘ[]A\A]A^A_fD{skHC Hf{L{ fLCL{ %=uK CHl$0IHHHHHuCHI@ tH)CHI@C HI@ tH)C HI@KILLCw{H D<$HC sIHHր~K HHHʀzXH|$IfCHl$01L{ HHIH8 AD$8CHI@ tH)lCHI@KIH޺LHCCCfD{L{ sHl$0HHICHI@ tH) CHI@KILL<[CHHLmD{L{ ZC HIxBH8HHl$0H?7|$8 C HI@ tH)C HI@KIH޺LtCCCHHL?f.k MHL}_C<IMHF<z<6{m,{"CC9CHuHHHP P H8 @Hl$0H|$0D$8Ĩt ~C<<u%CCCCCCCC IHHHB tH )IC HIHDKLjHCCCfDC4CH}A@LMI fDu@I AxtA@%==1A@ HIxHHxHAGIH|EP LHHHxHHx 0LHHHxLH{ HH|$HHxdILD$JHxuHxH5i0H\$$Zf.SHl$0HHIeCHI@ tH)CHI@L{ KISLLCHHLC)fSHl$0HHIU!sH8ȿHD$HxHs HHI H8膿HER_HALT_H3G H__COMPILH3OH HHOFFSET__H9G(4HQ$fHl$0H=W)D$@H)D$0)D$PHD$H$)D$`H)D$pLl$H_HHtiC HI@ tH)5C HI@KIH޺LlHCCCH$HL$LHCIHLxVIMHt8HDD$HL$HxHWHyHwHx}HL$DD$A@H$HHI4HH<<%k HICH8螽 H8葽HH8脽"HxLD$HYfLD$AwIHH΀~HUHC HD$HHʀzY<$.{H\$H8CHHLCCCHIExH9H8芼HconstantH9HH=eLD$LD$IEP UHxLD$H5@e蔾H='e[LD$IEP Hx HL$ H5dLT$LD$:LD$LT$HL$  H=dLD$IEP gHxHL$ H5kdLT$LD$ѽLD$LT$HL$ ,H=9dLD$gEP ILHHmxHl$0H6|$8 S虺H=cAGLD$HIH0~/HNLD$(Ht$ Hy HL$HHL$Ht$ HHHMLUHHHELHEսHL$HD H谸}/LD$(HE]UH\$mHCIHHHB tH )t(ICHDSH:覹lH:虹CHHLCC:AGHl$0LD$HHIH84GLD$IEP LHH@ tH)IEP IBDI@A@A@AGIHHHB tH )PIAGHDIGAGAGKIHs LKHCCC[AGHIHHxH@H~\HLLl$MIHHx:HxH9r#Hھ:LD$ H)H4LD$ HuHLMLl$CAGCECC EP ILHH@ tH)IEP IH\$BDI@A@A@IGAGAGHEEEAGLD$HIH8H=ǂ$HHLD$HUHmHD$HLD$ѳLD$HD$HVH$xt=HC HD$H8LD$膶LD$IEP dH:iD$8EP ILHH@ tH)0IEP IBDI@A@A@AGIHHHB tH )t}IAGHHl$0LDHC IIGHAGAGKHD$_CHHLCC*hH:]vHK HL$ED$8UzmBk蔺HD$LD$NH8LD$LD$IEP ^H|$LD$LD$EIHl$0<%D$8EP LHH@ tH)IEP IBDI@A@A@AGIHHHB tH )t[IAGHHl$0DIGAGAG_H8LD$LD$IEP ]H:dzAGLD$HIH8詹HHD$H$H螻LD$HHHC HD$:t_HL$H\$QD$t#HJ8:MLl$"H|$蕸HB8uA@ IHHH0H~ H=~$H9z0҃T$8@ tH)-IA@ HDI@A@A@AGIHHHB tH )t|IAGHHl$0LDHC IIGHAGAGKHD$t2HCCCH:wCHHLCCMH8LD$诱LD$IEP HC HD$H8LD$ILD$f.@AVAUATUSHDg8H_@IIL9smIH-F]fSwOHcDH>f{u{HItaCu{H I9wH[]A\A]A^f{uZ{HIG<tD<u2Hx97HpE1E111Hx萵t{HIYfSu{w{ HIG<]<u:Hx9LHpE1E111Hx-{ HID{uRCHIxu>Hx95HpE1E111Hx辴t{HIGK{C HIxHx9~HpE1E111HxO_{ HIԲG{6{HI諬{.u CC{{HIc}LcsIދCHI@ tH)zCHII)@DsCC*C<{<*jHcK(Hc{ H H9tC+{K C-Af{ HI c<CFC fD{HIe{+uSHIB tH2.SHIBCtCC*CC C|CC CCCCVLcs I~C1C :KH8yH:D$ SD$ HIaCC CCCCCUHAWAVAUATISH(Do8HW@dH%(HE1LIHHIIEHHHHHH)HH9tHH$H9u% HD$HH9rHJ @,wsf@+@%@$r~@ wqH9vqDBAy*u7McqO1L9t*HDHL9tH9uAHE1DLcJIL9Ay*uIcyLE~4H98`HpEBNf.HH9~:I9uJ誠f.AWAVAUATUSHXo8dH%(HD$H1L>II1H_@IHD$HHHIHIWLt$H@HHL)H9LIHL1LL$+LL$E1LD$DL9LL$sVHD$0H-OMHD$ fDS,2x&HcDH>IcH@ADH I9wMI9HD$H;GHMH9HD$HHD$HdH3%( HX[]A\A]A^A_IcH@MIXAIcH@ILHHpC r 9_LB(H@I@HA<@IcH@ItH>H KDG %D9LO(H@I@C%=]pK SIcH@ITHC J 9Hr(H@H@Z CAqAIcH@IH:t;HJHt2A<=t<;BDXAAfypEt/HH(yAO[NHykI9uA9~ELD)LLHHLIt2 H H9IDA CD tA=qH:FuGHGL9w Fw )L\$AA IHHDD GHDD A HI@ tH8/A HI@A L\$HI@ tH8/A HI@HσA H2HT$(HL$THT$(HL$CHl$MH_葠I$H;kHH9BFA=qH:FuGHGL9w Fw )LT$AA IHHDD GHDD A HI@ tH8/A HI@HσA H2HT$(HL$dHL$HT$(CAG,C7C.G4D@BmB|L`L)H|$L9LL$ IBHHT$躠HT$LL$ ILpLxLD$HL HPI(H8HL$(HT$lHL$(Ht$HT$A HHH8HL$(HT$8HL$(Ht$HT$A HHH8HL$(HT$HL$(Ht$HT$A HHK{ OHHH @HL$0D$8t Ht$ H|$CCHT$\CHT$CHC1xOŀHwH=_IHc H>H ׅuHtQt8@F@@ԅuH@@@ @1@@@@ @@@@@rCC CCCC#H|$ HT$HT$EH|$1E1H5'FLL$0LL$1LD$M9M7fUIHAWAVAUATISH8Lc/LdH%(HE1IMM9LE15HHHtN*ouAI9BH@tzȉIt$@Z̅xHHHHH9rD{tLH H9v{uCHI$@ tH8/CHI$@{uC HI$@ tH8/=C HI$@xADLEHHH]I|$@LLEHIDH@I9vWDIEyq QLEHMHHHL%HMLEIH)HH@A̋AI|$@HII9wLEߚI\$@LELEt$8LcGxyyHtrP HIL$@HHLyWրwRIcL>DHHcRHAT HHH)ʉQHHcHAT HHH)ʉQ H@I9sAL$\LcIIIFHHH%H)HHH9tHH$H9ut H)HLHD$H1E1FfDJHA9T$\I|$hHMPHL7A A HALyD,EIcHGIGT DMT$hA|2MXABTVkqHHcHAT HHH)ʉQ@HHcHAT HHH)ʉQQ HI$HHrDrHIHcIHA| L9NE1@HHHH)ʀ~t'HHAzIHcHA| HHHH)H I9uQ%I|$`LEWLEID$`IvLLE5LEA$AT$8tLID$@HI$HH9s(xuHI+L$@HHpH H9wAT$8IxHLENLE1A0~&HHIPJy J IPHA9HEdH3%(lHe[A\A]A^A_]fH8LEHMHȔC LEHMHUHI$@H8LEHMHU蔏CLEHMHUHI$)@I9eDZHEy9fDQEx'H@I9wApfDBU@HzHc?HLH9uHFFFBЃB@Ix4HAt7 q fAB>AD f9AD$XHUHH9u f.<tH H9CHNth~tcH HC4HcKHPHȃ?HtCHHx@;LZ<@Ic@HH!HC<9<&.< uLHHH!H\@I@LM9HD$H8HD$H;GRHLd$H9KHD$HHH[]A\A]A^A_f<7HA@A/H|$0#L$81HIH THPH9ufDHpR$ LD$ H0&LD$ C1C[Hl$Ld$H_|I$H;kHH9<toCC CCCCCL`H)LD$ L9IBHI袌Ht$LD$ IIHhHXL LhH]CH4$HH@ tH)tCHH@WH8LD$(LL$ CH4$ALD$(LL$ HHff.AUATUSHL'tcHHIfEEtH HHA| u7uI}FHHP+w@ttH|tH[]A\A]ff.@UHAWAVAAUIATSHHH8L%HP$dH%(HE1I$,HtgHCu.1HMdH3 %(He[A\A]A^A_]f.H SIMAUEttfLCHsIHHI@HHH%H)HHH9tHH$H9ut H)HLL|$HHMILELƆLELL臃HSI$L裇HMHHCt8HLcfDLE-EDHL+fDHHMHu蠉LCHuHIIPLELELLƂHSI$LHMH?Uff.AWE1AVIHAUATUSHHt$ dH%(H$1HLHHD$0H$HHD$@XzAFLAFH$=HD$ @"$IFHHD$PHANLANH1HY?HHHHIH64HD$ IL$HL8IGM/HL)H9m*LIL1L7H|$ AFLAFHH/HHHUHuHHt$hH)H9)HHEL?IHD$8IGH4HHt$PHHt$8H)H9Y)HIfDH8HD$0H;Gq"HLd$ H9j"HD$0HH$dH3%(2H[]A\A]A^A_@HD$ H8HD$0H;G'HLd$ H9rH_装I$H;kHH9tfHD$hE1HD$8Hc$H$D$dHHt$HHHD$(H\$8HT$P1H辀H|$@HLLD$ HwHD$HHt$(IH9oAD$tAVLAVH1LHdIT$It$ I~@QA\$ AD$HHI^@HH$H9L|$8Ld$1M@St?s@F HcCIHPHMTI Htfy Ct*HcC IHPHMTI Ht fy( C<( 1<H=3HcH>4t HPSPSH@@@Su_HcCHHPHIHsKu@S00SS? {mK HI$Iq@M<C@ƀ @8Ƹ4DCD1C%=@= Ct'HcCHHPHILHt A<Ct%HcC HHPHIDHt xC<d K {<tI<yHcCHPHIDH]@<8@fDtB*HcC HPHIDH@<8fDC,1KHcCHPHITHBN$hH$*WH$sEDHPSPSS+,VH|$Hr 2HJN@<<{ tCBHcCBHPHIT&fD<{v,DDL]LT$HL$IAHI$@ tH0.AHI$@HAAAf.wfDsI$IIAVMHHq@t'mLQvMI$HHq@t$@uH#vMI$HHSLHMJHDpEMcA  I~ LL$HywM$LL$HHHMcHyHALLqEHL$XHLT$I4LL$HsELT$HL$XLL$HI EHI$@CI$HHEHHrHRHJ|CsEHI$HBD0DsI$IIAF tI*DsI$IIƋUHH<H:$I@<%AFEHI$@HEEEHCz@KHI$Iq@<€8º 4DSCCC SCyDC,YHcCHPHITHH@<4t< H=DDLLT$HL$IAHI$@ @HAAAC<,<-<+"{HI$~kHD$CC CCCCC@HPLHL$XLT$LL$tLL$LT$HL$X/DC+ HcCHHPHILHA< <5 ChkfDSHI$zH HyuB t)OSHI$BCCKCC CCCC S HI$zH2H~ B t.S HI$BKCCCC YDHt$@LE1BD$E1E~PMID9$~:LHH$Ey%u M!IID9$ƃl$dH\$8HT$P1HlHD$@HLL|$ HpHHMLHAG"HD$ H8HD$0H;GHLd$ H9H_pI$H;kHH9wf.DLHL$LT$苁CHL$LT$CCCACACIHAAADAID9 AWt0AG HIV@HHDx*uH@@@IO@H9lL,$MLd$IA\$ Et$HII]@IL9r?f{tsCH CCCCCCI9{u‹CHI@ tH)CHI@{uC HI@ tH)C HI@SDH0.^ AHI$ 15f1f1]f1}f1f1f1f1Pf1mf1%fH݋SI$K HHHH2DJH<<uA QpSHI$HHcH$HI+D$@HD4B tH )_ SHI$BC HI$@ tH) C HI$@HD$C*CC@HD0KHHݺ?HݺHMHݺHrH:HjHݺH(Hݺ7Hݾ0jH_I~ HABA:HLLL$HL$hHL$LL$LpIH@LMciH8LL$UfC LL$HI$VH8LL$/fCLL$HI$A|$AFLAFHLD$%H|$hHc1fIcD$Ht$hAT$LD$HPHIcD$AT$HPHL I~@Ic1HLF NHHHHH9r* f.H H9 PtA|$D‰A9.*A+g.A98*-8P+Hc@H|$hHPHFH.@@AHL)H9~(HcHAtxIDH 0H@x9ET$AH;W9G 99#Mc\$HcHIPLIF NHHLHH9r fH H9 PtJՁHt D8,*FHET$AX L AA;AAIcT$HcHHPLHHT$@A DYHIHIL9rfH I9PtDD\$@+|$+ .9t$ p@t A8@@8t *AuHAA|$+@Iv@L fIcyHLNjW HHHL H9rvH H9fPt*GA|$+7AAAHHAD$-eDHDHL)H9~*HcHETExILH 9H@x9A9{IcHIA@ HHF<*9 <-x <>AF o.A,$ovAt$A|$CfDKHyUDs I$IIAVt#HL$LfI$HL$Dq IIAF<tHL$<LifHL$HcCHPHIDACACDY I$C IIHM HMADpEAC McHL$I~ LD$HgHL$LD$IM$HIMcIyIALMqA LL$pHHL$XI4L\$LT$HcHL$XL\$LL$pLT$A HM A HL$HI$@C I$HL A HIqHIQJ|EcHL$A HI$HBD0Ds I$III>Wu/ Ds I$IIƋQ HL$HH<H*$HL$I@<%AFA HI$@HAAA4BBJ fBJB zLL$pHL$XLT$eLT$IHII{IrICMsIBL\$HPbLT$L\$HL$XLL$pABA*{HI$[CC*CC CHD$@eHl$0Ld$ H_cI$H;kHH9q@LHL$XLT$LL$9eLL$LT$HL$X1D{ VBD{ >B5D{ &BD{ BD{ BDHBCBCHBBBSDHL$@HhLRH8HL$\HL$`xiLysHcC HPHITHHPSPS H@@@yLHL$sHcCHL$HPHIDACACHAAAf{HI$YC CHD$@CCC*H8HL$[HL$HL$@H1L`LL$H8[CLL$HI$3CCHD$HPmID$AD$AD$kwA5 A AD$FAD$ CHA*AD$fAD$CA|$-H;ET$MN@fDH8LL$ZCLL$HI$H8ZH:ZHD$HcHHDtlf.I9 HHcHLDH9 HHc0HLDH9 HHc0HLH9 G/HAAIv@L :AD$I@L9MLd$L,$EHU4A GEE A+G AGHcEAGHuH9 I7HUEHE'ZHH0H@H@@IAFeHL$YHL$HH0H@H@@HAMI$HHTH8XFH8XtAAZI>XEsHl$0Ld$ vHFCFCHFFFKp@t%A8u HcpHPH9t$ @+3@8Qp@tA8t[DXIcHPH9D$Bq%-*H@+ @AA|$fDMcIv HAAA9LHL$XLD$L\$YL\$LD$LpHL$XIH@MMc`HjL)H9HBHHW^HpH(HLxHt$8Ht$ HHXH4L`HH)L9IBHH$^H$Ht$ IH@HD$hK'HD$8IIIGIoL>HiL)H9HBHH$]H$Ht$ H (LhLxHHHPHXID;A@o&A$$onAl$IHHl$0Ld$ A|$HISA|$+uAT$HIB tH2.)AT$HIBAD${AD$*CA|$LD$HIXSLD$AD$tHI@ tH)mAD$HI*@fAL$AD$COA@go6A4$o~A|$A|$CIHIHRP%A|$HIRA|$.uAD$AD$HCPAD$,HPHHHD$HcHHDtk|$,/\,P~D8uHc@EHPHA9\FNH@A/A,DPA"HcxL\$hHPHE;F.f.DPA^HcxL\$hHPHE;AF4HAD@AAHcxL\$hHPHE;$Lc@LIPIEGD@FH@A2Ft$-%PA8Hc@HPH9D$qHHL$xLD$pL\$XLL$YLL$IHIIzIqIBMrIALT$HPULL$LT$L\$XLD$pAAHL$xA)AD$+QRHL$HH0H@H@@IAFHL$fNDs I$HL$IIYaRHL$HH0H@H@@IAFI$QH:kQH:^QAD$ID$AD$fA|$HCPRHI@ tH) AD$HI*@fAT$AD$HCPDPAHcxL\$hHPHE;hD@AoHcxL\$hHPHE;RHcxHPL\$hHA<;@x0F*#_ID$AD$AD$AD$1AD$ LEQAGIsLӉLˉ?A9uپHHI A9MDLADHH AP@tEHcP H|$HPH)AHcMA?L ILuAP @tdHcPH|$HPH)AHcA?M LILH|$A H4xH9T P@6H I9@Ll$ A^IU`HtLAEX~D11IU`HH :HHPH)E4AD A9MXHD$H8HD$(H9GILt$H9HD$(HA]LHX[]A\A]A^A_HDH I9QFA€|@AtӃtH;EL@BHύrsH<ӉLˉ?A9uپHHH A9DDLI8AHI H3E@A"f.HDZ"DH4DDHHA+It$hHƋ~HA+VIt$hHƋVtA+VID$hp HA+P HA9L$\A$I$t$A+HIT$@HBRuIHEdH3%(He[A\A]A^A_]@HcsHHIT$@H<3H9\HT3zuH ztH96C-@DoHLHIt$@LMoKENDEYLMEDEfDH)HLf.LXGEL$8I\$@IIII9}LE?fDAWAVAUATUSHHcHt$dH%(H$1L&H1I$HD$HHHIHXHHID$L|$HHL)H9LI $L1L@u8HU@D$0HHH9H H!9I"8fB<HcH>@H|$ LD$PHL$HCHL$HLD$PLH H9LD$EH|$ LD$(D\$eBD$0U8D\$LD$(HE@HDHH9s0xu HA Hxu H A H H H9wHD$H8HD$H;GHLd$H9HD$HH$dH3%( H[]A\A]A^A_fDzuBAH H9H$11HHD$ >HD$L HcIT$M$HHHL)H91 LI$HcL1He>I E1LD$1ۉD$DL.EMD$4D$(D$@HD$pHD$8HD$XDLcHOHPD1D9t"HIcHBo"H IIA?H6LN /ALD$hMcHL$`Iy LL$HHDCs-LL$HHHD$8HHL_HG$thifwG>HLOHGJ4 LL$PHFHL\$HHP\?L\$HLL$PHL$`LD$hLLLD$PHL$HsCHt$8HL$HLLD$PHFAHHVAtNH|$ |CHL$HLD$PL_Ht.H0HHFL"HD8L:uALD$H-9L*LD$HL@B A 8BA BAzzHcB A"zu BAzHcB M HHxzMfDzHcB A!}DB AhzFzLHcBA!;BDJ %=CB AB AzzHcB AfDB AB HHx \$0X \$0f.zvB AffDzVHcB M HHxzI9'|$DuF t/(u*H>LD$PHL$H6LD$PHL$HLD$DD|$0IcHHx Axlj|$0fDD9tIcoHHIIDt$(D$(AnfDD9tIco&HH$IIDt$4D$4A6fDHT$XH|$ IcLD$HHt$8HD$pD$x7H|$8LD$HLWD$HLD$H2LLD$Hl@A! @A"@Hl$Ld$H_:I$H;kHH9@_IcwHH9} HD$HcHH4AQLD$`HHL$PHt$HPHcHz HT$8H;HT$8Ht$HHHHL_HGHWHH|$8LHPHp8Ht$HIHL\$HHHLHȹ::fHHJ HRHpI|HVHp7H|$8L\$HHL$PLD$`LOpBAz;z5HcB DJIVDHfDB AzHcBzDR M A!WEQDBAz-HcB DJIUDHD9tIco6HH4IIDt$DA@D9tIco.HH,IIDt$@Ax@D1H|$ McHHL$XLD$HLl$pLD$x 4D9LD$HL@Iy LD$`HHL$PHt$HLL$89LL$8Ht$HHH8LXLHLLHH@LL$HHD$85LL$HLD$`IHD$8HL$PBDH|$8Wu7t$H7LH01HL@ t H)gAAAHA݉ILD$HHDID)DHAL@ tH)uH81LfDE1HYL)H9HBHIw8H H\$ILxHLpL`H@HXL)H9HBHI78HIL@L`HH\$LhHA-HLD$HDH|$8c6LD$HLLD$`H|$8HL$PHD$HtA-HD$HHL$PLLD$`H0{H8LD$H0LD$HL{5HD$HLD$`LfHL$PH0:01E1H57HD$1L M<$fAWAVAUATUSHcL4HA>uMHHZIHACI~"E1HLHLB ID9{EPUAH[]A\A]A^A_fF+GDHHHHff.@AWIAVAUIATU@SHHLvBAMAUAofAE HAtB D9BAMqD9tLxHL]AMID9IEJcAEHLuBBAMqD9uIՅ8H[]A\A]A^A_fDz@*sBDC AtfDEAƁpt0H{ADE9wDD|$(M׉@|$ σ@|$D$ A<$AAAG DK\E1ҐHChHHI4AHChHȋptI4AHChHȋptI4AHChHȋ@ tI AH9S\sA@1IcE7HHHHIHH$IVHHHqH)HH)H9HHL1HB'IoES8tm1HI4DEtLtHcAHHD+@ D@HcHHL@4@LH@HxHx$Hx,P 9S8wHcE1L?HH+P PAL|$0AfDUAE HHS@HLtAF*<IcL>fHcE HH)HI4AAEII4ADK8DE9ZfAE9sDfAAtDEuHcE|1E1AG `DSXES11HC`DI4AHC`DI4AH 9KXEHUIcF IL+s@ICHEDhH@E9L|$01LHYAG L$ T$ H|$AG t HD$\$( Hh1[]A\A]A^A_DHEED(AA1fEHUIcF;@EIcF HULH+C@HAIcFHUIL+s@ICBfHAV H HHЋT$ HH1LABHMHcHHHHH>H$HVHHLYL LL)H9ULHHL1LT$8#LT$8LHEEZIRLS@IIL91HDL AHHzt)Hc:LL)HADHEyD@1ҍ~E~fH4Hc HHD 9PH@I9wHcuH1HHHIHcM}HHHIGMHL)H9LILL1`1IHEHL9s$Hy PP@H@I9wuHE1ɅfAH@D9M~pWyG1~fHHcHt";t7HNH H9PtH9uHHPPHcE @H9wAH@D9MH1[]A\A]A^A_11HL)H9HL$HBHH$Y"HL$H$L@LxHHIEHHPHH51E1!M}1Mff.UHAWIAVAUATSHHLfdH%(HE1HcEHHEH=GHEHHPHHH)HHH9tHH$H9u%H\$HUHH]Hu1LHEID$HAD$ HEEHELp}EVL]AEL]L]fDUII@M9A3yAC~IcKIWHLLLfDIM9t}IcHHHAT xHc9tf.4D,A9~@HIcD 4HD9|D9~HIcT H94|9uIM9u*A9K AKEINMH}EAD$ HuHAy+Vx$HcAHLHcQ,x9V(DA,HH@H9uEEIL$pHHu H@H9tQyHcAHLx(xxDHLx(ybHc@ yQ H@H9uEH}EvaHkWfHM IcQ0D9AAuV(EA0/Q AD$ Et^H}w1H}dH3<%(u>He[A\A]A^A_]H)HLHlIcHH1҉Q 7ID$HHEUHAWAVAUIATSHhHUHcH^H dH%(HE1H?HHHHHEH=HEHHHH%H)HHH9tHH$H9uLd$IM< 1LIcMHIHEH=HEHHHH%H)HHH9tHH$H9uHD$HUHHHEHHEIHE1E1۹IA$IL׃I9 HcHEtMcHMJ4H9IIIcH,x&AA?M I9LsHHcL 0yAx~~IH|H}LcLIF9t tTAAAA?O MMr9MЃM:PDAkH)HLH)HL4LHH9MuHMASD1HcAEtHHHEIcEHIHHUHEIH}HvKhEuI@HPIcUIH H?HHHHEHEHEHHPHHH)HHH9tHH$H9u%t H)HLHD$HIE~#Eu1HAHT(ATHA9LIcL]LH AEL]yHEELxHxHuHcLH?D4H1H5IcHHHދNHMHE1LHE1HpFIUDHD D9N teMcы~(LHH9x(fHc@ HHH9x(D9HEA;B9<~!HpHE?B9<}NEAD9FwLcyIHcI)I9A4DHcHH؋P$yHD9t΋PDp$~IUHcp41҉AA?MI8LrLI8HcA49PnpI}Hc4DȁND?eIHH'HHHcE HEAEHu9%Lx]H}wcH}wNH}w:HE 1H]dH3%(uHe[A\A]A^A_]DoLH}}Ls1xIcEIHHEbf.fUHAWAVAUATSHH}DjHZHXLbLr(dH<%(H}1H~EH}HzH}Hz HpEHUE1ALuHzHHDHHEȁMEH@EH9}D7EyHUGHHB@WHHH9sMctKHcHHPH΃?LHL3MIr MIM 4x|uLHI 2f.HCtNHcHDXHPH΃?LHL43MANA~Ir MIM 44DPAt5HcHMHPHILLH}t A|H 3H9HH tH9v xHHcHpHPH@Lv@Ic4L>@D]Eu@DMILHM 4L 3HfHcHpHPH@N@&DuEfAʃ?AMJ4NIDUESAʃ?AMJ4NIMIM 44uHuFtfD@~t*@`D]EuDPEJf.MILHM 4L 3@'@@t5HcHHPHAʃ?AMJ4NIr MIM 4@HcH HPHAʃ?AMJ4NIMIM 44DIML@M 4{LuEH?HHEHH`H=H`HHH%H)ǁHH9tHH$H9uLD$IH`L1 }1ɺI~!}HHI 49uEDEEHI<MLAEH}H<HH}HLHhLIMIDH}t!H;u[HCDHHxuEI9uH`I1H}dH3<%(He[A\A]A^A_]HEMHHt@AHHHmuHILmH!Au:AAULxLELcIK >DHU1HDUZ LxLEDUHhHMLJt8L)E@IHI#I HHH9uLpHULEHuLDxLMF LMLEDxwHUHuLDULx4 Icu1DUHXLEHLxHpAE,@ HHH HA+HshHƋ~HA+VHshHƋVtA+VHChp HA+P H9K\Ht$A+HHC@HP@uH}tRHEH@hHtEHPHH+K@HA HH)HPHPHH+K@HA HH)HPH@(HuDs8H}`HEdH3%(ZHe[A\A]A^A_]Au A9s"DD)DAAAu D9wAEAEEu A9DAD$ML+UIH)HLEHI ILEHHEADD)HC@|E9t\L[@DL$HAoHLAoLLHIG8NLLoAoXA[@ AC IGDAEHH A9lLEA9DA+E HAEHC@HT0zDHLEHHtULEm@EtD9K8vH}H|:+@tDDdHLhH|8HpuHxDUPDUuHxHpLhDdAE6H)HLHLUHuS8LUILMHLG\AVAUIHATIHzMHUHLH)SHӃXHH1HBPHHHEuAHHf~E"HLaLHLSKHE  MIDEHuHDDELD$E#HLHDAHLvHL^oHUHLHE#unH[]A\A]A^fHHRLm@HLu}HE @HH"Lam:@HL1҉D$ ~D$ H[]A\A]A^fDH[]A\A]A^fDfAWAVE1AUATUSHxdH%(HD$h1HL#HcHǰHXhHLl$HIL|$PIin_arrayMIDH[(HHk}uHCHtH@HxuL9HuHC@uf}Au}LT$LD$HIHkLT$Iin_arrayLD$D$LeH`A@HL$hdH3 %(DHx[]A\A]A^A_f.D$LeH@fA|$AAD$HIxUAt uLLT$(LD$ L\$D$XL\$H#1HHD$AsKL\$|$LD$ LT$(IKACVHHHD$H9tdH\$ HLD$(LT$0#<H3H|$LH H9\$tCt<uH3H|$LH\$ LD$(LT$0HI+u@HHI@8LA HcLLT$8HL\$0H)IP@L$(LD$ H‰HD$XDL\$0LD$ L$(LT$8AACHCI+E@HH4IP8HHt$ NJFHD$LLLT$ D$XHD$PHCLD$@D$HSBHCUPHCUPHC@HSLD$Iin_arrayLT$ B HCxuEHC@HC@HC@HC@HC@HC@HC@HC@HCA@ HC@HC@HC@HC@HC@HEEEID$AD$AD$;HHHD$H9 LD$(H\$ LHl$0HEtK<uiHuF<9.DmED9u@}fDAI8I0D9c,2D$$HD$@"@HD$hdH3%(Hx[]A\A]A^A_@}DGAvDGA}}@H{8HHHHcHHRH } HIoL\$L$L\$L$Wf.gDEED9}E HIxH8IcHcH@HHCP)E#EjfD9_}EAJHcHCPH<HH$8*Ay|$}@|$(HH<$HD$0H@H$uEHD$0HH+D$0HHHD$@AD$0x HcHHHHD$HD$9F D$(D$AAP|VD9fIcхYAy}DHRHHCP,EPv <U EaH $HC8D EmEEELK8KTID9b T}J} HIHt$LLT$L$D$PD$XL$LT$E HK@J9fD}HIHt$LLT$L$D$PD$XpL$LT$EHK@J9@H{8HHHHcTHjbHRH H}HI0GL\$L$L\$L$(@D9W}=E HIx%H8IcH@HHCPE"E@},HK8HtoHHHs(IM uHHJq@ar tM@t..AAADAAAAցDH @DAHq€IIL9Nt#ׁ H~tׁ@  H L9uLLHL\$L$O4L$L\$ALD$x'DHL$K3LD$L$AA@IGAAGAG3FD9qAyHy Hy(HH|$8I{@GHD]Et.xu(H4ElHcpHPHE,AxtZp@t{t!HElHcPHPHE,AH9Iw@HDutxuH4El HcpHPHE,pA@uHI4Utx?tHcPHPHAVDn`HcpHPHEH4E\D]E@H4I4AuLcXIPIEGD^DnHcpHPHE,AphfDAZ1HHc4MIH4HHuf.HHt`P9yLcNIVN A;LcHA9\uIHcP@E HP`F HHufDM MAQy#HPII9uHu sHHtXPyAQ@9P@uLcVIVNA9LfDLcHA9\uIHP`EYDFHHufIHu@H9yEn,Y,x4AH]uELLLMcIFl 0EyH}tEt H}^1HMdH3 %(He[A\A]A^A_]f.@LtHcP(xAP0HcP,xAP4D^1E~LcH@GLH`EH9VDHDEDhDADp@t>u9p@t Hcp HPHErH4E\gHcpHPHErH4E먀xu!H4El HcpHPHE,AuxrH4El Hcp@u pH4ElHcpxuAw ubE1!E1HLMLEHMLU'AWHAWLHLUHMHELELM H9yulD9AufA<%tn<$<<uSA%=uDHqH<0HHHHIиzu$HIHcAHPHH H9uÐyuIHcAHPHÐyuIHcAHPHÐA%=tQ=uyHH48HHHHƀxHHH9lHIHcAHPHHqH<0HHHHǀx8HHH9"HIHcAHPHfDAWDIEAVA?AUATUDS1ۉHXFH|$D|$HH~ HLLbHcHI<o9McEMIK<Az3McjD`LHxLIPIEJHt11HLH@H@fx H@(H@0@8DpELHxLHH@H@1H@(fp H@0@8HLvH(H@`ABp<ARB<hABA9B B<xABA9BAB%==McjHhAJIPHIH4HHȋ\HHHtq@AAE@ aED`LLHxHt(DD`LAH@EщPDpEHxLL[HE`LAH@DҁсAEщPf.LLLDXEEH(HIDHHxDXEM_E1Dž`DI@EL9xAyA{~DH8HHpH٩MtH1H4HHH HPI9uHpHLLLHH!1BA9\HDHH#DHHtHL HL HHA9wDž`I@EL9xD`EHhCLCHHHpH=- HpHHHHHHH)HH9tHH$H9u%HD$HHxDXEH(E1DDž HLHAEM剅I L9wC|JHyH tH8HH8u#H8HHH9tHH8tH0HAH8LH(HH`H`L Mu%AH`A3H`L MtDC?X XMtMyKcT1HHHthHHHHIHHHHI@HHrHHH)H9HHL1HLChLC`KcTLHHIHPH@HcD8CCDHHIXLCPC@H0J(H}pyqHx HHHuHHHHpD 1LPL 8ACIT$HHc4tVA;stP@1AHI<Mu!fHHI#H HPI9uHIct7 tA9suA9[D MnfD1H%HxHPHhPABA9BAB%={HhD\EjHABEuHHHL HH(H LHL McDpLIPHxLI7H`L@L`f.B<qABA9BAzMcjD`LHxIPI%LEHt3E1HLH@H@fD@ H@(H@0@8DpELHxLcHH@H@hD\FHh1H8$HHHIHHHL(ID$HI]IMHH)H9HIEHL1;HhHHPHHH8C8HHSLHcCHHxHHHMD`(HQHAHLHxHPfD@ H@,Hx4EAB<<<#<DpLEHxLHUHt6HAHLHxDh(HPfDX H@,Hx4HH9D`ELHxLHYHHM@(Dh,HxHQAHPfDP H@0@8HLHpHxHH@v H}HH9Et_DpELHxLHtD`(HUD`ELHxLL kL Ht-HU1ɀHLD`(D`,HPHPfH H@0@8L DpEHxLL L HHUD`(D`,HPHP1fP H@0@8HLlDpELHxLL L Ht-HU1HLD`(D`,HPHPfp H@0@8L ED`6tHH 8H9HHH :H9Ey EyztvAzHh\ARHxHHPt]tRxHEHH)H9YHHE8fDE f.HEHHEHtHH)H9AB<HhARD\HH HHEHHPHEHH9HHEEO{@AMcZIPIEHhEBLLM\LHLA AB<t<+AEHEbHHHEH)H9?HH)H9!IcBHPHA uDpLLHxHt(DD`LAH@EщPED` A@ AMcjHhAJIPHI)`LH@P( 庀`LH@| f.Ht3E1ɀHLH@H@fDH H@(H@0@8DpELHxLHKH@H@Hp0Hx:pH#LHx@HL A<$HD1$E1H5n,HHL(1IMH1H5mHHE1H1H=1E1H5mHHL(IEH01rff.AWIAVAUATUSHHLR@MISH~1L1H8@@@SH9A;W,}=HcHH)IH8@@@A9W,؋S8UHcH@ A HcA9uHH;t ;Pt @ AË@@떋@@@뇋@DIЋRIIx.H988LH+w8HHA@A@ AA@x9uoAPAPAA@x3H988LLI+r8HHA@A@IAAAAAH988LLI+r8HH?A@ofDFLO@USLF`AE1AfDHcFHHHG@~4A;|hHfDHPA9LHH9u1HcHH)ID HHtBH9tDBEyfLB`A;fLLHC9LuHHBPHHuAD9~ELF`FLO@C I6HFPH(sfHBP{AH(D9HcNHHG0HHH9u HHH9uHHHcVDHH)HW@HH@[FD]fD1CHHVPH,HcNHHHHWZXif1HHtHcULSH_@I)ILIHK Ei۷m۶HfAHcAHHHGDHE~lHi`UA9BEQIL@F;\LI9uE11 fHQ`9u HQPHHA9LMtHC IHcSL+O@IEiɷm۶yIDHcP 9u @D9u@@9pu@@ xqHG8HHD@A9tJE9uHcPHAPALHA`"HLAPM HcP[C[]1f.HcHG0IILGLHGEPIcPEL A;1t+ARHfHA9tt H9u1AWAVIAUAATUSHHIHZLcEMNIIBMHD$0IGAHD$8fD9HHCyHCPHs`J 0A@J</D`E9E~,;.DHP;lHЉA9HcHH)IU@HD fHHmH9By4Hz`;/HHHp;luHHBPfHBPf.11@D9HSPH HHEPDMAEPA9HH[]A\A]A^A_fDHDHt$0DL$,D)LD$ LcLT$JHL$L\$DSEHcSHHIUR~5LC`A;(zHHJA;lHH9uH\$MMHHZ(HkAMLHcKDH<HH)H4F0uE EvH[XHIu@DHSPHHzLcJ~HHH9fH>HHH9ff.HcUSHIH)HF@HHLP Mtw@AJDIIL ABiIcBHHHF@~5MZ`E;zDHIfHHE;DAHL9uHF@HHc@LN8A1f.LN8KD;D;@Hc@ LIMAIxLHH ,AI xLHH ,AIxLHH ,HHxxAIxLHH AIxLHH AI>LHH LN8KD;/Hc@9[]IBPLMhHIJPLfHc@1HcHHH)HcD4HH3x˓HH5]Y1餘@HLIweIPHwBLHHt1Ht&tt D‰ƒAE@AUATILUHHSHH9IMtqI$ H1Ht\HHAUu,Amu%LtLEDcLEƒAEH[]A\A]H!\#LHx@轘HtH8HE{@UHAWAVAUATISHHxdH%(HE1HcF,EIHHEH=HEHHHH%H)HHH9tHH$H9u=LuHD$HLHHhLuHEHHHH%H)HHH9tHH$H9uHD$HHEHEHEHEHHHH%H)HHH9tHH$H9u\HD$HHEEDmELmHEE1E1LpLhHxDS,II8D9~NHS@BD20uGDEyHpDHLMLMIHxI8S,^_D911fDH{@HGx CHGS,H89܅E1E1@II8D9s,HS@N*AHxHEDF94u AH0HS@N*EHEH{8AfAE;L$8s A|2<H;;HDH EIcHHLMcZ Ex.N<M)NExE9{tAK0H{8HS@LN*McZEx.N<M)NExE9{tAK0H{8HS@LN*McREx*NExM)NE9ztAJ0HS@H{8N*MT$@HA|2LPJ4LcN Ex.NExM)N E9ytAI0H{8HS@J4N*LcNEx.NExM)N E9ytAI0H{8HS@J4N*HcvL ExI)J4D9~{N0H{8HS@HN*;kfDHEkIx HHcwDHH)Bt*H9ptH0GHcGHHHC@LG`A9pHfHH9\HPA;LuHHWPH<HfDJ 1LN8ML^PMIL+W@IOOc EO IICD (fDDJA#1ALV8MH^PHIL+_@IOOcTEpORIBD(\f.'LV8MHFPHIL+_@IOOcEORIL@(xA1AuL^8MhLVPM[HH+G@HHk$IcD?Hk0L@(.x$4L^8MLVPMHH+G@HHk$IcHk0L@(xA4AL^8MLVPMHH+G@HHk$IcDxHk0L@(gx]9;L^8M;LVPM;HH+G@HHk$Ic;Hk0L@(;LPAA;A;H^8H ;L^PM:HH+G@HHk$HcD:Hk0L@(:H@y:6HN8Ht6H^PHg6IL+_@IMk$Jc IxHk0HA(tLYA5A7HN8Hs7HvPHf7H+W@HHk$HcTHxHk0HB(tHJLHH LH= HH> H5eLHcH>1H[]A\A]A^A_J1tLN8MtL^PMtIL+W@IOOc ExO IICD (tf.DJA1AwLV8MjH^PH]IL+_@IOOcTE@ORIBD(,f.!*"0L^8M0HFPH0IL+W@IOOcE/ORIL@(/LXAd)A)H^8H)HFPH)IL+W@IONcTEk)ORIL@(V)LPO$!Ht?H^8Ht6HFPHt-HH+O@HH Hc xH IHH@(tHhAV"HAtFLN8Mt=HFPHt4HH+O@HH IcLxH IHH@(t HXL +M MHB<0!<tELv8MtHN8Ht5HFPHt,IL+W@IOJc xH IHH@(2.HA@I@J1LN8ML^PMIL+W@IOOc EtO IICD (`fDDJA1A?LV8M2H^PH%IL+_@IOOcTEORIBD(f ,L^8M,HFPH,IL+W@IOOcE,ORIL@(z,LXA<(Aq,H^8Hd,HFPHW,IL+W@IONcTE:,ORIL@(%,LP!(HtCHn8Ht:HFPHt1HH+O@HH HcLxH IHH@(tHX@A&HAtFLN8Mt=HFPHt4HH+O@HH IcLxH IHH@(t HhMHI)L)MIHB<'<tMLv8MtDLfPMt;IL+o@IOlOc,Ex"OlmIMAD$(K+f.HA@IB<j&<LN8MHFPHIL+_@IOOc EO IIL@(xB<-)<LN8MHvPHwHH+G@HHk$IcD[Hk0H@(Jx@HLH?t H&@J1LN8ML^PMIL+W@IOOc EO IICD (fDDJA1AwLV8MjH^PH]IL+_@IOOcTE@ORIBD(,f.&)L^8M)HFPH(IL+W@IOOcE(ORIL@((LXAAH^8HHFPHIL+W@IONcTEORIL@(H@IMHtLLn8MtCLVPMt:HH+o@HHlIclx!HlmHIAB(tIZf.AIAtFLv8Mt=HnPHt4IL+o@IOlOclExOlmILE(tLU@tBLv8Mt9HnPHt0IL+o@IOlOc,ExOlmILE(d'HAIHI@fEpfDJ1LN8ML^PMIL+W@IOOc EO IICD (fDDJAI1ALV8MH^PHuIL+_@IOOcTEXORIBD(Df&v$L^8Mi$HFPH\$IL+W@IOOcE@$ORIL@(+$LXAA#H^8H#HFPH#IL+W@IONcTE#ORIL@(#LPMAĀHtDLn8Mt;HFPHt2HH+_@HHIc\xH[HH@(t HhDA~ALn8MHFPHHH+_@HHIc\H[HHH@(fHXHx E+HI9LHB1{fJ1ZLN8MML^PM@IL+W@IOOc E$O IICD (fDDJAy1ALV8MH^PHIL+_@IOOcTEORIBD(f. HF8H! L^PM IL+W@IOJc H@HIAC( A{ A; A HF8H LVPM IL+_@IOJcD Hk0L@(} xs :#a L^8MT LVPMG HH+G@HHk$Ic, Hk0L@( x A7$A L^8M LVPM HH+G@HHk$IcD Hk0L@( x @-(-L^8M-LVPM-HH+G@HHk$Ic,Hk0L@(,LXA,An,H^8Ha,LVPMT,HH+G@HHk$HcD8,Hk0L@(',LP++HF8H+H^PH+HH+O@HHk$HcHxHk0H@(tHHA+A*LN8M*HvPH*HH+G@HHHk$IcDxHk0H@(tHPH?I9}$M/$1Hn$J 1JLN8M=L^PM0IL+W@IOOc EO IICD (fDDJA 1ALV8MH^PHIL+_@IOOcTEORIBD(f LV8M HFPH IL+_@IOOcEORIL@(xAvAL^8MLVPMHH+G@HHk$IcDHk0L@(nxdRL^8MELVPM8HH+G@HHk$IcHk0L@( xA AL^8MLVPMHH+G@HHk$IcDHk0L@(x&%L^8M%LVPM%HH+G@HHk$Ic%Hk0L@(%LPAM%A5%H^8H(%L^PM%HH+G@HHk$HcD$Hk0L@($HXL"4"HF8H'"HnPH"IHH+O@HHk$HcxHk0H@(tLXA!A!LN8Mu!HNPHh!HH+G@HHk$IcTHxHk0HB(tHB1HLL$HHHIL$LL$HLHHL҉HDIHDIHH9HNL9IOL9IOH9HLIL9LMM9MLMPJ1LN8ML^PMIL+W@IOOc EO IICD (fDDJA) 1A_LV8MRH^PHEIL+_@IOOcTE(ORIBD(f[LV8MHFPHIL+_@IOOcEhORIL@(SxIAA5L^8M(LVPMHH+G@HHk$IcDHk0L@(xL^8MLVPMHH+G@HHk$IcHk0L@(xAAnL^8MaLVPMTHH+G@HHk$IcD8Hk0L@('x]&E&L^8M8&LVPM+&HH+G@HHk$Ic&Hk0L@(%LPA%A%H^8H%L^PMr%HH+G@HHk$HcDV%Hk0L@(E%H@$$HN8H$H^PH$IL+_@IMk$Jc IxHk0HA(tLYA$A#HN8H#HvPH#H+W@HHk$HcLHxHk0HA(tHQ1HA?LHHHHHH?IOHH?LNLDIHDIHH9HNL9IOL9IOH9HLIL9LMM9MLMPfDJ1jLN8M]L^PMPIL+W@IOOc E4O IICD ( fDDJA1ALV8MH^PHIL+_@IOOcTEORIBD(f tBLV8Mt9HFPHt0IL+_@IOOcExORIL@(HIHI@CD~(LBEuHL@<1Df(LBEuHL@<'1Dv(LBEuHL@<'1Df(LBEuHL@<1Dn(LBEuHL@<1RDV(LBEuHL@</1"Df(LBEuHL@<1DV(LBEuHL@<1Dv(LBEuHL@<?1Dv(HZ EuHHC<<tH<HF1E@Ln8MLfPMHH+G@HHk$IcDHk0L@(xAALn8MzLfPMmHH+G@HHk$IcDQHk0L@(@x6$Lf8MHNPH HH+G@HHk$IcHk0H@(xAALN8MHNPHHH+G@HHk$IcDHk0H@(yxoffLI*HI*If(^HH,H9 A<E1<AI?D~(HZEuHHC< <}H<HF`^(HDRuIL@<^(HDR uIIAB<i < AI<LFDf(LB EuHIAB<J<DPE11AdHMI?Nn(HDRuILDSAA{HAAAIFZD~(Lj EuHIAj@ A@A@HLGaDn(LBEuHIAB< A<E1<AI?^(HBuHHA<) <vH<HFYD~(HDjEuILIJ$ Lv8MLnPMHH+O@HHk$IcLHk0LA(yLI?HH?AM}bfDN(HB EuHHA<0 <H<HF^(HDRuIL@<?Df(LBEuHIAB< A<_E1<AI?JDv(HDjEuILm@mA AYLv8MLLnPM?HH+o@HHk$Icl.#Hk0LE(}3 Ln8MHnPHHH+O@HHk$IcL Hk0HA(yA ALN8MHvPHwH+W@HHHk$IcT [Hk0HB(Jz@fffI*H*I*f(Yf. fMfI*I*Yf.fHfH*H*Yf.LYfI*f.L9LHNL9IOL9IOL9ILIL9LMظM9MLMXf.Dv(HDREuIL@<A<AL^8MLVPMHH+G@HHk$IcDHk0L@(x L^8MLVPMuHH+G@HHk$IcZHk0L@(Ix?A A+L^8MLVPMHH+G@HHk$IcDHk0L@(x L^8MLVPMHH+G@HHk$IcHk0L@(L`AJAL^8MLVPMHH+G@HHk$IcD Hk0L@( Lh HF8HLVPMHHH+O@HHk$HcxHk0L@(tHXA[A LN8M HNPH HHH+G@HHk$IcDxHk0H@(tHhLLH HH= HH> H"HcH>Dv(HDREuIL@<-n(LB uHIAB<McA<ME1<IO$Df(LBEuHIAB<>A<E1<AI?^(HDRuIL@<DV(HJEuHH@<vB<<bLV8MUHNPHHHH+G@HHk$IcD,Hk0H@(xHHMDN(HB EuHHA<8<%H<HFD^(HDJEuIL@<in(LB uHIAB<A<E1<AI?^(HBuHHA<{<H<HFD~(LDjEuIMEd$AADbAAkLv8M^LnPMQIL+g@IMk$Ocd&E4Mk0MAD$(!A|$I?H@DMD^(HDR EuIL@<dH+MMA9MHE1ADn(HDbEuIL@< Dv(LDj EuIMEd$AA,D^(HDR EuIL@<~Dv(HDj EuILI IADIDn(HDR EuIL@<D~(HR EuHH@<`lv(HR uHH@<@Dn(HDR EuIL@<D~(HDj EuILm@}D^(HDR EuIL@<R1MIIM&HM?H)HH)RMHM{MO$MMܸI{II-I}!xdYA|$*xIyUb~(HDRuIL@<~(HDRuIL@<[~(HDRuIL@<r~(HjuHHI~(HDRuIL@<WT~(HDb uIL@<H~(HDRuIL@<?~(HDR uIL@<x~(HDR uIL@<~(HR uHHQ]~(HDR uIL@<4L~(HDR uIL@< ~(HDR uIL@<~(HJuHH@<~(HR uHH@<THǺLA@L H?HHt|LH HH!H!H1L$I0LL$I@HǺLA@L H?HHt6LH HH!H!I9IMIIHdHArHAuLHH~uH9AHLMx/L9ѸLMHH9HOMIP1H)L9ILIH\HH9HOIPHIHMuA낃~(HR uHHJt<t-HHF)IH H~(HR uHHPttpHHFyI ~(HJuHHHt@t0ILFHALIڸM9HNȸIHj~(HDRuILDPAtOAt>AIALFAHPHAL ~(HJuHHHt<t-HHFIqHi~(HDR uILDPAt@At/AIALFITAL(~(HDRuILDPAt8At'AAILFu1AcL[~(HR uHHPt<t-HHFHIH(H?~(HDZ uILDXAAtxAHAHFIM~(HDRuILDPAtCAt2AAILFYHQAL~(HDZuILDYAt?At.AAILFH?'AzLr~(HDZ uILDXAt?At/AAIIGI]HIIHIMXI@M H?IHH H!H9s`Ht(ItHLHH H!I9rH-HLH!LLL$IH-L$I@LHU~(HR uHHPttpHHFH~(HJuHHHt?t0HHF_HCH;I~(HDR uILDPAAtxAAILFI~(HDRuILDPAtDAt3AIALFALALH?~(HR uHHJtvHHFI~(HDZuILDYAtCAt2AAILFBHA%LH?~(HDZ uILDXAAtxAAIIGdI~(HDRuILDPAtCAt2AAILFHALH¾I@L H?HHtIHLHH H!I9s H LH!IL!LLL$I1sL$I@CHuLM I@!M(I@ M9HHMO@H?H!M H_H)HH HH ͸IhHLHLL$\L$HHڹ@H!IH?H.H)HHH HH I@fHLLHL$IIL$H@H!IH?HH)H I9v$HtHtHHpH)H I9wIIM MpHLHLL$I}L$H@H!IH?HtBH)HpHH I9v+HH)H I ָMp郿HIHuϸYHfDATIA@IUHIHSHH H IM M!M9IAItMHIL L!H9rHH!HA@IHH H@IM M!L9sBIAtItMIIM M!L9rLH![]H A\fLHL[]H!A\H fAVIHAUILHATHUHSJLLHHHHH0H޹@HH!HtH)HJH H []A\A]A^HufDHcATHUH)SHN@HHHHEH1HIIyfAiDaEx ALHcAHL^IHA\THA`11HHHc@AAHA`MHcH@HHFPL9PLNPMHA`MQHcH@HHFPL9PLMPMQHA`HcH@HHFP@AADQHL^IcƒHA9|7HA`HHcH@HHFP@(UEtAI)IYfEaDQHL^@HHcE1HHHG@fEQDXAw4H- ENcDI>AHN8HH9Pn1[]A\fHA`L^PY8HcH@HLDP(AtrEe1EtI9fAAIQf9WH~HtE1IIAfEYuII9A[]A\fDEoHA H@IAHcy0;"IIQE"H<HH~PG(tV@t Ay@AyLcA0HyO@ILFPM@H#II)M9 LH9HLIHcy4!LcL^PO@IMA@(tWLQM@M#HL)I9ML9IOIQL^PHcy4H HAL tAyAIH921E'HcA0!H@HIAC(m!HyMCH@!H)I9P!ACAAHcA0HQH@HHFPHPIHcA4K!H@HHFP@(S!HQH@H!HH)H9!AAHIA^o@AH@IAII9A;HA€AEu LF8H A9T PJ"MHNPHHH+W@HHk$IcHk0HB(HRIP'P'HN8HC'LFPM6'HH+W@HHk$Hc HxHk0LA(tHQIQP%&HN8H&LFPM&HH+W@HHk$Hc xHk0LA(tQAQP!HV8H!HNPH H+G@HHk$HcxHk0HB(/AAwLV8HI9P`HIIACHIHIA$L^8H I 9Q HN#HcHװHt P;QxHk8HB0N'HW(H@;G HkHDHHcH IIALF8H I 9QlH#HcHH HQHIpHDH+G@HHH/H@8"HHoAHIAHN8LB9TP#HHVPHH+G@HHk$HcHk0HB(HBHRHHH? H I IAFLF8H I 9Q t9Qt 9Q%PMHNPHHH+W@HHk$IcTHk0HB(HRIH.Ht;LV8Mt2LFPMt)HH+O@HHk$IcL xHk0LA(tHQIQP,AtLF8H AL 9QIP M3*HNPHHH+W@HHk$IcHk0HB(RAQP*LF8MHNPHHH+W@HHk$IcHk0HB(HRIPHN8HLFPMHH+W@HHk$Hc HxHk0LA(tHQIQPC^(H@uHHB<gHN8LB9TP HHVPHH+G@HHk$HcHk0HB(z7z-HBHRHHIAIQLF8H I 9Q3A[M]HA\Дq4H9QHNQIQI!A tAyAAHAI9IMIQIHcy4xEH9HH)I9HAAIA AAHAIHAI;IAQ!AQOHAAIA2x<&LV8H A9T P=HH RMLFPMHH+W@HHk$IcHk0LB(,tHH)H9HIQHcA4H@HHFP@AA1I;f\P FH=LFPM0HH+W@HHk$HcHk0LB(+II)M9"_HL)I9IZ)n(HHuHHZKJI6HHFDF(H HEuHHZK&JHHF*^(HD@uILYDCADAA[AFAAILF8DV(HD@EuILYDCAaDAAAAAILFDf(HHEuHHZKJHHFPHq MLVPMC HH+O@HHk$Ic ( Hk0LA( Q|fn(HHuHHZK8JfSHHF~(H@uHHG<@~(HD@uILZK*~(HD@uILR,1~(HD@uILR1q~(HD@uILR1~(HD@uILR_K1R~(HD@uILR1~(H@uHHXSP~H1ɀHBHHF~(HHuHHR7~(H@uHHXSWPwH1ɀHBHHF?~(H@uHHXSPB1H<HB<HHF]H~(HHuHHZKR ~(HHuHHJoHHFi~(H@uHHG<X~(LXuHIERAA~(HDPuILDQAAAAIIG~(LXuHIERAA@X~(HDPuILDQAAAAIIGoRAHB IAo~(H@(WVAA~(HD@uILDBAfARAAIIG~(D@ HuILRM~(HD@uILDBAtA`AAIIGa~(D@ HuILRI~(H HuHHHrHHFI6~(LXuHIAZAHLGF~(X LuHIAX  AHLG~(LXuHIAZAHLGO~(H HuHHH  HHFIR~(HD@uILDBA At AIALF2~(D@ HuILR~(X LuHIAX5 ! AHLG~(H HuHHH  HHFI~(HD@uILDBA]AIAAIIGl~(D@ HuILR~(HD@uILDBA5 A! AAIIGN~(D@ HuILR~(HD@uILDBA)AAAIIG~(HHuHHJZGHHFr~(LXuHIAZAHLG~(LXuHIAZAHLGJ~(HXuHHZF3HHG~(X LuHIAXN:AHLG~(H HuHHH6#HHFIX~(X LuHIAXAHLG~(D@ HuILDBAAAAILF~(H@ uHHB<~(HH uHHRAiPZHA;SQM~(HD@NAZA;SHJAb~(LDPuIME@AAA4~(HD@(uILR~(HD@(uILDBAAkHAAAIF>H/AAIIA+~(HH uHHJHHFpAAAAH~(HHuHHJYFHHFLH~(H@uHHG<A~(LDPuIME@AAAUH~(H@uHHG<}H~(HD@uILDBA?A+AAIIGTMIIAZ A;S:Hh~(H HuHHHtstdHHGHiHHbH_HzIIHA!L?H7H?H?VA5M-9H1HxzHHoHHH?~(D@(HuILZDCADBAtfAt3HAAAIFH~(D@(HuILDBAuHALHAM?H7CH;AMAyMqA M 9HHIA&AR$HHH?^I~(HHuHHZKkJHHFRHHH HAJLB {qHSH KHAH9AM~(H@uHHPttteHHFI{HA]MUAMHH H?I%HH?IJHyH qALHf|$HcHLEH@@LEHRHVPHL(HVPLHVPLDHVPLLHVP@|DG(u$G(oGHFHG~utdHFH~ut7HFHVH9GuHFH9Gu1Nf9OuHOH9N~@HH;G}DG(u$G(oGHFHGFVuLu HOH;}HHWH;VHVtzHH"tDHHHHNH9GaHFH9GS1Nf9OCÀuHWH;VfDHHff.UHHAWAVAUATSHHD`,H}HuI?H0IDlLHdH4%(Hu1D|HHH=HHHHPHЁH)փHH9tHH$H9u%AHD$HIJ1LIH@Hp/HclL}DžhHH8H8xGHELEH0Hp@HcHH)D0tʻHI Ћ yH@Hp1E1EHEHED;|H}DDAHL MtDxHcH @HIH H)L4fDLHEtJAAH}IALMHuILE11HJ!/H}L],L]uT1҃I0I8IuDxD;|;\|NHEA1ۺ!fHEHuLL]HxPhL]tHpN <(HEL@@K0pHEHELXLPLpLx8HEL`L]DlLP@5HM;q8s A|<909Xp 'HcHHHL}wHH9uxHGPH8HIu@WHHWPH<fHx$I9J Fs1HHAIIB L}LPAV(IUPDIUPLLIUPLDIUPDLHI A xnHcIuPH[HHV(tHIu@H)HH@HtPyHpLMMII{L}E]9]}wuHIL MtHcHH)HHEfLHxt-غHpHLHI!ƉuF1҃HE8Iu]9]o`XLE1ۺ[DIU@HEHЋxMM8LhLp9fDA;z8s |1<L99Xx HcHHMAH x3LcNM)F9|uAIM MM8IU@MAHx3LcNM)F9|uAIM MM8IU@MAHx/LcNM)F9|uAIM MM8IU@IJ@H|1HxI49N x2LcNM)F9|uʾHI 4MM8IU@I49Nx2LcNM)F9|uʾHI 4MM8IU@I49NHcH4H)D9|tʿHI 1HD$x(HD$LAEIHLHEHQP %AASMLH+D$@HMHI E(f.IAA4$H$Ht$HkLDD$PT$@LL$ uLL$ T$@DD$PMNHt$ ZJyHAۋqHAÀHHH9tMDMAHPt#΁ Hxt΁@J D H H9uDMAۉAAHD$Ax(HD$LAE IHLHDJA<B AA AD$`J(HD؃D9HD$x(HD$LkIy1H1D\$`AETLH<ErHBAAƀHHH9CDEMEIPt"΁ Hxt΁@J H I9uED$`MEADAD$`DEAY#CAAAoD$`AoLb1HD$Hp@GKdHHT$(Hz tHB 1oJ(ulKH|$AElDE}=EE6IcH|$ HH)HH|$H9:}SR0EƉljƁ@@D t!j!E HIHIA$9H|$H@jH$Ht$A$DDz޸@@EþE EKALAHcH|$ HH)HH|$H98}EA@0A@A@D t!qk!E HRHIA$9H|$H@wA4$H$Ht$CKM4AEFAEAH|$ Ht$ЋvH% ЉƒEIcH H)H<97}SEƉ@@DO0 t!fC!E H4RHL9t2H|$H@@H$DHt$DL$@BDL$@غ%E‰EE‰ځBƒEtA}$Bƒ0E‰ƒ E‰ƒp@E AN HcH|$ H\$H4H)DCHH4>K A9~M Av0A@A@D@ t"@ZK!E HRHIA$9Ht$H~@օH$Ht$A$ASD|$` k|$PDj%ƒEKM,EE EIcHt$ HH)H Ht$؋vH91},I0 t#}k!E H4RHL9t(H|$H@bH$DHt$@AMpHcHt$ HH)HHt$vH90})@0 t!d!E HRHIA$9 Ht$H~@|$X?H|$ Ht$EIcЋvHH H)H<97}SEƉ@@DO0 t!,d!E H4RHL9WAH|$H@;H$DHt$>Ic@Hk0EF L@HH H@Ex\IcHk0LH;J @HJ IcHk0AT(IcF Hk0уLP( ʈP(HD$AN H$Ht$Hx@=AMAV t^t1ށ`ށ uف ÀE_ EAHcH|$ H H)H H|$H99}VI0EAA@A@D t!e!E H vHIA $9H|$H@eA$Ht$H$}Xv0EAA@A@D@ t"@`!E HRHIA$9Ht$H~@օH$Ht$A$5wH|$KAL HQHcH\$ HHH)H98}V@0EAA@A@D t!kY!E HRHIA$9H|$H@{A4$H$Ht$4KALHcH|$ HH)HH|$H98}*@0 t"R!EHRHIA$9 H|$H@A4$H$Ht$94HD$H@(Hq1Ht$AU;V _1HDŽ$HRHHK1H|$hHsLT$PH$LL$@6A}@LL$@LT$PeQ{QH""Ht$Mk$HcO4HְEFH`QAU;Sx$JLHH)IӋR!*QEIcHt$ H H)H Ht$vH91}SI0EƉljƁ@@D t!9!E H4RHL9t(H|$H@TH$DHt$2IcFH^AU;Sx^JHH)HH HQ(Ht^ Hk0LH;P 8^HP AEHt$Hk8HP0IcFHk0IAD$( H$AD$(HD$ANHx@1KAL HcH|$ HH)HH|$H98})@0 t!C!E HRHIA$9&H|$H@A4$H$Ht$?1|$XPKHEDEIcHt$ HH)HHt$vH92}/R0 t&4P!E H4IHL9t2H|$H@RH$DHt$LL$@0LL$@A}=4H|$HW8HOHt$IE H+F@HHHcHWPHNNH@HNAL0E…HcH|$Hk8HT$ H9:}Mt ǁ@@u z0@ t"@M!E Hk0IA$9KHt$H~@օzH$Ht$A$d/|$Xe2OJE\HD$@EQغ@A؃@EAÿKNA}=CMH|$HW8Ht5Ht$IM H+N@HHk$Hc HOPH55Hk04 A}uƒAE‰ƒ8EEP EIcHt$ HH)HHt$vH92}*R0 t!1P!E HIHL 9t2Ht$H~@օ;Ht$DH$LL$P-LL$PA}=HD$@AL0Ht$HV8H-H|$IE H+G@HHk$HcHVPH--Hk0m-t HcH|$Hk8HT$ H9:}Mt ǁ@@u z0@ t"@W!E Hk0IA$9Ht$H~@օH$Ht$A$,KM,EE E^HD$@BU IcHt$ H H)H Ht$vH91}SI0EƉljƁ@@D t!N!E H RHL19NH|$H@(H$Ht$D+IcE|NHk0EE LiNHH H\NEx]IcHk0LH;J )NHJ IcEHk0AT(IcE Hk0уLP( ʈP(HD$AM H$Ht$Hx@M+AMHcH|$ HH)HH|$H98}-@0 t%H!EЁHvHIA$9Ht$H~@օA$Ht$H$*iAED$t=22|$t1؉\$P%D$ptD$pKMEZ Ag1y'A2-'A!-' T$PH|$EDL$L$D\$x!DD$pD\$xL$L$A D ADED ADE|$t;|$tx;DAADE\@IcHt$ H|$HH)HƋwH90}Mtց@@u@0 t!?!E HIHL9?H|$H@.Ht$DH$DD$`LT$X(\$@DD$`LT$XAJsAE=:=:DHcH|$ Ht$ ADEHH)HNj~H98}ZD@0ADEDDƁ@@DDƨ t"o:!EA HRHIA$D9Ht$DH~@H$Ht$E$'KM4AN vA@< w HsA]tt HcHt$ EHH)HHt$vH90}S@0Eމ߉ށ@@Dި t!D!E HRHL09TH|$H@fH$Ht$&A THcAN Hk0LSHr HSx\HcHk0LH;p  DHp IcHk0AT(IcF Hk0уLP( ʈP(HD$AN H$Ht$Hx@:&ANAE}Zv0AEAщA@A@D@ t"@h"!E H4IHLDA9"H|$H@DCH$DHt$HD$ !HD$ HcP!"Hk0D@L"Hr H"ETIcHk0LH;q !Hq HcPHt$Hk0AL(HcPHk0IAT$( AT$(HHD$H$Hx@6!KM4ANH"H|$HcHǰH!HPpH !LH+D$@HHH Ht$H9EFƁEEIcH|$Hk8HD$ H98}Mt@@u@0 t!M!E Hk0L9t(H|$H@2B0H$DHt$ HC8H5p"HcHаHIcFHk0HLH9x EMHx IcFHt$Hk0IAD$( H$AD$(HD$ANHx@|7KIKHcHt$H@HHvLH9r 4"Hr HcCH$Ht$H@HAL(HD$KHx@ KHcHHt$ H|$H)H4֋H9>}0v0@ t&@K!EցH@HIA$9RHt$H~@օA$Ht$H$k&KALHcH|$ /HH)HH|$H98}-@0 t%!!EЁʀ/HvHIA$9Ht$H~@օ^A$Ht$H$}KALlHcH|$ HH)HH|$H98}*@0 t"J!EЃHvHIA$9Ht$H~@օA$Ht$H$KALHcH|$ DHH)HH|$H98}2@0D t%I0!EЁDHvHIA$9UHt$H~@օ A$Ht$H$n)KALHcH|$ @HH)HH|$H98}-@0 t%/!EЁ@HvHIA$9Ht$H~@օaA$Ht$H$KAL oÀt؁ DHcH|$ E EHH)HH|$H98}V@0EAA@A@D t!-H!E HRHIA$9H|$H@ZA4$H$Ht$yKAL hHcH|$ HH)HH|$H98}-@0 t%[H!EЁHvHIA$9Ht$H~@օA$Ht$H$KIDCEEmDE* IcHt$ H H)H Ht$vH91}SI0EƉljƁ@@D t!+!E H RHL19,H|$H@JH$Ht$D0HcC<*Hk0DCL)*HH H*EIcHk0LH;J )HJ HcCHt$Hk0AT(HcCHk0IAD$( H$AD$(HD$KHx@T@A}KAL ,HcH|$ HH)HH|$H98})@0 t!+!E HRHIA$9H|$H@~A4$H$Ht$KIDCEIcHt$ HH)HHt$vH92}/R0 t&P>!E H4IHL9t(H|$H@RH$DHt$8H|$hHt$HD$AUDV(HEuHHt$hHH H0HHHcCH$H@HLH;P mAHP HcCH$Ht$Hk0Ad(HD$KHx@MKM,AM 9HcHt$ EHH)HHt$vH90}S@0Eމ߉ށ@@Dި t! >!E HRHL09]>H|$H@VH$Ht$AE=HcAM Hk0L=Hr H=AHcHk0LH;p {=Hp IcEHt$Hk0AT(IcE Hk0IAD$( H$AD$(HD$AM Hx@"Dغ%EKM,tEuE& ځI&ƒEtƒA"D‰ƒ0E‰ƒ E‰ƒp@E EE EIcH|$ HH)HHD$ xH 9~H ljR0@@D t!Q!E H4vHL9t(H|$H@H$DHt$AM|HcHt$ HH)HHt$8vH#9}H߉@0@@Dި t!#!E HRHIA$9Ht$H~@H$Ht$A$KM,AM t|$X E؉HcHt$ EHH)HHt$vH90}S@0Eމ߉ށ@@Dި t!4&!E HRHL09&H|$H@H$Ht$AE%HcAM Hk0L%Hr H%HcHk0LH;p %Hp IcEHt$Hk0AT(IcE Hk0IAD$( H$AD$(HD$AM Hx@v1KIDCEIcHt$ HH)HHt$vH92}/R0 t&$!E H4IHL9t1H|$H@ H$DHt$AED$P|$Pt&|$P%HcSHcC%HRHLm%HJ H`%0Hk0LH;H -%HH HcCHt$Hk0AT(HcCHk0IAD$( H$AD$(HD$KHx@нKIDCEw$IcH|$ HH)HH|$H9:}/R0 t&g$!E HvHL 9Ht$H~@օ Ht$DH$gHcDCxHk0L EIcHvHLHx H@ HcCH$Ht$H@HAd(HD$KHx@鮼؉%|$@A~At7 A DAƀDEu AtAKM DEAADEEIcHt$ H H)H HID;D;BHcR y|$P<2`12t IcHt$Hk8HL$ vH91}Kt Ɓ@@u I0 t!3!E Hk0L19S2H|$H@ LT$@H$DHt$LT$@Ic2Hk0EZ L}2HH Hp2ED2IcHk0LH;J 2HJ IcHk0AT(IcB Hk0уLP( ʈP(HD$AJ LT$@H$Ht$Hx@AEEELT$@D$P1A@|$PLT$@¨1AQ@!Ab+PLT$@AP w8 H8|$PAE‰AJE…0HcH|$ H4H)H4H|$H9>}Xv0EAA@A@D@ t"@;!E HRHIA$9Ht$H~@օͷH$Ht$A$r  @E1̀NƁDKM4HDŽ$D$XANHcHt$ HH)HHt$vH92}Ntށ@@uR0 t!2.!E H@HL29 HD$Hx@ЅHt$H$H$HIcF&H@HLH9P gHP IcFH$Ht$Hk0AL(HD$ANHx@$߰%AD$`=Ht$ DHcRbHcRYA!AHDŽ$Hf"Ht$HcHưKM4EFH#Aa02A[KM4EF EIcHt$ HH)HHt$vH92}.R0 t%@t!E H4IHL9t(H|$H@H$DHt$ANWA}HcEH|$ HH)HH|$H98})@0 t! !E HvHIA$9Ht$H~@օA$Ht$H$鶮A.A.Au A.wIcHRHLB(t@AM#tj"t@t|$Xt:zuHH9zuσ0AE@tA} zuƹH?H9Ju뵩 ~EF E<>@頼@y(3z(e D@ESIcHIHLHz tRHB HcPHt$Hk0Ad(HHD$H$Hx@N HcPxHk0LB(뢸E]8EA E4AE%= IcH|$ HH)HH|$H9:}Gt @@u R0 tt^!E H4vHL9H|$H@AH$DHt$LL$@"LL$@@ 뫉ځ uЀ  fDAI@Gr(3p(VEF EIcHRHLHx tCH@ IcF Hk0Ad(FIcxHk0Lپ봉 @(/뱸 B(@A}=DD$`Mt.IE H+D$@HHk$IcMHk0ADDLT$PLL$@(LT$PLL$@KMEX EEUIcH|$ HH)HH|$H98}Mt@@u@0 t!!E HIHL9H|$H@0H$DHt$LT$XLD$PLL$@LD$PLL$@LT$XIc3Hk0EX LEIcHk0LHx H$Ht$LT$PH@ Ic@ LL$@Hk0Ad(HD$AH Hx@LT$PLL$@IcHk0LHH HmEIcHk0LH;J tyHJ IcIcP Ht$LT$PHk0LL$@Hk0AD(LB( ȈB(HD$AH H$Hx@lLL$@LT$P@(EX r(3p(qHt$ D *IcHk0L@ Ht$HD$AU(~(HuHHHQp t5@tH@ҋqHA€HHH9AHt!ׁ Hxtׁ@ D H H9ulob?@޸LL$xL$D1ҾD$p4A}=LL$xD$PL$MIE H+D$@HHk$IcMthxdHk0E4A}=MIE H+D$@HHk$IcMHk0D$pD$PE4AH|$HD$AU((HuHHHQ7P AAA9D$pAD$PH|$HD$AU((HuHHHQ~P AAAD$pD$PAHEQHAAAƀHHH9lA@ A H H9GHtHxuA Ao$@鬴A9RH4AD$pD$PHEQHAAAƀHHH9Ht%D Hxt D@ AAA H H9uD$pAoD$PSD $AZ@ 9;1f. H‰ot%A]D t  A]D‰ځ E€|$`t8 A<EA@t |$`t# `@AE @۾@@IcF HcHt$ H H)H Ht$vH91}Ptށ@@uq0@ t"@O!E HRHL 9Ht$H~@օHt$H$H$IcF Ht^H@HLH9P HP IcF H$Ht$Hk0AL(HD$AN Hx@WH$H@Hk0LHx tEH@ IcF H$Ht$Hk0Ad(HD$AN Hx@A@(d@(Ht$Hv@ H$Hn@ @(ANHcHk0LHx tIH@ IcFH$Ht$Hk0Ad(HD$ANHx@HH$H@(+fHD$H|$hH$H@(HpHD$@| E؉ځAEt1IcF cX@HD$DHp@ANACA7/A~xHt$AMHHt$~(uHHJq@Wz @EN EIcHvHLHx t-H@ IcF Hk0Ad(Ht$ D @(uIcxHk0Lr(3p("e  @wf[H@HzRƀHHH9/AOt%AA Ht @A DD H H9uo@(ĝ@@ 9UJ@HcHk0LmHP HTHk0LH9Q DHQ HcHt$Hk0AT(HcCHk0IAD$( H$AD$(HD$KHx@CHP HEIc%AE r(3p(DCEIcHRHLHx H@ HcCH$Ht$Hk0Ad(HD$KHx@MIcUHRHLB(tEA#t*zu9HH9zt) azuH?H9Ju׃0|$XAJ\$@ΛD$@gA^|$X" AJA}uADADEDD$P8DE@@ *@ HD$DHp@j鉠@(+IcHk0LHH HEIcHk0LH;J HJ IcHt$Hk0AT(IcFHk0IAD$( H$AD$(HD$ANHx@鏚@DIcuH@HLVYr(3p(He@W@@\HcCHk0L9f@(p@@H(3J(ʀ̙FAM HcHRHLHx tVH@ IcE H$Ht$Hk0Ad(HD$AM Hx@pAExHcHk0L@(FHc9H@HL"Hx  @q(3p(p(3r(ИH@HLHx #H@ HcCH$Ht$Hk0Ad(HD$KHx@酘Ht$HD$AU DN(HEuHHЀxHcCJHk0LHx H@ HcCH$Ht$Hk0Ad(HD$KHx@HAUHcCޗHk0LHx H@ HcCH$Ht$Hk0Ad(HD$KHx@闗@(@(~ALhHD$hHH L踅HHHcSH$8Hk0LH9B HB HcCH$Ht$Hk0Ad(HD$KHx@;@@AJז@(͖Ht$HVHHRHHk0LH;P HP HcCH$Ht$Hk0Ad(HD$KHx@_Ht$HVHEHk0LH;P HP HcCH$Ht$Hk0Ad(HD$KHx@H@(dHk0LHx H@ HcCH$Ht$Hk0Ad(HD$KHx@饕@(bHk0LHx tDH@ HcCH$Ht$Hk0Ad(HD$KHx@K@(Ab@(2B(&Lމ؁%t$@#E=IcHt$Hk8HT$ ~H9:}Ntف@@uR0 t!N!E Hk0L 9yHD$Hx@ЅnDD$`LT$XH$Ht$DyLT$XDD$`Ic)Hk0EZ LEIcHk0LHx DD$`H@ IcB Hk0Ad(HD$AJ LT$XH$Ht$Hx@LT$XDD$`&IcxpHk0L HH HqEIcHk0LH;J tHDD$`HJ IcHk0AT(IcB Hk0уLP( ʈP(ZAJTr(3p(@( EZ AHcHk0LA\$@\$@HjD"LHx@HQH8E1>T$`,QM>LH+D$@HHk$IcD!MHk0A4щDD\$pLT$`DD$X DD$XLT$`D$@D\$pt EIcH|$Hk8HT$ wH92}Nt΁@@uR0 t!!E Hk0L29HD$Hx@ЅDD$`LT$X IcC\$@U@ Ht$HD$AM ~(HuHHHq@x t7@t@ /{pH@T$@DIHAƀII@ H I9tHtHxuف ׋T$@ o@ qH(3J(ʀ+޻@dHt$AM HHt$~(uHHB og ̮t H}E"Ht$Mk$HcO4HְEFH^醮 N@M@H|$Ht$AU((HuHHNQV tFt'鱲@ 6遲HQHyƀHLL9UOt# Ht@  H I9uof.E @@h@үft  EKM4Av E؅IHcH|$ HH)HH|$H98}Mtځ@@u@0 t!!E HIHL9H|$H@fH$Ht$LT$PLL$@IcLL$@LT$PiHk0Av L;HcHk0LHx H$Ht$LT$PH@ IcF LL$@Hk0Ad(HD$AN Hx@LT$PLL$@ܭIcѭHk0LHH HnHcHk0LH;J HJ IcIcV Ht$LT$PHk0LL$@Hk0AD(LB( ȈB(HD$AN H$Hx@rLL$@LT$P4@(*Ht$ 8WIcHk0L8Av r(3p(׬=@կ rHD$DHp@@ ف qv-t @ u@t Àt 鳟r(3p(EE EIcHRHLHx t8H@ IcE Hk0Ad(鲱IcExHk0LC@(AAE'E mDHE'DAtAtIcH|$ EH H)H H|$H99}Jtׁ@@uI0 tt]!E H vHL19|H|$AAH@Au+Ht$DH$HD$@HD$@F@ Ht$ D@^@ 雦DҁEDE9[H@HLHx H@ IcEH@HAd(uHt$HD$DF(HAEEpHDL(HD$hHH LLT$PLL$@5wLL$@LT$PHHKH$M,IcEHk0LH9P HP IcEHk0P罃6LT$@"@ ڛ@՚ @ 逕@鮡@(Mk$CL锢@٢Ht$ D7VIcHk0LHP HHk0LH9Q t^HQ IcHt$Hk0AT(IcFHk0IAD$( H$AD$(HD$ANHx@{@(q餟q(3p([fIcEH@HL.Hx #4HP H'EIc)@鯞@@(KH8"LLT$PLL$@Hx@ uLL$@LT$PHt H:HDŽ$`HHH@黳@镔@y(3z(錵DH E۵IcHIHLHz teHB HcP HD$@Ht$Hk0DT$PAd(H HD$H$Hx@3DT$PHD$@}HcPxHk0LtߴB(W돸@H(3J(ʀnAM HcHRHLHx tVH@ IcE H$Ht$Hk0Ad(HD$AM Hx@DAExHcHk0L@(%E靪@ HD$Hp@ +EN E›IcHvHLHx tH@ IcF Hk0Ad(w@(u釛IcxHk0Lr(3p(U@|A}%  D% KҀEDDEɔIcH|$ HH)HH|$H9:}&R0 tt}!E H@HL9eH|$H@0H$DHt$LT$XLL$@AELT$XLL$@D$P@ @댸@ 鉔@ sp(3r(<@U@(鄾@%Ht$ EIcH H)HtAouDl$Ik@EHMcXMt/IIONcDExO@ICD(nfDMCHMtOMkpMtFIIO$NcdENN4M)OcDExIB|vDcA!HMCXHH HcLMH IHEDADEA>AAT$LD$uKD$NDʃAADEAP(H\$E8IX A@( fAHD$I@HD$I@D$A@D$A@A@(A EH([]A\A]A^A_fDHDcAEc0LDCEtOdAL$DqAFEl$ AAAEAAH*"E1AI@HI@fExI@ A`([]A\A]A^A_HD$1AA>XAAE HMSXMHHH HcLH IHLLA M:I(Dl$A;L;D$A9͹AD͉L$AHHHcTHRHIAR(0AE;AzfH\$IJH9HNHL$Az^H\$IRAH9HMHT$HD$AtE1D$D$fLDCES0EuIMAUAEi|$uH\$IUH9HNHT$Ȁ|$AtdAoHtMSXAM[HD$D$yIZAH\$IZH\$AZ\$AZ\$AoHuD$AD$HD$HD$HT$H\$HT$AH\$I]D$AD$H\$H\$qALL$LD$UHAWAVAUIATISH(Z,LrPHuIH?dH%(HE1HHHCHCHH%H)ǁHH9tHH$H9uL|$IH1LDM(YAL$HDMA9~=HcH@HIHI0HI AFA9uHuLLLpAƅLLmLLH&"HcMİMtI1LL^HweH}dH3<%(Du]He[A\A]A^A_]@H)HLfHDM4^DMIAHvfLx\VAWAVAUATIUHSHHLAPMI|$AT$H1L11A!A~J`(HU@HR0 tAt DAD8AT$HH0H89;U,}'HcH@HL`(H09U,HLa HHLIH[]A\A]A^A_HcI,0IHLHIHHHHHHBLHL)H9w`LH L1LVHEPI|$IAT$H(L1f`(AT$HH09LiH)HT$L9IBHH$B\H4$HT$J (L@IHHHpHP`01E1H5[I1L(fUHAWAVAUATSH8H}dH%(HE1H $"HcLǰI~XAFAF4H?HEHHEH=HEHHH%H)ƁHH9tHH$H9ut H)HLLD$IMHU1L UIFhHtEx8t2H}HPIN@H+W@HHHJxHHI DGDj(AoLK IMELEAHDQAv(EP AEAEAALR8Mt'HH+N@LBPHH IcLMt fADAfDWEofD1DE 1AkfDD%XE 1AA@DA%A  _ AAE DD%D%DHHHRHO Db(HEu HHHJq@w`DZ(Hw EtSH1Jq@v7Hw z(t^H1rNB<tx<HHHJq@hH:H;HHHrNvHkHF(sHIDHWG<9ButBH@Df.@f.HWDW3ff.="u1HH="71"Hf.D1fDHcH@HHr"HHGHcHְHcHWH4ʋ@xǀ1ÐAUATUSHH9H"HcHư?LIHrTHIH^`HtDIHE1H3LHt C8AH[ HuHD[]A\A]DHE1[D]A\A]HA[D]A\A]@UHAWIAVAUATSH8D/dH%(HE1LI?IJHEH=.HEHHH%H)ƁHH9tHH$H9uLd$IHEHELmMoIGHMMu`HMuHt A<@H I9uH}1H}dH3<%(SHe[A\A]A^A_]DHuIcH}HH ƋMHu_I1IHICAHHf<&uDA|$U  xHshLHJUHshLH0HX[]A\A]A^A_DMAD$k@HDfILAHEo IL@AD$<BHcUHK HRHHQPAO: t փ5 )օ UD$(HshHL$ Hq@E1]E12HcEHKH@HHAPHshHHA|$I $AT$HL$ T$(tLt$ L<"!U UxHshLHD$)9HT$ *+H|$ Q@A|$ UxHshLHfAGI$AL$HT$ L$(tLt$ "L/!U ID$)HT$ *H|$ @A|$|LTD$(UZHshHL$ HD@A}5Ld$ LL0-UxHshLHrD$)HT$ *H|$ f.A|$A}Lt$ LLL+U xHshLHD$)xHT$ *jH|$ [AGn UxHshHHU (HshHHAT$AM-@bIEx9HpE1E11HT$Hx<oHD$HaI$H9BSLdOHH8H@H@A$@PHD$ D$(UxHshHL$ HD$)HT$ *H|$ .fUM? HshLH=AD$<AUEw<3< 1AD$(UD$)gHT$ *YH|$ Jf.A|$4Ll$ LL+U xHshLHvD$)HT$ *H|$ fDAD$<AW A 9D$(UxHshHL$ HD$)HT$ *}H|$ nfDHC`fDeHD$@)D$0H| Ef.AD$<AUI}& < I4$ D$(U9 D$)HT$ *H|$ fAD$<U<HshHHgA|$TLl$ LL%U(xHshLHD$)HT$ * H|$ 3fDA|$AwLl$ LL%UxHshLH*D$)HT$ *H|$ fUHshLHqAGU xHshHHU?HshHH'A|$A} Lt$ LLLV#UxHshLHHD$)HT$ *H|$ AD$<AG*<D$(U:D$)rHT$ *dH|$ UDUxHshHHU xHshHHUHshHHnMeLl$ AD$<91MmLt$ AE<9.H|$ 12iIuHHcH>Ht$D$f(fT f. f. f/| vf/H,HI<$ H H@HT$ D$(I<$d I<$1W H&!I<$H0"MmM$$AE<9.Ht$D$Df(fT (f.?f.5f/$ f/H,HI<$C A-HH2I<$ I<$1 H!I<$H0MmM$$AE<9.HL@ tH*uH8>H|$ HDH[AtQ<I4$>H|$ 1# ,Hx <OLoHLI9Hl$L|$HLt$ HA}t:IELLLHD$@<%D$eH|$ 6I L9uHHl$%H4!H0 HHl$L M$UxHshHL$ H/D$)HT$ *H|$ BF81DeEoHshHDHT[N1GA/HD$L(EuIEHHH uSI} H5xE11Ht$LLHt$ LH 8Mu H5< L/tL H5;E1KI}H5 cI}H5AI}H5^HD$0xHD$8xpHD$@x\I} H5_t>I}H5gAt I}H5%#uI} H5NI} H51Hin_arrayI9EHD$8xHD$@@<~HH'H  HHHiH HH I} H5'1HD$0xHD$8xA?1I}H5LHD$0xHD$8xHD$@xI}H5pHt$LL,Ht$ LAP0IEHhHHHu:A}trimHD$0xAQHt$ L%H 'H H Mu H5Lt H5LtMuH5WLH5fLuUHD$0xFHHP@HHH H9!zvMuH5&LHD$0xH@D$(HD$ uI}H5WHD$0xHv!D$(HHD$ )HD$0xyH*!H0H HHx@IH@(HtXHD$ @u\D$(H5L-H5LH!HHD$ D$(qD$(dH Mu H5AL H52Li H5LaHD$0xMMMu H5LM H5rL1t H5LHD$0xHHP@HHH H9JttMu H5L H5&Lg H5LK H5Lc/L H58AAxH I} H5-Mu H57L/ H5|L H55LMuH5LtkH5.L{JVI} H5gY9HD$0x*HD$8xH8 HD$8xHD$0@ƒ,MuH5nLtH5LHD$0xHD$8x~A}trimtoHI}H5jh7CMuH5uLCH5L'HD$0xHD$8xH!@HD$0xH|$8H1H@H'HHH=HHin_arrayI9EqjHuSI}H5i8DHD$0x5HD$8x&HHx/HtdHHtvHI}H5HD$0@<HD$8@<I}H51{I}H5jI}H5VhHHD$0PtC1HT$8z"HHP@HHH H9zvHD$8xHHP@HHH H9zvDAWAVAUATUSH(H/H|$8HEdH%(H$1H$H}HD$HHMHcB,II)HL9 HHE^HH$DŽ$DŽ$P 11f.H$D9H;FH|;B,}WHcH<H)HHfLB@L$IAD80 AH8HEAEA;B,|HH$H|$8HH$HHHH$H=H$0 HH5vHiL$D$TH$HHD$0AG,[HDhD9IcD$PHH)HHHD$HD$`H\$HD$@Hl$H$HD$IG@}HD$(H$HD$H\$H@HJ@HBPH$rH94}PuI]5u@(tfxuHPH;P2fHD$0AHl$8Hl$D;hH>H$L$\$P\$TXHAG,HcH9| :fL$HA;_,H$H@ tH)uH8V@D$hHl$@HD$Him۶D$$HD$(XBHD$pDl$ HD$@AF9D$ DEIG8LcKL4A9D$$L$$A;NEf HL$0ILA@M;D$ uAHH$A@Qw&H5HcH>DЃcHEUHD$pT$xt H$HT$LAEHD$XL@AAAAE4Dx,H H)HIO@HыJTHz IA|$ZAVx#A;tL}8McFAFAFEx4AD$aIW@JL)H@AFAD$A|$MAD$&H|$0HAD$AD$ E tHEfHD$(HpHH$H\$|D$hHl$@~fDH|$^8AEAE*LAEAE AEH$H$H+H@HHWHHcHHHGxLAQA;tHD$XHFWHHHxH9uAW@IG t0H8HHfHHxuyH9uH([]A\A]A^A_ÐHHc?HHHHH! HIO(H)HU@HHpVHHHdAH)HLH)HLgDX EHcIrPHRHEu:t4HtLHHHcTxkHtfHRHuUDHpLLPLXÉLXALP7HpIB8H{@LLfPx8HcH H)HuHv@H4΋NHuLHH ֋0HcD_HH)HMHI@HA&~AtKqHuLHH ֋P HcH H)HuNHv@H49H~HM?H4HHHuLHH fDWDX EHcHRHIRPf HLHHHcIJPHyHRH@P9H{A?HuAJJ4HH]HLHH @P|P9H{A?HuAJJ4HqH]HLHH @PUH~WHuLljHH <=H~L]LÉHI qH{=L]LÉHI ӋPH~dL]LÉHI JH{=L]LÉHI ӋP}LIB8LP x(HcIz@HH)HHp 9:Px(HcIr@HpHH)ʋ H9:^Px/HcHpHH)IJ@ H9:/H]LDHH ]ILpHht/I?$IGSH@HHxH9uUHEt-H8HHfHHxH9uLpIB`HEBXH 11LhDpMb@AANHIHLZ=D9JMc8HIDJEIcHIHISPt=HH)HMHI@HHzHMDHDHt@9t IZ`HcHHHRHH HJEBXH D9PHȉ?HHHHHI! HEH!HcHW8H HI@@HJx]LcN M)LUMR@OEJEDL]A?LI LsLUHDHI fD LcDXN M)LUMR@OA&EA;EJE.DL]A?LI LZDLUHHI DJEJMcJ L)LUxNMR@MAJuLM?L}HIHsHHI L}D]t1IHIW1DHHJH/9uDULMEt4IHIQ1HHJH_A9u]L}LDJD9IzAH]?ANNIL]HHI DJEL}f.Iz AL]?ANO ILUHHI IztDHMA?HHLzHUHDHH L}|@IzEAL]?ANO I!LUHHI DJHLc?HHHHI!HMHH!HEH!JLo@L)LeIDLXEsE]IC`AE1ɋO@Le?HIHsHEHHHH AA9IC`LeBIHcHH)IL$@HHyHxtHM?L$HHsHEIILL 0fD9lH~HM?H4HH]HELljHHH 8F@D9 nIzDHMA?HHLeHEDHHHH MIcCHHID$X1HȉʉHpH{@LDHpWHAr(uHHJq@wr t,@1HLcщH @HqI€HLL9HXNt! H~t @  H L9uHX[ցDHRуe:z<w VAMHHLZHpxX ]HEHXDžLCE1HPHEMH8HH0fI@L9PIHXJHtDL@HIL,IILDI I$HtHpLp@MAFtHhLULg8MfHQ!H=H@Àucu6u [H! [H=1HH! H=HfDHɊ! H=HxH!H=HKHy! H=HHh#HQ! H=*H@H)!H= HH! H=Hff.AWAH=<AVEAUEAATAAUHASH8H!T$ H DH %D$D%D$A(E/H=IE`H E\D%=DEEEEA A D$DA@A%D$D%D$ADL$H=H DL$DL$H=#DL$H A .A H=fH H=MD\$H E"H=`&H H={ H EQH=%H H=H EH=H H=H ESH=uH H=\D%`tb=`t[H EH=A@(A # EtH H=H3]谼H A|$lH=H H=˰Ht-HMD$ HH;HuH1H D$H=NH H=ٟ5]EEH=8Ht-HMD$ H8H;HuH71H D$WH=H H=D$H t2H=wH H=r^H H8Hο][]A\A]A^A_H=^*H EEEAAH="H EH AAuEED%=DEEEEA A D$DA@A%D$D%D$AA 1AEAA)H=DH E'H=H H= ȾH ED%=DEEEEA A D$DA@A%D$D%D$AA AAT$E*1EkMH=4H fEEfDH=½H f.EET$|$#|$H ft$ H=|BH H=ٛ)D$H EEBEt|$ |$|$H ZfDEfA ^A0AbD$Z1Eb}fDD%=H=OD$H tEWD%=wH=@H 뜐H=TEDAH %=DEEE% AAAD$ D%@D$$D%D$(D%D$D%AD$CEt$ D$$rH=,D$(D\$EH H=3H H=DT$EEEEt5H H=蟺H H=膺H3]9DD$H Et$D$D$DD$EVDL$EIE|DD$E @E fADL$EEED%D$D%D$Aǀ |$|$1|$|$H Au!H=d*H H=ADT$H EH H=M߸EH H=轸H=蚸E @DEEEEA A D$DA@A%D$D%D$AA f|$Et2H H=0H H=ݷE:H H=軷H H=F袷E@H H=wH H=@^D$$ D$(D|$E&DL$Et2H H=OH H=EH H=նH H= 輶L$  T$$u`D\$(Ezf.H H=wH H=9^D|$E>H H=i/H DL$,H=DL$,E |$ [DT$$EuD$(ED$(P|$|$EEEDH T$DT$Aǀt%|$( |$t |^|$t |$]?fDUSHH}!H-y!LGHcLMHǰMt|HGIHt?HHHt6HHL1贴Ht H[]fDLL H}HH1[]kLɺH=?ff.fH!y!L@L@IcL>Lɺ H=LɺH=QdzLɺ H=7駳Lɺ H=$釳HH1LwH|$D$HLϸL@HOH1L.fD@HL1ff.tE0t0@t[Ptf`}ptH HyHw!H81鑲HluÐHaw!H=]HPHAw!H=CH0fHw! H=Ht USHH=HH-v!HMƱ{uHH}H 1Hۻ趱{H}tHHH[H=]}DHMH=^{H}uHKHHz1[]Gff.@AW1AVIAUA͉ATIUSHcH4HHH-u!HH}CH}h5 @A(HCHH= 6Hu HcCC!K xH}H1K(xH}H1K$xH}H1ǯHc[,;H[]A\A]A^A_@K HNDD1药BH H=OCH}H H=Ϲ$CH}H H=H}HH}HйL51ݮ1{~/DLhHH}LB 1貮LAU9SHMH=|fH}H1HL-8\I$Hc[0x%H}L1H7I$Hc[0yHMH[H=e]A\A]A^A_HH=b׭CH}MH H=B训CH}(fH H=臭CH}IHcKL=LH}L,H,AMMt1IRM9v%DAMH}L1I-M9wHMH=gfHH=L׬CH}6HH=诬CH}HH=臬CH}HH=_CH}HH=7CH}sHH=cCH}CHH=3CH}HMH=辫CfDHp!H@t,@tF@u%HǾ1HԶ鈫9WH;HǾ1HcHǾ1HHHOPHcH1LѾH[IfAWAVEAUATAUHSHcHHo!H8I1پH EɪD;uHDHIU@HtRHH)D0IEPHt3H[1HHHp Ht P(8DnI]PC(u|H[]A\A]A^A_DADHq}@HH=hD;uH|!ADHH[]A\A]A^A_,@DfDHH{[]A\A]A^A_Hn!H=H萩 ff.AWAVAUIATMUSHH(H<$zL$ {IH-8n!AH}SM 1A HMFIT$8HH4$HH+F@HHHD@EHEM%IHHD%D$=|$S|$U|$|$|$ |$  AtDC%p= =@ u"HM H=At7CN t"HMH=ȧA A A fC<MIT$8H}H4$HH+F@HHHD8EDP EMHME1H=DT$LcCKLDT$DL$ IPH<$IDDMt[A HB1ͦs@E1HEMKHǾ1H 蕦E1H$HDCHձH+H@1Hg H})"C==HMH= xH$|$ HCH HHЅHHE1pH8C<MaIT$8H[H4$HH+F@HHHDpEDpE*HMH=-XLcC KDDL$ H<$LIPI4@|$C<HuMt/IL$8Ht%H<$HH+W@HHDlExnH( []A\A]A^A_醟fDH$S t$ HH HHЅsHHVEH8 GLwH}HLI9H\$LILd$TDHH"1QH}Mt^IEHEgB 1E&H}H I9tc{tHKHuHKH˰1H}MuH$Hc H HL$HH+H@1H迣H}I9uH\$Ld$H H=w胣|$SD{k&H}M9IEH6B 1NC<fH$HCH HHЋT$ HHpH8HuAD% +H}MIEEwHB 1E輢wD% H}MIEH_A1sfDs@yHcSHPHH<$HMH=EfDKH}H1asLcC@IPID…xDL$ H<$L|s AH{ksAH{E1pGBf{HMCH$HcH>fDHu HcS sH<$HPHqIT$8HH4$HH+F@HHDtE{DHu 蚛HcSsH<$HPHIT$8E1HH4$HH+F@HHDT EUf.C HMH=JDK{H$HcKHHH+H@1H DHu 袚LcC KDDL$ H<$LIPIfHu bLcCKDDL$ H<$LIPI~f &LcCKDDL$ H<$LIPIBIT$8HtaL4$HHuI+F@HHDlE5HH=ϫLcCKDDL$ LLIPIHufD{HMCHȮHcH>fDHcSE1HPHN@Hu E17HcSsH<$HPHfHu HcS sH<$HPHy@HMH=qH$HcKE1HHH+H@1HfH$HcK HiHH+H@1H躝uDCHMH=J| H=aH=FH=+ H=p{H=E`H=ڜEH=远* H=褜 H=p艜H=MnH=*SH=R8 H=+ H=mH=RH=̛7 H=ӧ豛H=̧薛HM H=vCfDHMH=NCfDCHM H=|@KH}1HڤC;HM H=ǚfKH}H1谚HMH=3聚HMH=b]HMH=ݦC>HMH=$ff.@AUIH1ATUHHSHL%^!I<$AUHAMLti1۾+ھLAUHAML1 9v5HDHsuI $H=oDI $H[H=T]A\A]D@AWAVAUE1ATAUSHH8 HT$HL$tLiM Ll$AHED$H-]!H$H a!HuHcLðM E~}HK8DC 1H}H觘ANxKDCLKH1HH}}DE%AD$DD$(DH<$D$ t(H$H}HbDD$,H,1,DD$,HMEt H=BHMDD$E |$(t H=>ȗHMt$ t H=*覗HMM Aj H=ԥkH|$tHL$H}1H)WHCxDHDH}HH1*AFx9C FC E1Ll$IDH}H1DL<I)IILP0Hp(xILHHu @AE A9FxAFFx9{LLl$HM H= IAIDAFIHu ̐H<$tyH$HxPtnSH~gE1Ll$L5EIfDHML•EDELHAHu WD9kHLl$MHD$DD$(AEHD$HD$A9EHD$MuHHD$IƋD$(t E~EyIuI}DH<$H$H@0HHt$L1Le fH9]~+HHHE@yH}1LH9][]A\AUATUHH=SHL%M!I $~HvI $H=a\EH~H1L-@I $L2ھHsI4$ ҂9]HH[]A\A]fH~@AAWA׺AVIH=AUATUSHHL-L!IM蹇LIMH=藇K,1E1LDH=tHC@I}HL(1eIu AH8D9c,~yIMH=HC@DEHLD(HC@HPxIM@0[H=φVf.H[]A\A]A^A_Ðff.@AWAVIAUATIH=USHӺHL-eK!IMdL\IMH=GBA1L=|fDI}L1#SHCH53LHSHCH5xLHSHC H5LHSHC(H5@iLHA9.kH[]A\A]A^A_@AWAVAUATIH=USHH-PJ!Ln0HMDL "%s": %ld: BB%d, L%u, default: ; %s = {} : ; (lines=%d, args=%d/%d, vars=%d, tmps=%d, ssa_vars=%d, dynamic, recursive directly indirectly, irreducable, no_loops, no_return_value, return_value ; arg %d ; = Phi( = Pi( & RANGE-- .. + %ld - %ld%ld .. TYPELIVE RANGES: %u: BB%u - BB%u %u: L%u - L%u (tmp/var) (loop) (silence) (rope) EXCEPTION TABLE: BB%u, BB%u, -, BB%u , - L%u, L%u, L%u ; return ; %s:%u-%u ; (%s) DOMINATORS-TREE for "" CV Variables for " SSA Variable for " *SCC=%d Variable Liveness for " BB%d: in SSA Phi() Placement for " ; pi={ ; phi={0***+8+`+*<=t<<<<<=T4$>D8>L>T>>$?T?$?@d@@D@4AAA,BxBBC(CD$\C$)C*C:Ct;4DDCDDE$FEUEdVFTf\FfFgFiG$jXGzRx $ FJ w?:*3$"Dh \,Efx _bY]H HFBB B(A0A8D` 8D0A(B BBBC $G F H$BBB B(K0A8GP8A0A(B BBB p<E} F g I ,lAAG I } AAG 0(EAG I Q AAG $PEG n AE NA(  eBHA VAB(LPAAG AAA xL`FBB B(A0A8G 8A0A(B BBBI EXhBBB A(A0G I w S!F!F!U k 0A(A BBBJ HLFPB B(A0A8D@ 8C0A(B BBBH zRx @(!H,BEB B(A0A8Dp 8A0A(B BBBA (p dEG s AH D DH ,H [EAJ@ AAF Dx BBB A(A0Gw 0A(A BBBB zRx (0FAD G  AABH $,`EG ^ AE nAHTFBB E(A0D8GC 8A0A(B BBBH 0EAD l CAF RCA ED@x AF H D c E 4AEAD@X AAD  AAK Te`hBIB F(H0P (A BBBF X (D GIDH g (A BBBJ H FBB B(A0C8GP 8A0A(B BBBG L" FBE B(D0A8G 8A0A(B BBBF 8h09FBA A(D`v (A ABBF 81FBA A(G (A ABBA 3ED@n AH TX4XBBB B(A0A8H Q D 8A0A(B BBBH $zRx ,?($:FDA qABx:OEz A J0:FGD Lpm  AABB < D;lEAD `(H0P(A Q CAH DFA8X t;IMED D(F0^(A ABBD@ ;FBB D(A0I 0A(A BBBG zRx ( >#( >Lm O THH ?1FGE B(A0C8D` 8D0A(B BBBA < xBFBB D(A0 (A BBBF < BFBB D(A0~ (A BBBD < hC+FEE D(A0 (A BBBA <T XE%FEE D(A0 (A BBBA d HGFBB B(A0C8GP 8A0A(B BBBI D 8F0A(B BBBA `IAKp AC @ JFBB A(D0D` 0A(A BBBH d XNHR| `NHR( hNEGM ] AAH ( OEGM l AAI 8 OlFHA J(D0 (A ABBF 4( Q\EH M AAH @E zRx   z |Q!HX$ QSEG- AF zRx  %cR`D0k A 0R>EDG P GAH KAA0PR>EDG P GAH KAA0R>EDG P GAH KAA4SzBBA F(D0b(C ABBzRx 0$dL$SFBB L(A0A8G 8A0A(B BBBK txZEN0U AG (ZEDG0A AAE 8X[FBD A(DpE (A ABBD _ED G \ D $8`q@`T`VEPpp 8A0A(B BBBH 4h/pFTJ  AEC TAE</"XFGB B(K0A8DP  8A0A(B BBBH GNU &X<===yHyHHH @  @ @O @-O X:O /H@0rÌsʌ wҌ s݌ wH@\@| DXDX!DX3@B@G_HVXf!Hx @@ @@ @\| @͍!H @ @%X  !!H5!HJ!HbBHO_xNXBHKH@Ǝ"H֎!H\|!H\oXFHFH @@@@@&@7@AHw@@FHIBHZ BHgFXzFXAHBH FHBHFHɏ@Ϗ BHُ FH @aH@aHBHDH7 @? FHJ @U FHc BHmFHFH @ @ @@@FH BX BXJ@_@T@j@ŐBH̐FHӐFHېBHBH\BHAH BH BHvFHFHFH BH!H) !H3DH;@J@R FHFX_aXn FHxBHBHBHFX BX BHBXb gX gX BHˑ @ Hב FHBXBX BH @!H BXBX FX  @CH+ FH7FH? @BHK@N @O !HZBHbBHgFHwDH@n@vDH@@/H/H @AH BH BH BH BHDH˒FHԒ@ݒ@@ @DHDHBHBHUH FH H& @1 @@pAHP @]@e@n @Z@b@k @y @ FH@FH@@Ǔ@Г @ۓ @ FH FH FH@CH"@8 @HDHYDHj6@n&@s&@y&@"@"@"@"@"@"@"@"@"@"@"@"@"@"@"@jG @ @@Ô @ϔ2@Ӕ"@F&@ה"@ݔ"@"@"@"@6@6@6@ BHBHk" FH/ BH="@B DHL DHV@^FHfAHm@t0cH{ H @ H @@H @@HFHBHʕBHBHBH@@. cHl@:@S@h@F @@AHXXXŖXܖXX  FH  X@ BH*@:DHB@S@i@@@LH DHLHɗDHޗFX CHFX FH @FH!FH2@G @Q @@^ @l @y !H@@@@ИcHߘcH@@ FH" BH0!H? FHK@R"@[ "@eBXl@tBX|@r @rrrr rÙ r͙rՙ @ rr @ @\ @@H@ @ @#@) @0 @5DH;DHADHHDHNHT @^ @h@`Hn@t@z @@@ @ @c@FHH!HFH@Ϛ @ݚH @ OH' @AOX\XwXXX @қHHHDH(DH?@T@p @(H@DHĜ @ٜ!H@@ AH@@,@<@R@f@z@OHDH @˝ @ @ @!H(!H>FHZ @j cHv@@OHFH@ H X̞DHʞoHў OHݞBHX@< @ @FH @ FHdH!H!H! @+ @5 @? @I @S @] @g@pFHG @y @ @G @ @G@@@paHpaH@@@@ß@ɟ@ϟ@ޟ&@&@ &@ @!BH@4 @?@G@N@W @a FHk@t@}@ @ @ FH FH @Ƞ @ՠ @cHFX@!HF @ @@% @? @1 @@ @2 @8@>@E@ @L @W@#@rXlXqXHXvXRX~XuX@ VXN@N_H /HH0l@ɡ @ԡ Xޡ X @ H H HH3 HAHY @!Xd ?Xq@`H H H H X @aHHע H XHHH(H9HOHfH}H XHH HˣHܣHHH 2@ 2@+ H8 XB HN H\@{Hm@b @O@t%H@@ BH!H @̤HHHH&@=@WBHh @HDHH@rDH{@y@ @DH DHD@ @`H@AH HH˥H!H OHOH@BH DH& X2X;XDHVXh@x H X XXX¦@զ HDHDH @!oH:AHP!HjBH@H(%HDH @ʧ@H tH tH p@H  @@% aX2aXH aHT #H_ BXj Ht@@ FH@ FHI!H!H BH HH @@Ш@ @ HHH H/HAHSHh FHt @@@ FH@@ѩ/HoHOHH@(@ H<HN@_@qFHFH@FHFHǪBH۪FH FH@FH% @0BHFFHZ@oFH FH@HFHFHɫ@ثFHFH@@ @$@5@E @S HaHrH FH FHFHFH HɬHڬ @CH @@ NX oH BH' @2 @= BHKBH_ @j FHv FH @H@@έ@@BX@HH@,@>HN@_@qHDH FH FH NHNHϮ FHݮNH!H^HN @BH&FH= @G @Q @\ @g @s FH} FH FH FH@ FH FHï @ϯ FHݯoHFH!H!H*FH:FHOFHdFHyFHFH @ @cH° @԰NHDH@@ FHFH-FHF!HO @]@l@ H0!H@0!H@Ա@@@@ DHDH)!H1 @> @L@ H^0!Hq@0!H@@IJFHʲAHݲ@ @ DH  @ @%DH7DHICHc FHo oH{@BHXXƳ@ճ@P@p&@@$@@#@$@"@# @-@C@VBHg@@@@̴@VH FH FH @ @$ @, @2DH9DH@DHHDHOHV @a@h@o@w@!H~ FH FH FH FHFHFH FHȵ FHԵFH DH FH FH FH FH H# @/@B@S BH^ Hh !Hs FHFH@FH @ŶFHUE2@ &`NwE &`NE &`NE &GE &GE &`NE &GE &GF &`NC/ &GXK &=Cp1 &GIC0 &N1F &GLF &GjF &mNK &mNxK &F &F &GF &GF &`NG &G @G &GF &GdE &GF &XG &*G &GmG &GbL&^L&Mj @ 6&&o`  y&p(i oo(oo&o&w&pФ 0@P`pХ 0@P`pЦ 0@P`pЧ 0@P`pШ 0@P`pЩ 0@P`pЪ 0@P`pЫ 0@P`pЬ 0@P`pЭ 0@P`pЮ 0@P`pЯ 0@^=e=`<k<t<m=w=}====<(;=== j/;3<&/`/*(;GGpDK H>&H3 &3H0?&LH?KfH6`& pGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1@6 GA$3p111306GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113bGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYоGA+GLIBCXX_ASSERTIONS GA*FORTIFY6GA+GLIBCXX_ASSERTIONS о ; Z } 0 g   3 W о  о,&  F h      % _6 _      MF c M  P 0d  8 lE d t & t  P6 \ 5 e 5 % @ % K 0k&  0 ` 0 u' 0E= uj  h   &` `& $ @&@: &X &{    0!   &    &P      3  P  Qu     +  T  {   w  w  =  =;  1W  1     ; [ n       9 Y ` Y  P P  " L v  g  4 f    X X3 gW X   / /( O  l l  ' M s    ! O v      *= b      9 _     aAH% aK !o ! h" h" # #/ K%U K% u' u' * * EC j   2  K s  * * * * V/6 V/b {/ `/ {/ / /C n& /B r0i / r0 e1 0 e1 2G p1lc 2{ 3 2  3 3 3! 3' 35M 3Sf c 35 5 @5` 5  53  5>E &V  5s  6  5> &  6  ^6  6> & ! ^64! 6Z! `6zs! ! 6! >! 6! >" %??" >V" %?" ?" 0?" ?" gD!# ??# gD`# D# pD# D# E# E$ E5$@&H$&X$Km$&H$ &0$&0$`&0$ E$ v% 1% Q% 2r% 2% % % % & E>& FGa& EVw& FG& L& PG&L& L' O0' LK' Os' T' O' U ' e' T' U( U=( ec( U|( ps?( f( e( f( f) h@) ho) as) h ) as) t* t-* vT* v* v* v* =*  + 0+ 2V+ 2+ + + + , vE, wr, v, w, uy, w, uy - {K- yi- {- { - {- {- {. {>. {_. {. t|. t|. 4. |/ @8/ 4l/ 7/ @/ 7/ 0 C0 =o0 =0 =0 0 0 21 271 Z1 1 1 1 @1 2 $2 I2 2o2 22 2 2  3 /3 @S3 u3 @a3 3 s3 3ȓ&4&#4 sP4 C{4&4 C4 h4 h4 "5 "D5 k5v&0y5 5 =5 =5  6 /6 S6 {6 ]6 ]6 }6 }*7 Y7 7 7 7 ח!8 חV8 78 78 k8 k9 G9 s9 Ø9 Ø9 9 $: ,M: ,v: : : : ; /; Z; ; 2; ; < O< {< < < < = ?= 7j= = @S= 7= > -> qQ> h> q> >> > >? G0? @ E? Gm? ª? ª? g? g @ 7@ e@ ج@ ج@ @ A =A 2[A wA rA rA A A cB ?B cB B B B B C CC dC C  C C C C C cD C*D pGD hD D D D D #E LE nE CC pdC zC p C zC C C C D E E E E F CF nF F F F G "G Y@G ^G G G G G H 1H TH H H  H H v!I :I vmI I I I lJ L,J lRJ vJ pEJ J J K IK vK K K K L EL oL L L zL z)M QM M dM dM \ N \9N gN N N N O HO oO O O O 'P VP P P P Q <%Q <KQ IoQ IQ YQ `Q BQ Q R 3R SR nR R R R `R BS PS -S BS [S uS S S S S S PT ?T PT eT zT T T T T U U 1U UU wU U gU U V +V WV ~V V V V W gCW pYW fsW W W W W  X -X HX gX pX )&X p X )&X .Y 0&Y .CY A/jY .Y A/Y u1Y u1Z f.Z fNZ XprZ Z Z Z [ <[ h[ [ [ f[ Xp\ `p-\ sH\ c\ \ \ \ \ ] $] D] `pn] s] s] ] ] ^ ;^ d^ ^ ^ ^ ^ s%_ R_ f_ ~_ _ _ _ _  ` ,` E` b` ` ` w` ` a  $a ?a 1Xa da 1a a @a a <b )b <Yb b b `b `b c Ec sc c c c c d d  Y x   Ќ : j :2 M n e u e Ս pa  !" 4 !V 1v 1 92 92ߎ 2 2' A4L A4i l5 l5 6Џ ҏ @  & &1 =&\j 0u  0a uz p֐ s ИI . й3 -9 Z p| 9@& 0Ƒ @ ݑ  2 80 ` F ^&v @ Q @1 1ђ  pb   v?+ K \^ @r  QH  WГ&  Pr p0 66 P%%U  j e p1 PŔh'ϔ e  ` ; 0U&h pz @A p ԕ v    t &+ C pI^ [} s  #+Ж ! . !& @+G `p:b @p # ` * &Ɨ |ۗ  ` P/ eE @2Y  u   2QȘ p0 P4   `4 'K `Ug #}P' P   #͙ Vߙ d C M; ^Wg  125 O Zܚ @ .k   f + K `i   0 Pw& ћ dP&p' t+ p.E ~X Pc   a .k @ZМ g p5X ) : dP p"k P/%L &y&ǝH&؝ V Ъ  [# lG @a V r P   Ϟ P  pf   7   @F )g V   E &(ɟ E 7  !! H8`&((p @ ` P 0 66L&& &w&y&& &xg;QhƠ֠)AKb~i ա 5OYo{Ѣ#6Leru=&ƣܣ|%.;IVj~ڤ)9J[p̥.AXh|æצ(a|ħ֧.B[n̨+9Wq~ =éЩ';Tf^xΪڪ(<Pc`&x(Sx'ϫ3Hz&ʬݬ)>Rgڭ/BWsϮ0&@ 0D_p Ư0FUas"ưӰ,.annobin_ZendAccelerator.c.annobin_ZendAccelerator.c_end.annobin_ZendAccelerator.c.hot.annobin_ZendAccelerator.c_end.hot.annobin_ZendAccelerator.c.unlikely.annobin_ZendAccelerator.c_end.unlikely.annobin_ZendAccelerator.c.startup.annobin_ZendAccelerator.c_end.startup.annobin_ZendAccelerator.c.exit.annobin_ZendAccelerator.c_end.exit.annobin_accel_include_path_on_modify.start.annobin_accel_include_path_on_modify.endaccel_include_path_on_modifyorig_include_path_on_modify.annobin_accel_new_interned_string_for_php.start.annobin_accel_new_interned_string_for_php.endaccel_new_interned_string_for_php.annobin_accel_globals_internal_func_dtor.start.annobin_accel_globals_internal_func_dtor.endaccel_globals_internal_func_dtor.annobin_accel_deactivate.start.annobin_accel_deactivate.endaccel_deactivate.annobin_accel_new_interned_string.start.annobin_accel_new_interned_string.end.annobin_zend_get_stream_timestamp.start.annobin_zend_get_stream_timestamp.endzend_get_stream_timestamp.annobin_accel_copy_permanent_strings.start.annobin_accel_copy_permanent_strings.endaccel_copy_permanent_strings.annobin_accel_use_shm_interned_strings.start.annobin_accel_use_shm_interned_strings.endaccel_use_shm_interned_stringsaccel_replace_string_by_shm_permanent.annobin_accel_getcwd.start.annobin_accel_getcwd.endaccel_getcwd.annobin_zif_accel_chdir.start.annobin_zif_accel_chdir.endzif_accel_chdirorig_chdir.annobin_accel_replace_string_by_process_permanent.start.annobin_accel_replace_string_by_process_permanent.endaccel_replace_string_by_process_permanent.annobin_accel_reset_pcre_cache.start.annobin_accel_reset_pcre_cache.endaccel_reset_pcre_cache.annobin_accel_gen_system_id.start.annobin_accel_gen_system_id.endaccel_gen_system_id.annobin_persistent_stream_open_function.start.annobin_persistent_stream_open_function.endpersistent_stream_open_functionaccelerator_orig_zend_stream_open_function.annobin_accel_activate.start.annobin_accel_activate.endaccel_activate.annobin_accelerator_remove_cb.start.annobin_accelerator_remove_cb.endaccelerator_remove_cb.annobin_accel_move_code_to_huge_pages.start.annobin_accel_move_code_to_huge_pages.endaccel_move_code_to_huge_pages.annobin_accel_startup.start.annobin_accel_startup.endaccel_startupsupported_sapis.20312jit_auto_globals_strjit_auto_globals_infoaccelerator_orig_compile_fileaccelerator_orig_zend_resolve_pathpersistent_zend_resolve_pathaccel_startup.cold.18.annobin_accel_find_interned_string.start.annobin_accel_find_interned_string.endaccel_find_interned_string.annobin_accel_replace_string_by_shm_permanent.start.annobin_accel_replace_string_by_shm_permanent.end.annobin_zend_get_file_handle_timestamp.start.annobin_zend_get_file_handle_timestamp.end.annobin_opcache_compile_file.isra.12.start.annobin_opcache_compile_file.isra.12.endopcache_compile_file.isra.12opcache_compile_file.isra.12.cold.19.annobin_validate_timestamp_and_record.start.annobin_validate_timestamp_and_record.end.annobin_validate_timestamp_and_record_ex.start.annobin_validate_timestamp_and_record_ex.end.annobin_accel_make_persistent_key.start.annobin_accel_make_persistent_key.end.annobin_check_persistent_script_access.start.annobin_check_persistent_script_access.end.annobin_accel_post_deactivate.start.annobin_accel_post_deactivate.end.annobin_accel_shutdown.start.annobin_accel_shutdown.end.annobin_zend_accel_schedule_restart.start.annobin_zend_accel_schedule_restart.end.annobin_zend_accel_schedule_restart_if_necessary.start.annobin_zend_accel_schedule_restart_if_necessary.end.annobin_zend_accel_add_key.start.annobin_zend_accel_add_key.endzend_accel_add_key.annobin_persistent_zend_resolve_path.start.annobin_persistent_zend_resolve_path.end.annobin_persistent_compile_file.start.annobin_persistent_compile_file.end.annobin_accelerator_shm_read_lock.start.annobin_accelerator_shm_read_lock.end.annobin_zend_accel_invalidate.start.annobin_zend_accel_invalidate.end.annobin_accelerator_shm_read_unlock.start.annobin_accelerator_shm_read_unlock.end.annobin_zend_accelerator_blacklist.c.annobin_zend_accelerator_blacklist.c_end.annobin_zend_accelerator_blacklist.c.hot.annobin_zend_accelerator_blacklist.c_end.hot.annobin_zend_accelerator_blacklist.c.unlikely.annobin_zend_accelerator_blacklist.c_end.unlikely.annobin_zend_accelerator_blacklist.c.startup.annobin_zend_accelerator_blacklist.c_end.startup.annobin_zend_accelerator_blacklist.c.exit.annobin_zend_accelerator_blacklist.c_end.exit.annobin_zend_accel_blacklist_loadone.start.annobin_zend_accel_blacklist_loadone.endzend_accel_blacklist_loadonezend_accel_blacklist_loadone.cold.0.annobin_zend_accel_blacklist_shutdown.start.annobin_zend_accel_blacklist_shutdown.end.annobin_zend_accel_blacklist_init.start.annobin_zend_accel_blacklist_init.end.annobin_zend_accel_blacklist_load.start.annobin_zend_accel_blacklist_load.end.annobin_zend_accel_blacklist_is_blacklisted.start.annobin_zend_accel_blacklist_is_blacklisted.end.annobin_zend_accel_blacklist_apply.start.annobin_zend_accel_blacklist_apply.end.annobin_zend_accelerator_debug.c.annobin_zend_accelerator_debug.c_end.annobin_zend_accelerator_debug.c.hot.annobin_zend_accelerator_debug.c_end.hot.annobin_zend_accelerator_debug.c.unlikely.annobin_zend_accelerator_debug.c_end.unlikely.annobin_zend_accelerator_debug.c.startup.annobin_zend_accelerator_debug.c_end.startup.annobin_zend_accelerator_debug.c.exit.annobin_zend_accelerator_debug.c_end.exit.annobin_zend_accel_error.start.annobin_zend_accel_error.endzend_accel_error.cold.0.annobin_zend_accelerator_hash.c.annobin_zend_accelerator_hash.c_end.annobin_zend_accelerator_hash.c.hot.annobin_zend_accelerator_hash.c_end.hot.annobin_zend_accelerator_hash.c.unlikely.annobin_zend_accelerator_hash.c_end.unlikely.annobin_zend_accelerator_hash.c.startup.annobin_zend_accelerator_hash.c_end.startup.annobin_zend_accelerator_hash.c.exit.annobin_zend_accelerator_hash.c_end.exit.annobin_zend_accel_hash_clean.start.annobin_zend_accel_hash_clean.end.annobin_zend_accel_hash_init.start.annobin_zend_accel_hash_init.endprime_numbers.annobin_zend_accel_hash_update.start.annobin_zend_accel_hash_update.end.annobin_zend_accel_hash_find.start.annobin_zend_accel_hash_find.end.annobin_zend_accel_hash_find_entry.start.annobin_zend_accel_hash_find_entry.end.annobin_zend_accel_hash_str_find.start.annobin_zend_accel_hash_str_find.end.annobin_zend_accel_hash_str_find_entry.start.annobin_zend_accel_hash_str_find_entry.end.annobin_zend_accel_hash_unlink.start.annobin_zend_accel_hash_unlink.end.annobin_zend_accelerator_module.c.annobin_zend_accelerator_module.c_end.annobin_zend_accelerator_module.c.hot.annobin_zend_accelerator_module.c_end.hot.annobin_zend_accelerator_module.c.unlikely.annobin_zend_accelerator_module.c_end.unlikely.annobin_zend_accelerator_module.c.startup.annobin_zend_accelerator_module.c_end.startup.annobin_zend_accelerator_module.c.exit.annobin_zend_accelerator_module.c_end.exit.annobin_filename_is_in_cache.start.annobin_filename_is_in_cache.endfilename_is_in_cache.annobin_zend_accel_info.start.annobin_zend_accel_info.end.annobin_zm_shutdown_zend_accelerator.start.annobin_zm_shutdown_zend_accelerator.endzm_shutdown_zend_accelerator.annobin_zm_startup_zend_accelerator.start.annobin_zm_startup_zend_accelerator.endzm_startup_zend_accelerator.annobin_OnUpdateMemoryConsumption.start.annobin_OnUpdateMemoryConsumption.endOnUpdateMemoryConsumption.annobin_OnUpdateMaxWastedPercentage.start.annobin_OnUpdateMaxWastedPercentage.endOnUpdateMaxWastedPercentage.annobin_OnUpdateMaxAcceleratedFiles.start.annobin_OnUpdateMaxAcceleratedFiles.endOnUpdateMaxAcceleratedFiles.annobin_OnEnable.start.annobin_OnEnable.endOnEnableOnEnable.cold.8.annobin_add_blacklist_path.start.annobin_add_blacklist_path.endadd_blacklist_path.annobin_zif_opcache_compile_file.start.annobin_zif_opcache_compile_file.endzif_opcache_compile_filezif_opcache_compile_file.cold.9.annobin_accel_file_in_cache.isra.0.start.annobin_accel_file_in_cache.isra.0.endaccel_file_in_cache.isra.0.annobin_accel_is_readable.start.annobin_accel_is_readable.endaccel_is_readableorig_is_readable.annobin_accel_is_file.start.annobin_accel_is_file.endaccel_is_fileorig_is_file.annobin_accel_file_exists.start.annobin_accel_file_exists.endaccel_file_existsorig_file_exists.annobin_validate_api_restriction.start.annobin_validate_api_restriction.endvalidate_api_restrictionvalidate_api_restriction.cold.10.annobin_zif_opcache_get_status.start.annobin_zif_opcache_get_status.endzif_opcache_get_status.annobin_zif_opcache_invalidate.start.annobin_zif_opcache_invalidate.endzif_opcache_invalidate.annobin_zif_opcache_is_script_cached.start.annobin_zif_opcache_is_script_cached.endzif_opcache_is_script_cached.annobin_zif_opcache_get_configuration.start.annobin_zif_opcache_get_configuration.endzif_opcache_get_configuration.annobin_zif_opcache_reset.start.annobin_zif_opcache_reset.endzif_opcache_reset.annobin_zend_accel_override_file_functions.start.annobin_zend_accel_override_file_functions.end.annobin_start_accel_module.start.annobin_start_accel_module.endaccel_module_entryaccel_functionsarginfo_opcache_nonearginfo_opcache_invalidatearginfo_opcache_compile_filearginfo_opcache_is_script_cachedarginfo_opcache_get_status.annobin_zend_persist.c.annobin_zend_persist.c_end.annobin_zend_persist.c.hot.annobin_zend_persist.c_end.hot.annobin_zend_persist.c.unlikely.annobin_zend_persist.c_end.unlikely.annobin_zend_persist.c.startup.annobin_zend_persist.c_end.startup.annobin_zend_persist.c.exit.annobin_zend_persist.c_end.exit.annobin_zend_update_parent_ce.start.annobin_zend_update_parent_ce.endzend_update_parent_ce.annobin_zend_hash_persist.start.annobin_zend_hash_persist.endzend_hash_persistuninitialized_bucket.annobin_zend_persist_property_info.start.annobin_zend_persist_property_info.endzend_persist_property_info.annobin_zend_persist_zval.part.1.start.annobin_zend_persist_zval.part.1.endzend_persist_zval.part.1zend_persist_zvalzend_persist_ast.annobin_zend_persist_zval.start.annobin_zend_persist_zval.end.annobin_zend_persist_class_entry.start.annobin_zend_persist_class_entry.endzend_persist_class_entryzend_persist_op_arrayzend_persist_class_constant.annobin_zend_persist_ast.start.annobin_zend_persist_ast.end.annobin_zend_persist_class_constant.start.annobin_zend_persist_class_constant.end.annobin_zend_persist_op_array_ex.part.3.start.annobin_zend_persist_op_array_ex.part.3.endzend_persist_op_array_ex.part.3.annobin_zend_persist_op_array.start.annobin_zend_persist_op_array.end.annobin_zend_accel_script_persist.start.annobin_zend_accel_script_persist.end.annobin_zend_accel_script_persistable.start.annobin_zend_accel_script_persistable.end.annobin_zend_persist_calc.c.annobin_zend_persist_calc.c_end.annobin_zend_persist_calc.c.hot.annobin_zend_persist_calc.c_end.hot.annobin_zend_persist_calc.c.unlikely.annobin_zend_persist_calc.c_end.unlikely.annobin_zend_persist_calc.c.startup.annobin_zend_persist_calc.c_end.startup.annobin_zend_persist_calc.c.exit.annobin_zend_persist_calc.c_end.exit.annobin_zend_persist_property_info_calc.start.annobin_zend_persist_property_info_calc.endzend_persist_property_info_calc.annobin_zend_hash_persist_calc.start.annobin_zend_hash_persist_calc.endzend_hash_persist_calc.annobin_zend_persist_zval_calc.part.0.start.annobin_zend_persist_zval_calc.part.0.endzend_persist_zval_calc.part.0zend_persist_ast_calczend_persist_zval_calc.annobin_zend_persist_zval_calc.start.annobin_zend_persist_zval_calc.end.annobin_zend_persist_class_constant_calc.start.annobin_zend_persist_class_constant_calc.endzend_persist_class_constant_calc.annobin_zend_persist_ast_calc.start.annobin_zend_persist_ast_calc.end.annobin_zend_persist_class_entry_calc.start.annobin_zend_persist_class_entry_calc.endzend_persist_class_entry_calczend_persist_op_array_calc.annobin_zend_persist_op_array_calc_ex.part.1.start.annobin_zend_persist_op_array_calc_ex.part.1.endzend_persist_op_array_calc_ex.part.1.annobin_zend_persist_op_array_calc.start.annobin_zend_persist_op_array_calc.end.annobin_zend_accel_script_persist_calc.start.annobin_zend_accel_script_persist_calc.end.annobin_zend_file_cache.c.annobin_zend_file_cache.c_end.annobin_zend_file_cache.c.hot.annobin_zend_file_cache.c_end.hot.annobin_zend_file_cache.c.unlikely.annobin_zend_file_cache.c_end.unlikely.annobin_zend_file_cache.c.startup.annobin_zend_file_cache.c_end.startup.annobin_zend_file_cache.c.exit.annobin_zend_file_cache.c_end.exit.annobin_zend_shared_alloc.c.annobin_zend_shared_alloc.c_end.annobin_zend_shared_alloc.c.hot.annobin_zend_shared_alloc.c_end.hot.annobin_zend_shared_alloc.c.unlikely.annobin_zend_shared_alloc.c_end.unlikely.annobin_zend_shared_alloc.c.startup.annobin_zend_shared_alloc.c_end.startup.annobin_zend_shared_alloc.c.exit.annobin_zend_shared_alloc.c_end.exit.annobin_copy_shared_segments.start.annobin_copy_shared_segments.endcopy_shared_segments.annobin_zend_shared_alloc_try.isra.0.start.annobin_zend_shared_alloc_try.isra.0.endzend_shared_alloc_try.isra.0g_shared_alloc_handlerg_shared_model.annobin_zend_shared_alloc_create_lock.start.annobin_zend_shared_alloc_create_lock.endlockfile_name.annobin_zend_shared_alloc_shutdown.start.annobin_zend_shared_alloc_shutdown.end.annobin_zend_shared_alloc.start.annobin_zend_shared_alloc.end.annobin_zend_shared_alloc_startup.start.annobin_zend_shared_alloc_startup.endhandler_table.annobin_zend_shared_memdup_size.start.annobin_zend_shared_memdup_size.end.annobin__zend_shared_memdup.start.annobin__zend_shared_memdup.end.annobin_zend_shared_alloc_lock.start.annobin_zend_shared_alloc_lock.end.annobin_zend_shared_alloc_unlock.start.annobin_zend_shared_alloc_unlock.end.annobin_zend_shared_alloc_safe_unlock.start.annobin_zend_shared_alloc_safe_unlock.end.annobin_zend_shared_alloc_init_xlat_table.start.annobin_zend_shared_alloc_init_xlat_table.end.annobin_zend_shared_alloc_destroy_xlat_table.start.annobin_zend_shared_alloc_destroy_xlat_table.end.annobin_zend_shared_alloc_clear_xlat_table.start.annobin_zend_shared_alloc_clear_xlat_table.end.annobin_zend_shared_alloc_register_xlat_entry.start.annobin_zend_shared_alloc_register_xlat_entry.end.annobin_zend_shared_alloc_get_xlat_entry.start.annobin_zend_shared_alloc_get_xlat_entry.end.annobin_zend_shared_alloc_get_free_memory.start.annobin_zend_shared_alloc_get_free_memory.end.annobin_zend_shared_alloc_save_state.start.annobin_zend_shared_alloc_save_state.end.annobin_zend_shared_alloc_restore_state.start.annobin_zend_shared_alloc_restore_state.end.annobin_zend_accel_get_shared_model.start.annobin_zend_accel_get_shared_model.end.annobin_zend_accel_shared_protect.start.annobin_zend_accel_shared_protect.end.annobin_zend_accel_in_shm.start.annobin_zend_accel_in_shm.end.annobin_zend_accelerator_util_funcs.c.annobin_zend_accelerator_util_funcs.c_end.annobin_zend_accelerator_util_funcs.c.hot.annobin_zend_accelerator_util_funcs.c_end.hot.annobin_zend_accelerator_util_funcs.c.unlikely.annobin_zend_accelerator_util_funcs.c_end.unlikely.annobin_zend_accelerator_util_funcs.c.startup.annobin_zend_accelerator_util_funcs.c_end.startup.annobin_zend_accelerator_util_funcs.c.exit.annobin_zend_accelerator_util_funcs.c_end.exit.annobin_is_not_internal_function.start.annobin_is_not_internal_function.endis_not_internal_function.annobin_zend_accel_destroy_zend_class.start.annobin_zend_accel_destroy_zend_class.endzend_accel_destroy_zend_classzend_accel_destroy_zend_function.annobin_zend_accel_destroy_zend_function.start.annobin_zend_accel_destroy_zend_function.end.annobin_copy_internal_function.start.annobin_copy_internal_function.endcopy_internal_function.annobin_zend_accel_class_hash_copy.isra.5.start.annobin_zend_accel_class_hash_copy.isra.5.endzend_accel_class_hash_copy.isra.5.annobin_zend_class_copy_ctor.start.annobin_zend_class_copy_ctor.endzend_class_copy_ctor.annobin_create_persistent_script.start.annobin_create_persistent_script.end.annobin_free_persistent_script.start.annobin_free_persistent_script.end.annobin_zend_accel_free_user_functions.start.annobin_zend_accel_free_user_functions.end.annobin_zend_accel_move_user_functions.start.annobin_zend_accel_move_user_functions.end.annobin_zend_accel_copy_internal_functions.start.annobin_zend_accel_copy_internal_functions.end.annobin_zend_accel_load_script.start.annobin_zend_accel_load_script.endzend_accel_load_script.cold.6.annobin_zend_adler32.start.annobin_zend_adler32.end.annobin_zend_accel_script_checksum.start.annobin_zend_accel_script_checksum.end.annobin_shared_alloc_shm.c.annobin_shared_alloc_shm.c_end.annobin_shared_alloc_shm.c.hot.annobin_shared_alloc_shm.c_end.hot.annobin_shared_alloc_shm.c.unlikely.annobin_shared_alloc_shm.c_end.unlikely.annobin_shared_alloc_shm.c.startup.annobin_shared_alloc_shm.c_end.startup.annobin_shared_alloc_shm.c.exit.annobin_shared_alloc_shm.c_end.exit.annobin_segment_type_size.start.annobin_segment_type_size.endsegment_type_size.annobin_detach_segment.start.annobin_detach_segment.enddetach_segment.annobin_create_segments.start.annobin_create_segments.endcreate_segments.annobin_shared_alloc_mmap.c.annobin_shared_alloc_mmap.c_end.annobin_shared_alloc_mmap.c.hot.annobin_shared_alloc_mmap.c_end.hot.annobin_shared_alloc_mmap.c.unlikely.annobin_shared_alloc_mmap.c_end.unlikely.annobin_shared_alloc_mmap.c.startup.annobin_shared_alloc_mmap.c_end.startup.annobin_shared_alloc_mmap.c.exit.annobin_shared_alloc_mmap.c_end.exit.annobin_shared_alloc_posix.c.annobin_shared_alloc_posix.c_end.annobin_shared_alloc_posix.c.hot.annobin_shared_alloc_posix.c_end.hot.annobin_shared_alloc_posix.c.unlikely.annobin_shared_alloc_posix.c_end.unlikely.annobin_shared_alloc_posix.c.startup.annobin_shared_alloc_posix.c_end.startup.annobin_shared_alloc_posix.c.exit.annobin_shared_alloc_posix.c_end.exit.annobin_zend_optimizer.c.annobin_zend_optimizer.c_end.annobin_zend_optimizer.c.hot.annobin_zend_optimizer.c_end.hot.annobin_zend_optimizer.c.unlikely.annobin_zend_optimizer.c_end.unlikely.annobin_zend_optimizer.c.startup.annobin_zend_optimizer.c_end.startup.annobin_zend_optimizer.c.exit.annobin_zend_optimizer.c_end.exit.annobin_zend_optimizer_zval_dtor_wrapper.start.annobin_zend_optimizer_zval_dtor_wrapper.endzend_optimizer_zval_dtor_wrapper.annobin_get_class_entry_from_op1.start.annobin_get_class_entry_from_op1.endget_class_entry_from_op1.annobin_zend_adjust_fcall_stack_size.isra.5.start.annobin_zend_adjust_fcall_stack_size.isra.5.endzend_adjust_fcall_stack_size.isra.5.annobin_zend_redo_pass_two.isra.6.start.annobin_zend_redo_pass_two.isra.6.endzend_redo_pass_two.isra.6.annobin_zend_optimize_op_array.start.annobin_zend_optimize_op_array.endzend_optimize_op_array.annobin_zend_optimizer_collect_constant.start.annobin_zend_optimizer_collect_constant.end.annobin_zend_compound_assign_to_binary_op.start.annobin_zend_compound_assign_to_binary_op.end.annobin_zend_optimizer_eval_binary_op.start.annobin_zend_optimizer_eval_binary_op.end.annobin_zend_optimizer_eval_unary_op.start.annobin_zend_optimizer_eval_unary_op.end.annobin_zend_optimizer_eval_cast.start.annobin_zend_optimizer_eval_cast.end.annobin_zend_optimizer_eval_strlen.start.annobin_zend_optimizer_eval_strlen.end.annobin_zend_optimizer_get_collected_constant.start.annobin_zend_optimizer_get_collected_constant.end.annobin_zend_optimizer_add_literal.start.annobin_zend_optimizer_add_literal.end.annobin_zend_optimizer_is_disabled_func.start.annobin_zend_optimizer_is_disabled_func.end.annobin_zend_optimizer_update_op1_const.start.annobin_zend_optimizer_update_op1_const.end.annobin_zend_optimizer_remove_live_range.start.annobin_zend_optimizer_remove_live_range.end.annobin_zend_optimizer_remove_live_range_ex.start.annobin_zend_optimizer_remove_live_range_ex.end.annobin_zend_optimizer_migrate_jump.start.annobin_zend_optimizer_migrate_jump.end.annobin_zend_optimizer_shift_jump.start.annobin_zend_optimizer_shift_jump.end.annobin_zend_optimizer_get_called_func.start.annobin_zend_optimizer_get_called_func.end.annobin_zend_optimizer_classify_function.start.annobin_zend_optimizer_classify_function.end.annobin_zend_optimizer_update_op2_const.start.annobin_zend_optimizer_update_op2_const.end.annobin_zend_optimizer_replace_by_const.start.annobin_zend_optimizer_replace_by_const.end.annobin_zend_optimize_script.start.annobin_zend_optimize_script.end.annobin_zend_optimizer_startup.start.annobin_zend_optimizer_startup.end.annobin_zend_optimizer_shutdown.start.annobin_zend_optimizer_shutdown.end.annobin_pass1_5.c.annobin_pass1_5.c_end.annobin_pass1_5.c.hot.annobin_pass1_5.c_end.hot.annobin_pass1_5.c.unlikely.annobin_pass1_5.c_end.unlikely.annobin_pass1_5.c.startup.annobin_pass1_5.c_end.startup.annobin_pass1_5.c.exit.annobin_pass1_5.c_end.exit.annobin_zend_optimizer_pass1.start.annobin_zend_optimizer_pass1.end.annobin_pass2.c.annobin_pass2.c_end.annobin_pass2.c.hot.annobin_pass2.c_end.hot.annobin_pass2.c.unlikely.annobin_pass2.c_end.unlikely.annobin_pass2.c.startup.annobin_pass2.c_end.startup.annobin_pass2.c.exit.annobin_pass2.c_end.exit.annobin_zend_optimizer_pass2.start.annobin_zend_optimizer_pass2.end.annobin_pass3.c.annobin_pass3.c_end.annobin_pass3.c.hot.annobin_pass3.c_end.hot.annobin_pass3.c.unlikely.annobin_pass3.c_end.unlikely.annobin_pass3.c.startup.annobin_pass3.c_end.startup.annobin_pass3.c.exit.annobin_pass3.c_end.exit.annobin_zend_optimizer_pass3.start.annobin_zend_optimizer_pass3.end.annobin_optimize_func_calls.c.annobin_optimize_func_calls.c_end.annobin_optimize_func_calls.c.hot.annobin_optimize_func_calls.c_end.hot.annobin_optimize_func_calls.c.unlikely.annobin_optimize_func_calls.c_end.unlikely.annobin_optimize_func_calls.c.startup.annobin_optimize_func_calls.c_end.startup.annobin_optimize_func_calls.c.exit.annobin_optimize_func_calls.c_end.exit.annobin_zend_optimize_func_calls.start.annobin_zend_optimize_func_calls.end.annobin_block_pass.c.annobin_block_pass.c_end.annobin_block_pass.c.hot.annobin_block_pass.c_end.hot.annobin_block_pass.c.unlikely.annobin_block_pass.c_end.unlikely.annobin_block_pass.c.startup.annobin_block_pass.c_end.startup.annobin_block_pass.c.exit.annobin_block_pass.c_end.exit.annobin_assemble_code_blocks.start.annobin_assemble_code_blocks.endassemble_code_blocks.annobin_zend_t_usage.isra.0.start.annobin_zend_t_usage.isra.0.endzend_t_usage.isra.0.annobin_strip_leading_nops.isra.2.start.annobin_strip_leading_nops.isra.2.endstrip_leading_nops.isra.2.annobin_zend_optimizer_get_persistent_constant.start.annobin_zend_optimizer_get_persistent_constant.end.annobin_zend_optimize_cfg.start.annobin_zend_optimize_cfg.end.annobin_optimize_temp_vars_5.c.annobin_optimize_temp_vars_5.c_end.annobin_optimize_temp_vars_5.c.hot.annobin_optimize_temp_vars_5.c_end.hot.annobin_optimize_temp_vars_5.c.unlikely.annobin_optimize_temp_vars_5.c_end.unlikely.annobin_optimize_temp_vars_5.c.startup.annobin_optimize_temp_vars_5.c_end.startup.annobin_optimize_temp_vars_5.c.exit.annobin_optimize_temp_vars_5.c_end.exit.annobin_zend_optimize_temporary_variables.start.annobin_zend_optimize_temporary_variables.end.annobin_nop_removal.c.annobin_nop_removal.c_end.annobin_nop_removal.c.hot.annobin_nop_removal.c_end.hot.annobin_nop_removal.c.unlikely.annobin_nop_removal.c_end.unlikely.annobin_nop_removal.c.startup.annobin_nop_removal.c_end.startup.annobin_nop_removal.c.exit.annobin_nop_removal.c_end.exit.annobin_zend_optimizer_nop_removal.start.annobin_zend_optimizer_nop_removal.end.annobin_compact_literals.c.annobin_compact_literals.c_end.annobin_compact_literals.c.hot.annobin_compact_literals.c_end.hot.annobin_compact_literals.c.unlikely.annobin_compact_literals.c_end.unlikely.annobin_compact_literals.c.startup.annobin_compact_literals.c_end.startup.annobin_compact_literals.c.exit.annobin_compact_literals.c_end.exit.annobin_zend_optimizer_compact_literals.start.annobin_zend_optimizer_compact_literals.end.annobin_zend_cfg.c.annobin_zend_cfg.c_end.annobin_zend_cfg.c.hot.annobin_zend_cfg.c_end.hot.annobin_zend_cfg.c.unlikely.annobin_zend_cfg.c_end.unlikely.annobin_zend_cfg.c.startup.annobin_zend_cfg.c_end.startup.annobin_zend_cfg.c.exit.annobin_zend_cfg.c_end.exit.annobin_compute_postnum_recursive.start.annobin_compute_postnum_recursive.endcompute_postnum_recursive.annobin_compare_block_level.start.annobin_compare_block_level.endcompare_block_level.annobin_swap_blocks.start.annobin_swap_blocks.endswap_blocks.annobin_zend_mark_reachable.start.annobin_zend_mark_reachable.endzend_mark_reachable.annobin_zend_mark_reachable_blocks.start.annobin_zend_mark_reachable_blocks.endzend_mark_reachable_blocks.annobin_zend_cfg_remark_reachable_blocks.start.annobin_zend_cfg_remark_reachable_blocks.end.annobin_zend_build_cfg.start.annobin_zend_build_cfg.end.annobin_zend_cfg_build_predecessors.start.annobin_zend_cfg_build_predecessors.end.annobin_zend_cfg_compute_dominators_tree.start.annobin_zend_cfg_compute_dominators_tree.end.annobin_zend_cfg_identify_loops.start.annobin_zend_cfg_identify_loops.end.annobin_zend_dfg.c.annobin_zend_dfg.c_end.annobin_zend_dfg.c.hot.annobin_zend_dfg.c_end.hot.annobin_zend_dfg.c.unlikely.annobin_zend_dfg.c_end.unlikely.annobin_zend_dfg.c.startup.annobin_zend_dfg.c_end.startup.annobin_zend_dfg.c.exit.annobin_zend_dfg.c_end.exit.annobin_zend_build_dfg.start.annobin_zend_build_dfg.end.annobin_dfa_pass.c.annobin_dfa_pass.c_end.annobin_dfa_pass.c.hot.annobin_dfa_pass.c_end.hot.annobin_dfa_pass.c.unlikely.annobin_dfa_pass.c_end.unlikely.annobin_dfa_pass.c.startup.annobin_dfa_pass.c_end.startup.annobin_dfa_pass.c.exit.annobin_dfa_pass.c_end.exit.annobin_zend_ssa_remove_nops.start.annobin_zend_ssa_remove_nops.endzend_ssa_remove_nops.annobin_zend_dfa_analyze_op_array.start.annobin_zend_dfa_analyze_op_array.end.annobin_zend_dfa_optimize_calls.start.annobin_zend_dfa_optimize_calls.end.annobin_zend_dfa_optimize_op_array.start.annobin_zend_dfa_optimize_op_array.end.annobin_zend_optimize_dfa.start.annobin_zend_optimize_dfa.end.annobin_zend_ssa.c.annobin_zend_ssa.c_end.annobin_zend_ssa.c.hot.annobin_zend_ssa.c_end.hot.annobin_zend_ssa.c.unlikely.annobin_zend_ssa.c_end.unlikely.annobin_zend_ssa.c.startup.annobin_zend_ssa.c_end.startup.annobin_zend_ssa.c.exit.annobin_zend_ssa.c_end.exit.annobin_propagate_phi_type_widening.start.annobin_propagate_phi_type_widening.endpropagate_phi_type_widening.annobin_zend_ssa_rename.start.annobin_zend_ssa_rename.endzend_ssa_rename.annobin_find_adjusted_tmp_var.isra.1.start.annobin_find_adjusted_tmp_var.isra.1.endfind_adjusted_tmp_var.isra.1.annobin_add_pi.isra.3.start.annobin_add_pi.isra.3.endadd_pi.isra.3.annobin_zend_build_ssa.start.annobin_zend_build_ssa.end.annobin_zend_ssa_compute_use_def_chains.start.annobin_zend_ssa_compute_use_def_chains.end.annobin_zend_ssa_unlink_use_chain.start.annobin_zend_ssa_unlink_use_chain.end.annobin_zend_ssa_remove_instr.start.annobin_zend_ssa_remove_instr.end.annobin_zend_ssa_remove_phi.start.annobin_zend_ssa_remove_phi.end.annobin_zend_ssa_remove_uses_of_var.start.annobin_zend_ssa_remove_uses_of_var.end.annobin_zend_ssa_remove_predecessor.start.annobin_zend_ssa_remove_predecessor.end.annobin_zend_ssa_remove_block.start.annobin_zend_ssa_remove_block.end.annobin_zend_ssa_rename_var_uses.start.annobin_zend_ssa_rename_var_uses.end.annobin_zend_inference.c.annobin_zend_inference.c_end.annobin_zend_inference.c.hot.annobin_zend_inference.c_end.hot.annobin_zend_inference.c.unlikely.annobin_zend_inference.c_end.unlikely.annobin_zend_inference.c.startup.annobin_zend_inference.c_end.startup.annobin_zend_inference.c.exit.annobin_zend_inference.c_end.exit.annobin_assign_dim_result_type.start.annobin_assign_dim_result_type.endassign_dim_result_type.annobin_zend_ssa_check_scc_var.start.annobin_zend_ssa_check_scc_var.endzend_ssa_check_scc_var.annobin_binary_op_result_type.start.annobin_binary_op_result_type.endbinary_op_result_type.annobin_can_convert_to_double.start.annobin_can_convert_to_double.endcan_convert_to_double.annobin_shift_left_overflows.start.annobin_shift_left_overflows.endshift_left_overflows.annobin_add_usages.isra.1.start.annobin_add_usages.isra.1.endadd_usages.isra.1.annobin_handle_type_narrowing.isra.8.start.annobin_handle_type_narrowing.isra.8.endhandle_type_narrowing.isra.8handle_type_narrowing.isra.8.cold.15.annobin_zend_fetch_arg_info.isra.9.start.annobin_zend_fetch_arg_info.isra.9.endzend_fetch_arg_info.isra.9.annobin_zend_ssa_find_sccs.start.annobin_zend_ssa_find_sccs.end.annobin_zend_ssa_find_false_dependencies.start.annobin_zend_ssa_find_false_dependencies.end.annobin_minOR.start.annobin_minOR.end.annobin_maxOR.start.annobin_maxOR.end.annobin_minAND.start.annobin_minAND.end.annobin_maxAND.start.annobin_maxAND.end.annobin_zend_inference_calc_binary_op_range.constprop.14.start.annobin_zend_inference_calc_binary_op_range.constprop.14.endzend_inference_calc_binary_op_range.constprop.14.annobin_minXOR.start.annobin_minXOR.end.annobin_maxXOR.start.annobin_maxXOR.end.annobin_zend_inference_calc_range.start.annobin_zend_inference_calc_range.end.annobin_zend_inference_init_range.start.annobin_zend_inference_init_range.end.annobin_zend_inference_widening_meet.start.annobin_zend_inference_widening_meet.end.annobin_zend_inference_narrowing_meet.start.annobin_zend_inference_narrowing_meet.end.annobin_zend_infer_ranges_warmup.start.annobin_zend_infer_ranges_warmup.endzend_infer_ranges_warmup.annobin_zend_ssa_range_narrowing.isra.13.start.annobin_zend_ssa_range_narrowing.isra.13.endzend_ssa_range_narrowing.isra.13.annobin_zend_infer_ranges.start.annobin_zend_infer_ranges.endzend_infer_ranges.annobin_zend_array_element_type.start.annobin_zend_array_element_type.end.annobin_zend_infer_types_ex.start.annobin_zend_infer_types_ex.end.annobin_zend_type_narrowing.start.annobin_zend_type_narrowing.endzend_type_narrowing.annobin_zend_init_func_return_info.start.annobin_zend_init_func_return_info.end.annobin_zend_func_return_info.start.annobin_zend_func_return_info.end.annobin_zend_infer_types.start.annobin_zend_infer_types.endzend_infer_types.annobin_zend_ssa_inference.start.annobin_zend_ssa_inference.end.annobin_zend_inference_check_recursive_dependencies.start.annobin_zend_inference_check_recursive_dependencies.end.annobin_zend_may_throw.start.annobin_zend_may_throw.end.annobin_zend_func_info.c.annobin_zend_func_info.c_end.annobin_zend_func_info.c.hot.annobin_zend_func_info.c_end.hot.annobin_zend_func_info.c.unlikely.annobin_zend_func_info.c_end.unlikely.annobin_zend_func_info.c.startup.annobin_zend_func_info.c_end.startup.annobin_zend_func_info.c.exit.annobin_zend_func_info.c_end.exit.annobin_zend_dechex_info.start.annobin_zend_dechex_info.endzend_dechex_info.annobin_zend_range_info.start.annobin_zend_range_info.endzend_range_info.annobin_zend_is_type_info.start.annobin_zend_is_type_info.endzend_is_type_info.annobin_zend_strlen_info.start.annobin_zend_strlen_info.endzend_strlen_info.annobin_zend_l_ss_info.start.annobin_zend_l_ss_info.endzend_l_ss_info.annobin_zend_lb_ssn_info.start.annobin_zend_lb_ssn_info.endzend_lb_ssn_info.annobin_zend_b_s_info.start.annobin_zend_b_s_info.endzend_b_s_info.annobin_zend_get_func_info.start.annobin_zend_get_func_info.end.annobin_zend_func_info_startup.start.annobin_zend_func_info_startup.endfunc_infos.annobin_zend_func_info_shutdown.start.annobin_zend_func_info_shutdown.end.annobin_zend_call_graph.c.annobin_zend_call_graph.c_end.annobin_zend_call_graph.c.hot.annobin_zend_call_graph.c_end.hot.annobin_zend_call_graph.c.unlikely.annobin_zend_call_graph.c_end.unlikely.annobin_zend_call_graph.c.startup.annobin_zend_call_graph.c_end.startup.annobin_zend_call_graph.c.exit.annobin_zend_call_graph.c_end.exit.annobin_zend_op_array_calc.start.annobin_zend_op_array_calc.endzend_op_array_calc.annobin_zend_op_array_collect.start.annobin_zend_op_array_collect.endzend_op_array_collect.annobin_zend_is_indirectly_recursive.start.annobin_zend_is_indirectly_recursive.endzend_is_indirectly_recursive.annobin_zend_analyze_recursion.start.annobin_zend_analyze_recursion.endzend_analyze_recursion.annobin_zend_foreach_op_array.start.annobin_zend_foreach_op_array.endzend_foreach_op_array.annobin_zend_analyze_calls.start.annobin_zend_analyze_calls.end.annobin_zend_build_call_graph.start.annobin_zend_build_call_graph.end.annobin_zend_build_call_map.start.annobin_zend_build_call_map.end.annobin_sccp.c.annobin_sccp.c_end.annobin_sccp.c.hot.annobin_sccp.c_end.hot.annobin_sccp.c.unlikely.annobin_sccp.c_end.unlikely.annobin_sccp.c.startup.annobin_sccp.c_end.startup.annobin_sccp.c.exit.annobin_sccp.c_end.exit.annobin_sccp_mark_feasible_successors.start.annobin_sccp_mark_feasible_successors.endsccp_mark_feasible_successors.annobin_set_value.isra.1.start.annobin_set_value.isra.1.endset_value.isra.1.annobin_join_phi_values.start.annobin_join_phi_values.endjoin_phi_values.annobin_sccp_visit_phi.start.annobin_sccp_visit_phi.endsccp_visit_phi.annobin_sccp_visit_instr.start.annobin_sccp_visit_instr.endsccp_visit_instrsccp_visit_instr.cold.23.annobin_sccp_optimize_op_array.start.annobin_sccp_optimize_op_array.end.annobin_scdf.c.annobin_scdf.c_end.annobin_scdf.c.hot.annobin_scdf.c_end.hot.annobin_scdf.c.unlikely.annobin_scdf.c_end.unlikely.annobin_scdf.c.startup.annobin_scdf.c_end.startup.annobin_scdf.c.exit.annobin_scdf.c_end.exit.annobin_scdf_mark_edge_feasible.start.annobin_scdf_mark_edge_feasible.end.annobin_scdf_init.start.annobin_scdf_init.end.annobin_scdf_solve.start.annobin_scdf_solve.end.annobin_scdf_remove_unreachable_blocks.start.annobin_scdf_remove_unreachable_blocks.end.annobin_dce.c.annobin_dce.c_end.annobin_dce.c.hot.annobin_dce.c_end.hot.annobin_dce.c.unlikely.annobin_dce.c_end.unlikely.annobin_dce.c.startup.annobin_dce.c_end.startup.annobin_dce.c.exit.annobin_dce.c_end.exit.annobin_try_remove_var_def.isra.2.part.3.start.annobin_try_remove_var_def.isra.2.part.3.endtry_remove_var_def.isra.2.part.3.annobin_dce_optimize_op_array.start.annobin_dce_optimize_op_array.end.annobin_compact_vars.c.annobin_compact_vars.c_end.annobin_compact_vars.c.hot.annobin_compact_vars.c_end.hot.annobin_compact_vars.c.unlikely.annobin_compact_vars.c_end.unlikely.annobin_compact_vars.c.startup.annobin_compact_vars.c_end.startup.annobin_compact_vars.c.exit.annobin_compact_vars.c_end.exit.annobin_zend_optimizer_compact_vars.start.annobin_zend_optimizer_compact_vars.end.annobin_zend_dump.c.annobin_zend_dump.c_end.annobin_zend_dump.c.hot.annobin_zend_dump.c_end.hot.annobin_zend_dump.c.unlikely.annobin_zend_dump.c_end.unlikely.annobin_zend_dump.c.startup.annobin_zend_dump.c_end.startup.annobin_zend_dump.c.exit.annobin_zend_dump.c_end.exit.annobin_zend_dump_class_fetch_type.start.annobin_zend_dump_class_fetch_type.endzend_dump_class_fetch_type.annobin_zend_dump_type_info.start.annobin_zend_dump_type_info.endzend_dump_type_info.annobin_zend_dump_op_array_name.start.annobin_zend_dump_op_array_name.endzend_dump_op_array_name.annobin_zend_dump_const.isra.0.start.annobin_zend_dump_const.isra.0.endzend_dump_const.isra.0.annobin_zend_dump_unused_op.isra.1.start.annobin_zend_dump_unused_op.isra.1.endzend_dump_unused_op.isra.1.annobin_zend_dump_range.start.annobin_zend_dump_range.endzend_dump_range.annobin_zend_dump_block_info.isra.5.start.annobin_zend_dump_block_info.isra.5.endzend_dump_block_info.isra.5.annobin_zend_dump_var.start.annobin_zend_dump_var.end.annobin_zend_dump_ssa_var.start.annobin_zend_dump_ssa_var.endzend_dump_ssa_var.annobin_zend_dump_op.start.annobin_zend_dump_op.endzend_dump_op.annobin_zend_dump_var_set.start.annobin_zend_dump_var_set.endzend_dump_var_set.annobin_zend_dump_op_array.start.annobin_zend_dump_op_array.end.annobin_zend_dump_dominators.start.annobin_zend_dump_dominators.end.annobin_zend_dump_variables.start.annobin_zend_dump_variables.end.annobin_zend_dump_ssa_variables.start.annobin_zend_dump_ssa_variables.end.annobin_zend_dump_dfg.start.annobin_zend_dump_dfg.end.annobin_zend_dump_phi_placement.start.annobin_zend_dump_phi_placement.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zend_shared_alloc_startupzend_inference_widening_meetzend_accel_shared_protectmaxXORzend_ssa_remove_phizend_optimizer_add_literalzend_shared_alloc_restore_statemaxANDzend_dfa_optimize_op_arrayminORzend_optimizer_classify_functionzend_shared_alloc_get_free_memoryaccelerator_shm_read_lockzps_api_failure_reasonzend_ssa_rename_var_useszend_optimizer_startupaccel_post_deactivatezend_optimizer_eval_binary_opzend_accel_move_user_functionszend_accel_invalidatepersistent_compile_filezend_alloc_shm_handlerszend_analyze_callszend_init_func_return_infozend_func_info_shutdownzend_dump_dominatorsscdf_mark_edge_feasiblezend_build_ssazend_optimize_func_callszend_inference_calc_rangezend_optimizer_update_op2_constzend_ssa_inference_zend_shared_memdupzend_compound_assign_to_binary_opzend_func_return_infozend_shared_alloc_register_xlat_entryzend_alloc_mmap_handlerszend_optimizer_compact_varscreate_persistent_scriptzend_shared_alloc_finizend_accel_hash_str_find_entryzend_optimizer_pass3zend_accel_schedule_restart_if_necessaryzend_accel_hash_updatezend_shared_alloc_shutdownlock_filezend_accel_script_checksumvalidate_timestamp_and_recordzend_optimizer_pass1zend_inference_narrowing_meetzend_accel_blacklist_loadzend_func_info_ridzend_optimize_dfazend_accel_schedule_restartzend_optimizer_update_op1_constzend_shared_alloc_create_lockzend_accel_script_persistablezend_func_info_startupminXORzend_optimizer_eval_strlenzend_array_element_typezend_accel_blacklist_applyzend_get_file_handle_timestampzend_optimizer_compact_literalsaccel_make_persistent_keyzend_accel_hash_str_findzend_optimizer_collect_constantzend_accel_copy_internal_functionszend_dump_op_arrayzend_shared_alloc_get_xlat_entryzend_optimizer_nop_removalzend_dump_varzend_dfa_optimize_callsvalidate_timestamp_and_record_exzend_accel_info__dso_handlezend_optimize_scriptzend_accel_load_scriptzend_optimizer_remove_live_rangezend_ssa_remove_uses_of_varzend_build_call_graphzend_dump_variableszend_accel_get_shared_modelzend_optimizer_migrate_jumpzend_optimizer_get_called_funczend_dump_ssa_variableszend_accel_free_user_functionszend_dump_dfgzend_adler32zend_infer_types_exzend_shared_alloc_safe_unlockzend_accel_hash_unlinkzend_cfg_build_predecessorszend_accel_hash_cleanaccel_blacklistsccp_optimize_op_arrayzend_ssa_remove_instrzend_ssa_find_sccszend_accel_in_shmzend_optimizer_is_disabled_funczend_shared_alloc_save_statezend_accel_script_persist_calczend_inference_check_recursive_dependencieszend_shared_alloc_clear_xlat_tablezend_optimize_cfgzend_accel_blacklist_initzend_optimizer_get_collected_constantaccel_shutdownmaxORzend_shared_memdup_sizezend_optimize_temporary_variableszend_ssa_compute_use_def_chainszend_accel_blacklist_shutdownzend_ssa_remove_blockscdf_remove_unreachable_blockszend_optimizer_pass2_DYNAMICzend_accel_hash_initzend_cfg_identify_loopsaccel_shared_globalssmm_shared_globalszend_accel_script_persistzend_dfa_analyze_op_arrayzend_get_func_infoscdf_solvezend_cfg_compute_dominators_treezend_ssa_unlink_use_chainscdf_initminANDzend_cfg_remark_reachable_blockszend_optimizer_eval_unary_opzend_dump_phi_placementzend_optimizer_remove_live_range_exzend_accel_errordce_optimize_op_arrayzend_accel_hash_find_entryzend_optimizer_get_persistent_constant__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_accel_startup_okzend_optimizer_shift_jumpfree_persistent_scriptzend_inference_init_rangezend_accel_blacklist_is_blacklistedzend_may_throwzend_ssa_remove_predecessoraccelerator_shm_read_unlockcheck_persistent_script_accesszend_shared_alloc_init_xlat_tablezend_optimizer_shutdownzend_build_call_mapzend_shared_alloc_destroy_xlat_tablezend_shared_alloc_lockzend_build_cfgzend_ssa_find_false_dependencieszend_optimizer_eval_castzend_build_dfgzend_shared_alloc_unlockstart_accel_moduleaccel_globalszend_accel_override_file_functionszend_optimizer_replace_by_constzend_accel_hash_findaccel_new_interned_string_php_stream_stat_pathzend_hash_index_existszend_get_resource_handlezend_ini_boolean_displayer_cbglobfree@@GLIBC_2.2.5convert_to_arrayconvert_to_long__snprintf_chk@@GLIBC_2.3.4add_assoc_zval_excompiler_globalszend_signal_globalsstrcasecmp@@GLIBC_2.2.5zend_sortlocaltime@@GLIBC_2.2.5__vfprintf_chk@@GLIBC_2.3.4__errno_location@@GLIBC_2.2.5unlink@@GLIBC_2.2.5_zval_ptr_dtorzend_parse_parameters_ITM_deregisterTMCloneTablezend_vm_set_opcode_handler_exzend_is_truezend_destroy_file_handlezend_register_ini_entries_efree_56OnUpdateStringUnemptysapi_modulezend_known_stringszend_file_handle_dtorzend_binary_op_produces_numeric_string_error_zval_get_string_func_emalloc_56zend_strndupshmdt@@GLIBC_2.2.5ap_php_snprintffcntl@@GLIBC_2.2.5_zend_hash_str_updatezend_new_interned_stringzend_dirnamegetpid@@GLIBC_2.2.5_emalloc_448_emalloc_80_edatadestroy_op_array_zend_hash_addzend_get_opcode_flags_zend_get_parameters_array_exfclose@@GLIBC_2.2.5zend_llist_del_element_estrdupOnUpdateBool_safe_emallocPHP_MD5Finalstrlen@@GLIBC_2.2.5zend_hash_index_delzend_is_auto_globalgc_remove_from_buffersapi_get_request_time__stack_chk_fail@@GLIBC_2.4zend_hash_add_empty_elementmmap@@GLIBC_2.2.5zend_extensions_op_array_persist_zval_dtor_funccompare_functionzend_hash_extendasctime@@GLIBC_2.2.5zend_unregister_ini_entriesphp_info_print_table_rowzend_str_tolowerzend_get_constant_stradd_assoc_double_exget_binary_opzend_hash_del_bucketmodule_registry_emalloc_32_emalloc_largefputs@@GLIBC_2.2.5add_next_index_stringl_zend_hash_initadd_assoc_string_exmemset@@GLIBC_2.2.5zend_get_call_op_zend_hash_str_addOnUpdateStringfscanf@@GLIBC_2.2.5getcwd@@GLIBC_2.2.5zend_extensionsrealpath_cache_cleanzend_message_dispatcherzend_interned_strings_set_permanent_storage_copy_handlerzend_set_compiled_filenameexpand_filepath_ex_zend_hash_add_new_emalloc_112zend_get_opcode_namezend_ce_generatorphp_pcre_execfputc@@GLIBC_2.2.5_zend_hash_index_update_erealloczend_hash_index_findmemchr@@GLIBC_2.2.5_zend_hash_index_add_newzend_array_destroymemcmp@@GLIBC_2.2.5fgets@@GLIBC_2.2.5zend_hash_existszend_extensions_op_array_persist_calc_setjmp@@GLIBC_2.2.5calloc@@GLIBC_2.2.5add_assoc_bool_exexpand_filepathstrcmp@@GLIBC_2.2.5php_pcre_freephp_stream_locate_url_wrapperzend_mangle_property_nameget_unary_op__memcpy_chk@@GLIBC_2.3.4zend_register_long_constant__gmon_start__pcre_globalsstrtol@@GLIBC_2.2.5php_info_print_table_endzend_dval_to_lval_slowmemcpy@@GLIBC_2.14display_ini_entriesconvert_scalar_to_numberzend_hash_destroykill@@GLIBC_2.2.5fileno@@GLIBC_2.2.5OnUpdateLongzend_compile_file__xstat@@GLIBC_2.2.5_zend_bailout_emalloc_16__zend_mallocincrement_functionmalloc@@GLIBC_2.2.5strncasecmp@@GLIBC_2.2.5fflush@@GLIBC_2.2.5_zval_get_long_funczend_hash_str_findzend_extension_entry__fxstat@@GLIBC_2.2.5mkstemp@@GLIBC_2.2.5add_assoc_str_exzend_vm_set_opcode_handlerphp_pcre_compile_zend_hash_next_index_insertdecrement_functionsapi_globals_is_numeric_string_exrealloc@@GLIBC_2.2.5zend_interned_strings_set_request_storage_handler__bss_start_array_initzend_interned_string_find_permanentmunmap@@GLIBC_2.2.5_convert_to_string_efree_zval_get_double_funcfchmod@@GLIBC_2.2.5core_globalstsrm_realpathmadvise@@GLIBC_2.2.5instanceof_functionmemmove@@GLIBC_2.2.5zif_display_disabled_functionzend_hash_cleanzend_string_tolowerzend_get_object_type_zend_handle_numeric_str_exzend_binary_strcasecmpmprotect@@GLIBC_2.2.5access@@GLIBC_2.2.5shmctl@@GLIBC_2.2.5fopen@@GLIBC_2.2.5zend_is_smart_branchzend_signal_handler_unblockshmat@@GLIBC_2.2.5PHP_MD5Updateshmget@@GLIBC_2.2.5zend_errorPHP_MD5Initzend_hash_applyextension_version_info_zend_hash_index_addglob@@GLIBC_2.27zend_empty_stringexit@@GLIBC_2.2.5fwrite@@GLIBC_2.2.5__fprintf_chk@@GLIBC_2.3.4executor_globals_zval_copy_ctor_funcadd_assoc_long_ex_ITM_registerTMCloneTableadd_assoc_stringl_exphp_info_print_table_startzend_function_dtorzend_hash_apply_with_argumentzend_get_executed_filename_exstrerror@@GLIBC_2.2.5zend_hash_func_emalloc_24zend_is_identical__cxa_finalize@@GLIBC_2.2.5zend_hash_findzend_startup_modulestrstr@@GLIBC_2.2.5_emalloc_224zend_one_char_stringzend_do_delayed_early_binding_zend_hash_updateusleep@@GLIBC_2.2.5stderr@@GLIBC_2.2.5.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``88 @ Ho&&Uo((`d((inBppx@@s`` ~PP 00z66 66l LLT T> && & \ w&wy&y&  &X 0- xgLl` @X#PK! ppmodules/pdo_mysql.sonuȯELF>@@8 @__ jj j  kk k 888$$^^^ Std^^^ PtdWWWQtdRtdjj j 00GNUu(m? }<@ <?BE| pqXO" C!jO47lnsM H;p :]` T1S, UlF"nq q  " uq __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizephp_info_print_table_startphp_info_print_table_headermysqlnd_get_client_infophp_info_print_table_rowphp_info_print_table_enddisplay_ini_entriesphp_pdo_unregister_driverzend_unregister_ini_entrieszend_register_ini_entriesphp_pdo_get_dbh_cezend_declare_class_constant_longmysqlnd_reverse_api_register_apiphp_pdo_register_driverinstanceof_functionphp_error_docref0get_moduleOnUpdateStringUnempty_efreeadd_next_index_longadd_next_index_stringphp_pdo_int64_to_strstrlen_zval_get_long_func_safe_emalloc__strcpy_chk_estrdupphp_pdo_get_exceptionzend_throw_exception_exzend_hash_index_findphp_pdo_parse_data_source__zend_callocmysqlnd_connection_init_ecallocstrtolmysqlnd_connection_connect_zval_get_string_func__stack_chk_failmemcpypdo_parse_params_array_initadd_assoc_string_exadd_assoc_long_exadd_assoc_zval_exmysqlnd_allocatorpdo_raise_impl_errorphp_file_le_pstreamphp_file_le_streamzend_fetch_resource2_ex_php_stream_copy_to_mem_zval_ptr_dtorzend_empty_stringzend_strpprintfexecutor_globalslibc.so.6_edata__bss_startpdo_mysql.soGLIBC_2.3.4GLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64dti ii ui j j j j k wN k {N`k Nxk q k No p p k p VN(p @O0p  8p ` Pp  Xp `Nhp q pp p gNp p p "p ZNp )p #p :p 9p P&q :q "q 0#q $ q $(q  $0q 78q `#`q Khq PApq Fxq 0Jq `=q Hq Cq ?q >hk o o o o 2o 4o 6o :n n n  n (n 0n 8n  @n  Hn  Pn  Xn  `n hn pn xn n n n n n n n n n n n n n  n !n "n #o $o %o &o ' o ((o )0o *8o +@o ,Ho -Po .Xo /`o 0ho 1po 3xo 5o 7o 8o 9o :o ;HHqW HtH5U %U hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3%MR D%ER D%=R D%5R D%-R D%%R D%R D%R D% R D%R D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%Q D%}Q D%uQ D%mQ D%eQ D%]Q D%UQ D%MQ D%EQ D%=Q D%5Q D%-Q D%%Q D%Q D%Q D% Q D%Q D%P D%P D%P D%P D%P D%P D%P D%P D%P D%P DH/11;HH/111dH=R HzR H9tHfP Ht H=QR H5JR H)HHH?HHtHMP HtfD= R u+UH=*P Ht H=K dQ ]wH@SHH,H5,112H5,H1\H[ff.SH=TP M1[fHH=J lWH5f,Hn9H5f,HPH5`,H2H5Z,HH5P,HH5J,HH5B,HH5<,HgH51,H~IH5',H`+H5,HB H5,H$H5 ,HH5 ,H!H5j,HH=SN nH=WN H^ff.St 1H[fDHPHHHztHHXH-HCxH;L 6HCHH[HM @HHG11ҾHH8HXHff.HHG111HH8HXHÐHHGHH8HXPhHDUSHHoHtIHH}Ht HG1PC H} Htt4C HuLHCH1[]+C Htff.USHH_HHtH^H(s uH[]fDHH=HsHH[]DUHSHHGHH8HXH4HHHEHH[]ff.UHSHHz~HH@H~0HHHtX1H[]DHHuHUB Ɖ@rH[]H0xHUH=@B ȈBH[]ÐHEp @pH[]f.HEp @pH[]f.E @8 6@ ЈE HEHH8HXH[]AVDAU%@IATIUHSLwLAFuuuqLLHEIHpH:LHXPHHE'HHUHHH D'HHUHHH D[]A\A]A^A EuLBLHEIHpH:LHXPHHENHE@'HHHoAWAAVAUIATUSHLwHLfHnxI\$(MI|$@HHGHT$HT$AD$4H{HD{HC AU == aIH8HXHUHHCMIH8HXHHfDHo8I^E1IHT$H8HXHT$H{D{C HH7AE u:C HC#0E0000fEH1[]A\A]A^A_ÐfH=y&!LHCM!I|$@HHGHHI}Ds t3HD[]A\A]A^A_f.H='tHLcpDEHHMH'1Ds ff.fAWAVAUIATIUSHdH%(H$1H^'HD$8HD$0HQ'HD$HH'HD$PHE'HD$`H4'HD$hH2'HD$xH+'H$H!'H$H|G D$@HD$XD$pDŽ$H$DŽ$Ht.I}`HtxHHu AAIt$0I|$(H\$0H(AD$ cHAt$ E11HE wHEHUIl$ UM:I}Ht xHI}HT$ z1Ht x1HI}HT$(AMHtxL8ABD}I}AA D}AA Htx"L8ADI}E ЈEHtxL8AEAI}AA D}1HtxqH8@EI} ЈE]Htx.HDHDEI}0HtxqHDHDEHE1HT$ H8HX(nHEHT$(H8HX((I}HH^xL8AGADH{HD$(H8HT$(HX(HT$8Ht&HEH8HX((bHD$hH$Ll$PH$H. 12L|$hD$Mt!L H5'#E1c1Mt L4IL$E1HtHωt$HL$t$HL$AHIT$MjAVAWD$(PVHt$0H}H0JHAt$ @AD$ ML-B AM,$HAD$ HkxCu?HH9uM,$DH$dH3 %(Hĸ[]A\A]A^A_fDH{D H!1L E1L-A fDID$@HH8HX5DHL$HAA@HHHHH=@f.HAA&@HAA@HhH#HXIHtFHEIWH8HX(IAWuA/uL0I}BHt5xIHHt#HE1ҾH8HX(I}H$Ht!xHH$@u I}H $HD$HL$Ht/xHHHD$H Ht$@u fI}rHD$Ht x1HHD$@uDI}:IHt"xL8AGuAf.I}IHxu1LACA fL<$D$ HIHD$H D$L HEH8HXLxMMKHD$1Ht$MMGLDHHHHDHFHHEH$HhL\$HpAH $L\$QuD$fDHL$HtQu$tDHL$HtQu$DMtAWuA/Mt+ASu!A+uL:Zf.I}bHtmxuL8AGuAHoIHtGHEIW#H8HX(GAWuA/uLI}HxHHuH%@@A ]f.H1LDHd1LDH|$uHD$L HEE1H8HXLxDAGuA/uL fH1LJ;H M_HEH8HXLx2L$PHL$L$LLbL$L$WHDL$s%HL$&L$-HeIH|$SHD$H|$?HD$H $HD$|H<$#H$HL$1AL$H1LAWA/LlHk1LhH|$L$vL$H<$L\$_L\$H|$KL$=3DyE1bAUATUSHHdH%(HD$1HGHqH~|HuCHHHpBfHL$dH3 %( H[]A\A]ÐH@CHHtH@B<HH%H@Ht@H6H~YHGHuqHHH8HX3H$H@<%C @Hu#G BHfD1fHH8HXHIHx IHLLHHHEH}HELeVBD%H+C\@@BH:f.HH8HX[1G@HT1Hff.ATIUSH_HH8HXPHH8HXHHu3pHH8HXP@uHHCAEt*H{@HGtH{@HGP HtWHEHx@HGHtHEPH[]A\A]@H}0HHh11f.AUATUSH(LodH%(HD$1I}HcGHH9sH1IHH1LHI]HK8Ht H5H@Cl'9KKxwAH5'HcH>H f H5HKxwH#u}H5HlLH5vHHKHH H5ZHHD_1HT$dH3%(CH([]A\A]fDH5HDH5 LClH5 LClH5 LuClH5 L[fDH5K LACldfH @H @H y @H ^ t@H ^ d@H t T@H D@H r 4@H G $@H ? @H 8 @H @H @H ( @H  @H  @H @H @H @H t@H d@H T@H D@H { 4@H  DUHSHH_dH%(HD$1H{@Ht>HGHt$Ph1|$HT$dH3%(H[]@HCHH{HtHc( PXHCHPPHHCHCtHHC DH@ Ht?xdu9HHH8HXtH}0H H1Bf0ExHY00fU|$fDAVAUATUSH_LC@MNLtCH9Cp|FI< uHLiVHIHAMtzL< u I$HP@<wcH @HcH>fHV Hx HcKHH9|GxHY093fG|1[]A\A]A^CpH}0H H H01@I@It$ LLǹPxH{@It$ HGPxH{@It$ HGPxsH{@It$ HGPxTH{@It$ HGPx5 ADH5L6H1HHLHHt&ImE<%AEAD$lH% H(f.AWAVAUATUSHHoH}W19~H_H;tH[]A\A]A^A_~H|$E1DhPH4$I} HH4$LIHI~IIFMnCD.L3HEBD pHCHEJD @HCH}@IH CHD$D9xAO$HEHUILHpBTHPH1H51HH1[]A\A]A^A_ff.@UHSHH_HCHt1HHCH{8HtHE0@ upkHC8H{@HtHG1P`HC@}(HE H# HH8t4H{@HH[]Df@t>HHH8HXP@uHHH8HXP8HuGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1@L GA$3p1113LGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113"W=GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY"GA+GLIBCXX_ASSERTIONS GA*FORTIFY"LGA+GLIBCXX_ASSERTIONS  "/ )H )e  ) ) ) ) ) D k    R  R R  ~  ` 5 ~ Y r"{ !`k p  r" " "`" 9I "c "{k ` " W= ) ) ) )@ )` ) ) ) " %# "5 %#? _#b 0#/x _# # `#+ # $# #7 $a {$ $[ {$ $ $E  $2 H&W $xo H& M' P& M' ) )- 7S )o lp xz 7 9 7 9 :  90  :R  :r  :%  :  W=  :w  `=  L  )<  )_  )  )  )  )  )  )9  `=_  >  `=  >  >  >  ><  ?i  >  ?  IA  ?  IA  B@  PAW  B~  F  C  F  G F* G? &Jf H& &J qK 0JA qK L( KM< 0> `Q gq vj  j ^p  Lj q  @O  P'C1k :p QWdq pm `q X+ @8` 0` @ `   LLWX^j j j k m p q q` -CSi~q 1Ef| ,EXl*q   " *3Mq Yel 6J"f.annobin_pdo_mysql.c.annobin_pdo_mysql.c_end.annobin_pdo_mysql.c.hot.annobin_pdo_mysql.c_end.hot.annobin_pdo_mysql.c.unlikely.annobin_pdo_mysql.c_end.unlikely.annobin_pdo_mysql.c.startup.annobin_pdo_mysql.c_end.startup.annobin_pdo_mysql.c.exit.annobin_pdo_mysql.c_end.exit.annobin_zm_globals_ctor_pdo_mysql.start.annobin_zm_globals_ctor_pdo_mysql.endzm_globals_ctor_pdo_mysql.annobin_zm_info_pdo_mysql.start.annobin_zm_info_pdo_mysql.endzm_info_pdo_mysql.annobin_zm_shutdown_pdo_mysql.start.annobin_zm_shutdown_pdo_mysql.endzm_shutdown_pdo_mysql.annobin_zm_startup_pdo_mysql.start.annobin_zm_startup_pdo_mysql.endzm_startup_pdo_mysqlpdo_mysql_reverse_api.annobin_pdo_mysql_convert_zv_to_mysqlnd.start.annobin_pdo_mysql_convert_zv_to_mysqlnd.endpdo_mysql_convert_zv_to_mysqlndpdo_mysql_convert_zv_to_mysqlnd.cold.1.annobin_get_module.start.annobin_get_module.endpdo_mysql_deps.annobin_mysql_driver.c.annobin_mysql_driver.c_end.annobin_mysql_driver.c.hot.annobin_mysql_driver.c_end.hot.annobin_mysql_driver.c.unlikely.annobin_mysql_driver.c_end.unlikely.annobin_mysql_driver.c.startup.annobin_mysql_driver.c_end.startup.annobin_mysql_driver.c.exit.annobin_mysql_driver.c_end.exit.annobin_mysql_handle_commit.start.annobin_mysql_handle_commit.endmysql_handle_commit.annobin_mysql_handle_rollback.start.annobin_mysql_handle_rollback.endmysql_handle_rollback.annobin_pdo_mysql_check_liveness.start.annobin_pdo_mysql_check_liveness.endpdo_mysql_check_liveness.annobin_mysql_handle_closer.start.annobin_mysql_handle_closer.endmysql_handle_closer.annobin_pdo_mysql_fetch_error_func.start.annobin_pdo_mysql_fetch_error_func.endpdo_mysql_fetch_error_func.annobin_pdo_mysql_last_insert_id.start.annobin_pdo_mysql_last_insert_id.endpdo_mysql_last_insert_id.annobin_pdo_mysql_set_attribute.start.annobin_pdo_mysql_set_attribute.endpdo_mysql_set_attribute.annobin_mysql_handle_quoter.start.annobin_mysql_handle_quoter.endmysql_handle_quoter.annobin__pdo_mysql_error.start.annobin__pdo_mysql_error.end.annobin_pdo_mysql_handle_factory.start.annobin_pdo_mysql_handle_factory.endpdo_mysql_handle_factorymysql_methods.annobin_pdo_mysql_get_attribute.start.annobin_pdo_mysql_get_attribute.endpdo_mysql_get_attribute.annobin_mysql_handle_doer.start.annobin_mysql_handle_doer.endmysql_handle_doer.annobin_mysql_handle_begin.start.annobin_mysql_handle_begin.endmysql_handle_begin.annobin_mysql_handle_preparer.start.annobin_mysql_handle_preparer.endmysql_handle_preparer.annobin_mysql_statement.c.annobin_mysql_statement.c_end.annobin_mysql_statement.c.hot.annobin_mysql_statement.c_end.hot.annobin_mysql_statement.c.unlikely.annobin_mysql_statement.c_end.unlikely.annobin_mysql_statement.c.startup.annobin_mysql_statement.c_end.startup.annobin_mysql_statement.c.exit.annobin_mysql_statement.c_end.exit.annobin_pdo_mysql_stmt_get_col.start.annobin_pdo_mysql_stmt_get_col.endpdo_mysql_stmt_get_col.annobin_pdo_mysql_stmt_cursor_closer.start.annobin_pdo_mysql_stmt_cursor_closer.endpdo_mysql_stmt_cursor_closer.annobin_pdo_mysql_fill_stmt_from_result.start.annobin_pdo_mysql_fill_stmt_from_result.endpdo_mysql_fill_stmt_from_result.annobin_pdo_mysql_stmt_next_rowset.start.annobin_pdo_mysql_stmt_next_rowset.endpdo_mysql_stmt_next_rowset.annobin_pdo_mysql_stmt_execute.start.annobin_pdo_mysql_stmt_execute.endpdo_mysql_stmt_execute.annobin_pdo_mysql_stmt_col_meta.start.annobin_pdo_mysql_stmt_col_meta.endpdo_mysql_stmt_col_meta.annobin_pdo_mysql_stmt_fetch.start.annobin_pdo_mysql_stmt_fetch.endpdo_mysql_stmt_fetch.annobin_pdo_mysql_stmt_param_hook.start.annobin_pdo_mysql_stmt_param_hook.endpdo_mysql_stmt_param_hook.annobin_pdo_mysql_stmt_describe.start.annobin_pdo_mysql_stmt_describe.endpdo_mysql_stmt_describe.annobin_pdo_mysql_stmt_dtor.start.annobin_pdo_mysql_stmt_dtor.endpdo_mysql_stmt_dtorderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__pdo_mysql_driver_fini__dso_handlepdo_mysql_globalspdo_mysql_functions_pdo_mysql_error_DYNAMICpdo_mysql_module_entry__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_mysql_stmt_methodspdo_parse_paramsphp_pdo_unregister_driverfree@@GLIBC_2.2.5add_assoc_zval_ex_zval_ptr_dtor_ITM_deregisterTMCloneTablezend_register_ini_entriesOnUpdateStringUnemptyzend_strpprintf_zval_get_string_funcpdo_raise_impl_error_edata_estrdup_safe_emallocmysqlnd_get_client_infostrlen@@GLIBC_2.2.5__stack_chk_fail@@GLIBC_2.4zend_unregister_ini_entriesphp_info_print_table_rowmysqlnd_connection_initadd_assoc_string_exmysqlnd_reverse_api_register_apiphp_pdo_get_exceptionzend_hash_index_findzend_fetch_resource2_exmysqlnd_connection_connectmysqlnd_allocatorzend_declare_class_constant_long__gmon_start__strtol@@GLIBC_2.2.5php_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entrieszend_throw_exception_exphp_file_le_stream_zval_get_long_funcphp_info_print_table_header_php_stream_copy_to_memphp_pdo_register_driverphp_pdo_int64_to_strphp_pdo_get_dbh_ceget_module_ecalloc__strcpy_chk@@GLIBC_2.3.4__bss_start_array_init_efreeinstanceof_function__zend_callocadd_next_index_stringzend_empty_stringphp_file_le_pstreamexecutor_globalsadd_assoc_long_ex_ITM_registerTMCloneTableadd_next_index_longphp_info_print_table_startstrdup@@GLIBC_2.2.5__cxa_finalize@@GLIBC_2.2.5php_pdo_parse_data_source.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``48 @Ho Uo00PdnB``x@@s``P~@-LL LL WWXX^^ j jj jj j k km mp p q q0q- q`qlXv Hȡ#PK!]modules/mysqlnd.sonuȯELF>@8@8 @ ##(\u ``#`#888$$ Std Ptdp)p)p)llQtdRtd##MMGNU9;AQ1@Cz `{ aPL` qXprHX8LA8B (JS z{|}[; u-ubwF$ei J< x]&6'Q;Sq^{Θ/}2QL>;j8#ްP  u𗤐6pq0uwlݴ9ӥK.TBe>ʙm4SviV}739Rưa!׎4  #0 `@#2  _ @1x@#   7 C  P# # @#P| $     d3 `B; ]  3* 1  "`#0  }  |)U @= C2 Ch# 0W#0  PEC v$+@## #8V  @~l  }|`# C ( !0#L   %#w [A `e#  ` __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizemysqlnd_allocatormysqlnd_global_statsmysqlnd_globalszend_llist_cleanstrlen__stack_chk_failmysqlnd_plugin_findsmart_str_ereallocphp_error_docref0mysqlnd_find_charset_namezend_hash_destroystrtollmysqlnd_stats_values_namesmysqlnd_fill_stats_hashmysqlnd_local_infile_default_php_stream_cast__fdelt_chkphp_strlcpyzend_llist_add_elementstrncasecmp_emallocmemcpy_zend_hash_str_update_zval_ptr_dtor_zend_hash_init__zend_malloc_efreezend_hash_str_delzend_hash_cleangetpidmysqlnd_cset_escape_slashesmysqlnd_cset_escape_quotesmysqlnd_mysqlnd_upsert_status_methodsmysqlnd_error_info_initmysqlnd_plugin_methods_xetterszend_llist_initmysqlnd_error_info_free_contentsmysqlnd_pfc_freemysqlnd_vio_freemysqlnd_protocol_payload_decoder_factory_freemysqlnd_stats_endmysqlnd_connection_state_initmysqlnd_old_escape_stringmysqlnd_get_client_infomysqlnd_get_client_versionmysqlnd_field_type_name_ecallocmysqlnd_pollselect_php_emit_fd_setsize_warning__errno_locationstrerrormysqlnd_connection_initmysqlnd_mysqlnd_object_factory_methodsmysqlnd_connection_connectmysqlnd_mysqlnd_conn_methodsmysqlnd_mysqlnd_conn_data_methodsmysqlnd_result_initmysqlnd_mysqlnd_error_info_methodsmysqlnd_out_of_memorymysqlnd_out_of_syncmysqlnd_server_gonezend_vspprintfzend_memory_usage__zend_realloc__zend_callocmysqlnd_debug_std_no_trace_funcsmysqlnd_read_header_namemysqlnd_read_body_namemysqlnd_find_charset_nrstrcasecmpmysqlnd_plugin_register_exexecutor_globalsmysqlnd_command_to_textzend_error_estrdupzend_empty_string__memcpy_chkzend_one_char_stringphp_sprintfzend_strtodmysqlnd_protocol_payload_decoder_factory_initmysqlnd_mysqlnd_protocol_payload_decoder_factory_methodsmysqlnd_empty_stringcore_globalsphp_check_open_basedir_ex_php_stream_open_wrapper_exap_php_snprintf_php_stream_free_php_stream_readmysqlnd_reverse_api_initmysqlnd_reverse_api_endmysqlnd_reverse_api_get_api_listmysqlnd_reverse_api_register_api_zend_hash_str_addzval_to_mysqlnd_php_stream_writephp_stream_context_allocphp_stream_context_set_optionphp_stream_context_setphp_stream_xport_crypto_setupphp_stream_xport_crypto_enable_php_stream_set_option_php_stream_xport_createzend_hash_str_findzend_hash_index_delsetsockoptmysqlnd_vio_initmysqlnd_mysqlnd_vio_methodsmysqlnd_create_read_bufferuncompressmysqlnd_pfc_initmysqlnd_mysqlnd_protocol_packet_frame_codec_methods_array_initadd_assoc_string_exmysqlnd_stats_initmysqlnd_stats_set_triggermysqlnd_stats_reset_triggersmemset_mysqlnd_get_client_statsmysqlnd_plugin_countmysqlnd_library_endmysqlnd_library_initmysqlnd_mysqlnd_res_methodsmysqlnd_mysqlnd_result_unbuffered_methodsmysqlnd_mysqlnd_result_buffered_methodsmysqlnd_plugin_area_getterszend_strndupBIO_new_mem_bufPEM_read_bio_RSA_PUBKEYBIO_freeRSA_sizeRSA_public_encrypt_php_stream_copy_to_memphp_mysqlnd_scramblePHP_SHA1InitPHP_SHA1UpdatePHP_SHA1Final_zval_dtor_funczend_hash_internal_pointer_reset_exzend_hash_move_forward_exzend_hash_get_current_data_ex_zend_hash_update_zend_hash_next_index_insert_zend_hash_index_updateexitmysqlnd_mempool_destroyadd_index_zval_convert_to_stringmysqlnd_result_unbuffered_initmysqlnd_mempool_createmysqlnd_result_buffered_zval_initmysqlnd_result_buffered_c_initmysqlnd_result_meta_init_zend_handle_numeric_str_exmysqlnd_result_metadata_get_methods_mysqlnd_plugin_get_plugin_result_metadata_datazend_stack_destroyzend_stack_countzend_stack_pushzend_hash_str_existszend_stack_topzend_stack_del_top_emalloc_112gettimeofdaylocaltimezend_hash_str_add_empty_element_estrndupstrtolmysqlnd_debug_initzend_stack_initmysqlnd_debugzend_hash_applymysqlnd_plugin_registermysqlnd_plugin_apply_with_argumentzend_unregister_ini_entrieszend_register_ini_entriesphp_info_print_table_startphp_info_print_table_headerphp_info_print_table_rowphp_info_print_table_endmysqlnd_minfo_print_hashget_moduleOnUpdateBoolzend_ini_boolean_displayer_cbOnUpdateStringOnUpdateLongmysqlnd_mysqlnd_stmt_free_parameter_bind_pubmysqlnd_mysqlnd_stmt_free_result_bind_pubphp_gcvtconvert_to_doubleconvert_to_longlibc.so.6_edata__bss_startmysqlnd.soGLIBC_2.14GLIBC_2.3.4GLIBC_2.15GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libargon2/lib64:/opt/cpanel/ea-php72/root/usr/lib64:/opt/cpanel/ea-libzip/lib64ti ii ui #@#####P#1(#!0#@@#w H#aP#a`#Ph#Ux#w #e#k#w У#|أ##w ## #w @#H#X#w x###w ##Ȥ#w ###w  #(#8#w X#`#p#w ##$#w #c#hȥ#5Х#:#w #`c#Pc#K#R#w 8#d@#dP#w p#mx#t#w ###w Ȧ#0bЦ#g###w # #0#w P#X#h#w ###w #b#b#ȧ#ا#w ###w 0# 8#$H#w P#0cX#bh#3p#:#w ##L#w ب##^#w #o#x(#w H#P#`#h# gp# `####c#pc##Щ#w ###w (#0# @#w `#h#$x#w #8#>#w Ъ#Oت#V#w #O#h #w @#{H#X#w x###w ##ȫ#w ###w #Pb#g #(#8#w X#`#Lp#w ###w Ȭ#OЬ##w ###w 8#@#P#w p#$x#,##`g#`#$#?#ȭ#`gЭ#`##K#w # #V0#w P#X#hh#w #z##w #zȮ#خ#w #z##w 0#z8#H#w h#zp##w ###w د####c#0i## (#0#c8#0iH#P#`#0h#cp#0i##A#w #L#Rа#cذ#d#c#L#r#c#d#c(#0#|@#0H#cP#0i`#oh#x#w ###w б#ر##w #{# #w @#H#X#w x#P##w ##Ȳ#w #K##w  #|(#8#w X#`#p#w ###w ȳ#г##w ###w 8#3@#P#w p#Ox##w #e#&#w #8#0#w # #:0#w P#X#Ch#p# gx# `#!#L#w #a#a#ȵ#Uص#w #0b#g##_#w #b #b0# 8#jH#w P#0cX#bh#5p#r#w #`c#Pc#m#{#w ض####c#pc##(#w 0#c8#hH#P#`#w ###w ##з#w ###w #b#a(#0#@#w H#bP#a`#h#x#w #Pb#g###w #Pb#gи#ظ##w ## #w (#c0#pc@#H# X#w `#ch#pcx##2#w #c#pc##Bȹ#w й#cع#pc##S#w #c#pc #(#e8#w @#cH#pcX#`#tp#w x#c#pc###w #c#pcȺ#к##w #c#pc###w  #c(#pc8#@#P#w X#c`#pcp#x##w #c#pc###w Ȼ#cл#pc###w #c#pc# #0#w 8#c@#pcP#X#h#w p#cx#pc###w #c#pc#ȼ##ؼ#w #c#pc##5#w #c #pc0#8#GH#w P#cX#pch#p#W#w #c#pc##g#w #cȽ#pcؽ##x#w #c#pc##(#w 0#c8#pcH#LP#`#ch#dp#c#L##c#d#c#L#о#cؾ#d#c#L##c#d#c(#L0#@#cH#dP#c`#Lh#x#c#d#c#L# #c#d#cп#Lؿ##c#d#c#L#, #c(#d0#c@#LH#=X#c`#dh#cx#L#N#c#d#c#L#]#c#d#c#L#m#c#d#c #L(#8#c@#dH#cX#L`#p#cx#d#c#L##c#d#c#L##c#d#c#L##c #d(#c8#L@#P#cX#d`#cp#Lx##c#d#c#L##c#d#c#L# #c#d#c#L #0#c8#d@#cP#LX#2h#cp#dx#c##F#w # g# `##V#w # g# `##h#w # g # `0#8#xH#w P# gX# `h#p##w # g# `###w # g# `###w # g# `##(#w 0# g8# `H#P#`#w h# gp# `###w # g# `###w # g# `###w # g# `(#0#@#w H# gP# ``#h#x#w # g# `##*#w # g# `##;#w # g# `##I #w (# g0# `@#H#YX#w `# gh# `x##k#w # g# `##}#w # g# `###w # g# ` #(#8#w @# gH# `X#`#p#w x# g# `###w # g# `#$##w #`g#`#$##w  #`g(#`8#$@#P#w X#`g`#`p#$x##w #`g#`#$#$#w #`g#`#$#9#w #`g#`#$ #K0#w 8#`g@#`P#$X#_h#w p#`gx#`#$#r#w #`g#`#$##w #`g#`#$##w #`g #`0#$8#H#w P#`gX#`h#$p##w #`g#`#$##w #`g#`#$##w #`g#`#$#(#w 0#`g8#`H#$P#`#w h#`gp#`#$##w #`g#`#$#0#w #`g#`#$#E#w #`g#`(#$0#X@#w H#`gP#``#$h#kx#w #`g#`#$##w #`g#`#$##w #`g#`## #w (#i0#i@#H#X#w `#ih#ix###w #`g#`#$##w #`g#`#$##w #`g#` #$(#8#w @#`gH#`X#$`#%p#w x#`g#`#$#;#w #`g#`#$#Q#w #`g#`#$#g#w  #`g(#`8#$@#}P#w X#`g`#`p#$x##w #`g#`#$##w #`g#`#$##w #`g#`#$ #0#w 8#`g@#`P#$X#h#w p#`gx#`#$##w #`g#`#$##w #`g#`#$#-#w #`g #`0#$8#HH#w P#`gX#`h#$p#^#w #`g#`#$#t#w #`g#`#$##w #`g#`#$#(#w 0#`g8#`H#$P#`#w h#`gp#`#$##w #`g#`#$##w #`g#`#$##w #`g#`(#$0#@#w H#`gP#``#$h#$x#w #`g#`#$#:#w #`g#`#$#P#w #`g#`#$#f #w (#`g0#`@#$H#|X#w `#`gh#`x#$##w #`g#`#$##w #`g#`#$##w #`g#` #$(#8#w @#`gH#`X#$`#p#w x#`g#`#$##w #`g#`#$##w #`g#`#$#,#w  #`g(#`8#$@#GP#w X#`g`#`p#$x#]#w #`g#`#$#s#w #`g#`#$##w #`g#`#$ #0#w 8#`g@#`P#$X#h#w p#`gx#`#$##w #`g#`#$##w #`g#`@#|H#P#X#`#h#p#x#############'#2#>#M#Z#g#{## #(#0#8#H#w `# p# #" #/ #@ #U #k # #### # 0# @# P# `# p#H# #p##4#0#G#U#d#t# #q0#@#P#`#p##### ###@#h##' #<0#M@#aP#q`#p#########$#3#B #S0#n@#P#`#p##### ##1#A#R#c#u #0#@#P#`#p#####$#4#C#[#r## #0#@#P# `#$p#>#V#n###### # #< #U0#o@#P#`#p####-#H#d#~#### #0#@# P#:`#Sp#q######### # ##0#2@#CP#O`#`p#j#s#|######## #0#*@#9P#M`#\p##g#w #%#1'#H(#%(#>H#&p#f#&#& #3&(#@H#O&h#T&#q&#w&#&#& #f@#&h#&#'#&#f#P# # #  #(#0#P 8#`.@#PH#p`#h# Ap#x#p&#p#P#p#p#>#P#p #*#*# )#*#(# (#`# #@#P#@#@#P #(#)0#8# @#H#0P# X#`#h#p#x##0%#@;###B#-##`+#####+###7#05# # , #@-(#P 0#` 8#P/@#H#%P# X#03`# h#0 p#02#P#N#^#@]#\#PZ#pK#pU# Y#W#V#T#@Q# M#pR#pL#PL#`K #(#0#`8#@#H#P#PX#p`#@h#0p#x###&##/# #k(#l0#l8#0m@#mH#nP#PnX#po`#ph#pp# qx#q#@r#r#`s#|#{#s#@z#p### #`#P0#u8#H#@X#0h#Жx##v####`#P#Ў#j#`#(#p8#H#X#p# kx####0#####`# #@#`####0#@## #0(#P@#H#P#X#`#h#0p#@x##P#####P## #@##/#@#H#P#X#`#h#p#x##### #P#`#p####@#P#######@# #(#P0#8#@#`H#h#&x##/###P##/##0(#x8#@#/H#h####p## ### #8#;#@ #&(#%0#p8#$@#H#"P#`X#`#h#@$p#$x#P%##!#` #!#`#p#@# >#P>#p>#> #>(#`B0#?8#>H#~ X#`#/h##@[#U#R#pM#@G#H#F#E#i## #@(#$0# 8#P#X#p##%#0# ########0# # #(#0#P8#@# H#PP#pX#p`#`h#p#x####p#0##З## #p###P#@# ####P###`###8####X####h#0#x###+#+#+p#@#@#@H#@## # #(#0#8#@#H#5P#X#`#h#p#x##U#####h##k##o#u##w##|#~##########x######### ## # # ######## #(#0#8#@#H#P#X#`#h#p#x##### #!#"###$#%##&##'#(#)#*##,#-# #.(#/0#8#@#0H#1P#2X#`#3h#4p#x#6#7##8##9#:#;#<#=##z#>#?##A#B##C#D#E #F(#G0#8#{@#HH#IP#JX#K`#h#Lp#Mx##N#O#P##Q#R#S#T##V#W#X#Y#Z##[#\#]#^#_ #`(#a0#b8#c@#dH#eP#fX#`#h#gp#ix#j#l#m#n#p#q##r###s##t#u#v##x#yHH#HtH5#%#hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhhhhhhhhqhahQhAh1h!hhhhh%#D%#D%#D%#D%#D%#D%#D%#D%}#D%u#D%m#D%e#D%]#D%U#D%M#D%E#D%=#D%5#D%-#D%%#D%#D%#D% #D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%}#D%u#D%m#D%e#D%]#D%U#D%M#D%E#D%=#D%5#D%-#D%%#D%#D%#D% #D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%}#D%u#D%m#D%e#D%]#D%U#D%M#D%E#D%=#D%5#D%-#D%%#D%#D%#D% #D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%}#D%u#D%m#D%e#D%]#D%U#D%M#D%E#D%=#D%5#D%-#D%%#D%#D%#D% #D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%#D%}#D%u#D%m#D%e#D%]#D%U#D%M#D%E#D%=#D%5#DH11h#H11P$H11+1H<1H|$HKWK/Kt zKKLEп1H5xH311-11H+ HJWzH 11I:fH 11MeH 11L1H1L)H+ ͜~Hq 11k뼹HU 11O령H9 113넹H 11eH 11FH 11'H 11sH 1111H+ H0 ~镝$H5 1 $ן%H5 11/L1H)H3 H+M1飥 뷹밹멹뢹H 11L1H)H H+ 1/븹뱹 H~ 11xH $1H 1L)H+ Y韪H! 113H$H1H 1X+m5c9Y=OAEE;I1'MH 11H $H H)H+ 11Ak鴬붹k믹먹tH)H J 뻹늹냹byxH 11HL$11H, H)H+ 鍯a붹f믹t먹롹|뚹q1H 1IHy 11sHL$11H H)H+ S붹믹먹롹1He 1iH 11DHl$0HHH9tHHbH11HH H$H PHEHT$,HLL1LP`H$E1HCR`HLR1t$H|$@H tPE1H1@IпH51-LH!(11AHH B(HH PE 11H)gE t HU*t E,)H}c1Hx)1,HEHt$HH U)HH PAFv01HY)11_3H)11911H)IG1LPM11H/-zI$H n-HH PPHKX11Hq,7I$H ,HH P [1AHHw-1陈L11ASHh1H11H[HHHXH[]A\A]A^A_HH/H[]A\A]A^H=#Hz#H9tHn"Ht H=Q#H5J#H)HHH?HHtH"HtfD=#u+UH="Ht H=ު"Yd#]wHHGHG@HGH?HtH"H@8fff.@f7fUSHHH``HtHHǃ`H;HtHGPxH{Ht HH{HtH"@P8HCH{8HtH"@P8HC8H{HHtH"@P8HCHHHtH"@P8HǃH{(HtHt"@P8HC(H{XHtHU"@P8HCXH{pHtH6"@P8HCpH{xHtH"@P8HCxHHtH"@P8HǃHHtH"@P8HǃHǃHǃH[]ÐHm"ATL%"USH(HA$H HHtNtJH}4tCHEHHEHt)}u#E4HEHHtH"`P8Hǃ[1]A\ÐH}4iHEHHEHK}AE4HEA$ff.@1fHpLHO 2 MtIxΥ GEHt H Hy(t HR0Ht Rt Hy0uHy8uHy@uHyHufAWEAVIAUIATI1UHSHHLD$HXHI}H !HHXHt I}L!HHXHLEL拔$HXHRH$$$$$$LD$H1H߉D$HHXH@L$H[]A\A]A^A_AVIAUATAUHSHt\HX Au1HLH޿PHHtHUHAUAtG[D]A\A]A^HHH1PHHuA[]DA\A]A^HXDH߾ [D]A\A]A^ff.AUATAUSHHtXHX(uZH޿1APHHtHUHAUAt?HD[]A\A]ÐH1PHHuHA[D]A\A]@HXDH߾(HD[]A\A]f.Hff.H@HHtHff.fAWIAVMAUIATIUHxSHHXH_LL$uD$?HD$H"HD$Hv; IEHD$ HHEH|$@HD$(jH$H$H8$H$IXHLHT$gHRDD$HHt$8HT$0LL$nLIIXIZY$Ld$`HT$@L$Lt$hHt$LIXAH$IPH|$0P|$>tIE@IELLXHi"A`ShMw`IGXM= LIXAHt$HA`H|$@Iw@ShH$A`H$IG8IwPShH$A`IGHD$8IH$AShI8IIHHD$^ D$_A`H$Sp|$^IG(A`H=SpIGxI(HbIxWIG0IH LIXLHD$HHD$HH{2HtAHHCHt!{uC2HCH{7t:HHHCHt!{uC7HCHD$IHH{2HtAHHCHt!{uC2HCH{7tBHHHCHt){u#C7HC|$?tyHD$HHD$‰HH{5 HHHCH{C5HCfA`ZHD$HHD$HH{6HtAHHCHt!{uC6HCH{8t:HHHCHt!{uC8HCHD$IHH{6HtAHHCHt!{uC6HCH{8tAHHHCHt({u"C8HCIX11LIPLHd"D$?HD$H"HD$IXL0IEHL$>t D$>@IEHL$`x HL$@ HHH|$@HD$ HD$(H$H>HD$HHD$@H#HDŽ$H$H$HfHHDŽ$H$PH|$(Ht$ ShIGHHL$ H|$H1IO H1SxH|$`Ht+A`SpH|$`IGxIxfDIH H>H P@IIXL0HD$H(HD$H IHtMtIH}3tBHEHHEHt(}u"E3HEuIX1LHL$xdH3 %( HĈ[]A\A]A^A_MH"LfH"1HD$H;"HD$H}3 HEHHEH}E3HHD$E@|$_&HH|$H11SxH|$`H A`SpH|$`IGxIxI(HIH lH H PfH"L0HD$H"HD$M MMtQtMI~:tFIHIFHt-A~u&AF:LAFfIXLpD$?fDH fI~:fIHIFHIA~>AF:LHD$AF f.A`A`uA`HdH HHvPMMOX1H71A1f.AVAUATUSHdH%(HD$1HHHIIE1Hl$HHxHHtcH HfuJHc|$xA%|$ ?)ѺHI A;}~A}AfDHHHx1EHt$dH34%(uH[]A\A]A^1AWIAVE1AUIATU1SH_HdH%(HD$1Ld$M@HHxHHt+L HnuHc|$vEDHHCHuIEDHL$dH3 %(uQH[]A\A]A^A_@ST$ 2?)HIt@tHCIEIADATA USHXHu?DH޿PIHtHLAT$HX H[]A\ÐAVHEAUMATIUHSHHHHP`H6HLLPxuH;HHHGP@tH[]A\A]A^fDHEMLHPHHtHH߉D$ SD$ H[]A\A]A^ff.AUIATIUSHHHXu;HXE1E11LLHP t/HXHH[]A\A]fDHX1HP(ŅuXuHHPHtH"L%s"A$L(M uzLMphI|$+\HHPI$HXID$HX3A|$'AD$+L1XAD$I}+yIEHXIEHX\A}QAE+LXAEA$(fATUSHXHuH P赹DAUATIUSHHdH%(HD$1HXuaMt|L-"1HLH1AUxH4$HHXHPH<$AHXHHL$dH3 %(udH[]A\A]HH HNH PDHH HH P蕸DAUATUSHH(dH%(HD$1u+H HD$dH3%(H([]A\A]IỈHL>LH.HtHD$fLl$HH})$H"LPpH$HZHH-F裷HpHPHHAWAVAUATU1SHHf.L$ML5b"L-"M>AM LMt;t7It-IHIGHtA fL蘶HXLHHQXHp;hHP4@IYIHIGHH PfH|$HU11AH|$AHtGu / HD$HD$:H}HjfD3fD H|$HvHD$HP H|$HNHT$HBH|$H/HT$H|$HHD$HP豫AUA(ATIUSHHHXAH DHcH>L設HtsL-|"L`AUpIHHpHzXHt`AU8HpLbX@HX(HH[]A\A]@HH H.H PDMt HԲ"L`PpIH HpHx(HtH"`P8HpL`(Rf.A$=9HpHB`)HpA$PhDHpHMA $H @HHpLh0MMLsLLH腧HpHx0HfA${HpBPl@HpHM=A4$1 H?HpL-b"`HHxqHAU(HHpLHB`AUpHtrHpJHRHHp@Hp@PDH;LDHGPHH{LDH~fDHH ,HɠH P(HHXGH%Hf$HfDAU@ATUSHHHXu4HPLHLt,HX@HH[]A\A]HH HHGPHX1HHŃXuHHPHtHL"L%ݯ"A$L(M LMIAI|$+5HHPI$HXID$HX A|$AD$+LXAD$H趥HM11OHPLPHXHpI}+IEHXIEHXA}AE+LXAEA$fAVIAUIATIUSHXHuLD$D$,œl$,8H褤 AIH11H911HD$HH8HHDff.UHSHHt6@HHHtH8HtHXHHH[]H "ff.@AWIAVAUATIUHSHHHDD$LL$H$Ht HH$E1Ht HߜIML$E11Dt$LL$D$Mt5LL\$ LL$LT$LD$Ld$(蔜L\$ LL$LT$LD$IHtXHHCLHߋ$QHATASARAQAVAUD$HT$@H@HHH[]A\A]A^A_D$11L\$0LL$ LT$(LD$HD$8藜LD$LL$ HHD$LT$(L\$0Ld$8tTHHLH|$$HGRATASARAQAVIAUD$HT$@H@t"LSf.1BfH|$HGP(f.DǟATE1UH-"SHt 蕟t|Hb"HtiHtdH{GHt&H8HCH8t{tSH{Ht7HL@HCH@t{uCLHH@C[]A\LgHiCGH8CH蓘Hff.HHL$8LD$@LL$Ht7)D$P)L$`)T$p)$)$)$)$)$dH%(HD$1H$H$HD$HD$ D$0HD$HT$dH3%(uHЙAVHF AAUATUHSHH~HL%X"E$EHE苜 HEHHFt HFfDH.1EHa"@ƃQHA$HH;SH HHHHSH:Ht{{uuHD$HCCHD$W@s HEHHtEHt@L+H I9tHHO uE-H[]A\A]A^HAUATUSHHH-"@H7HIAJH4"HL"tmMthIL$H9t.I $HHHIL$HH9t A|$IL$DH9t&I $HHHIL$HH9t A|$tbfHH[]A\A]ÐH[]A\A]遚t$HHtҾAAB;fDH[]A\A]fHD$HDLAD$AD$HD$zf.HD$LAD$AD$IL$HD$fDATUSHH-}"HHTHt{H"HL"taMt\I|$AI$t/HIL$Ht A|$}I|$Bt%I$HIL$Ht A|$t#HH[]A\H[]A\黛HD$HھBLAD$AD$HD$HD$ALAD$AD$HD$Uf.AWHF IH~AVAAUATUHSHL-6"EEHEjHEHHKHLHsH1EHL"H+@ƃUAH(tuHtpHH;EtPHUHHHHEH8t7}u1EHEf.HLHEu*HH[]A\A]A^A_H;H,HKff.AWAVAUAATUSHH8dH%(HD$(1H"Hl$HD$HD$D$1DD3HL`M|$L;|$HFt Lx{uIE7肙H\$|$HHSHsHHHHSHHCHEHH"L(H>"MI;EIUHHHIEH8tA}uAELAEH\$Hu^HL$(dH3 %(HH8[]A\A]A^A_E1ALHv݄yv1G<v @v fDf._1@^ff.@_]vt1DDf.P_1Vw!H)H~Gv}ݸfD1@~ff.WfDfD@_]vt1DDf.1DfDfDfDH?"fDH8t9uf1ff.fAWAVIAUL,NATL$ USHL9IHHHUL9wqEHHL9s:AvLHAW0uC<'uHEI9r=''HfUHL9rHL)EH[]A\A]A^A_DHI9sEHH[]A\A]A^A_@H1HqDHTHPH9uHHLH1f.AWAVAUIATL$NUH, SHH9IHI[HHAW0A;vBAW(;v6@uYfIFL9A>HIH9vUAw;@\@ @ tl@u0fIVI9}HA\AFIH9wLL)AH[]A\A]A^A_fD@'t@\t@"ZrfnfLI9s.AHH[]A\A]A^A_@ZNfDH1HqDHAHPH9uIHI16ff.@v"1vv ff.@v21v(vv1ff.@H)1H~?yGv@y@u01@ D1@}H)1H~SvItDWJ>v@|;H~/0 w'GI~ t7IH@hIFHxht$A~uAF LPhAFI}Xt IM`HAEPHT$#MMH4$H߈D$'HCP`u*Ht7Ht$(dH34%(yH8[]A\A]A^A_fH5w"HuH|$HGP1fHyH9{rLHL$MAEPIzLT$ABIuXIU`pLT$MMHL$HCHLLT$H4$HP`LT$L9-H v"H5w"HH "Et]tYI~1tRIHINHt9A~u2HD$1LL$AFAFHD$L$H)v"H$LR0H$fDI IH@hIGHxht!AuAG LPhAGH8v"fHu"HL$HL$IHL$M{6Hv"$fH{1HHLCI{HD$1HL$CACL$H|u"HD$flAUIATI1USHW@HHH@HPŃt*CPHB HBBJRDHBHDHHHfHBHBBRHBHBRAWAVAUATUSHH Hw Lo0dH%(HD$1HW(HO8L6HFMLt$jPAVLOHH q{XH<$H3HL)H9?Y<vRPpHH$H)fSXH9QA>IHuVH$L3H)GHN"I LAH H>PH$L3H)H$HH)H9QHH)L9QH7N"I|$HCpHtH4$LHHHCpB H$LcxL3E1H)E@ATUSHH Hw LG0dH%(H$1HW(HO8H.LOHHLfHl$HHjATUH H|$H3HH)H9CQHHH|$H)CPH9,Q<GLD$LHCXHD$H)H;QH HC`HD$HH)H9PP0fShHPHT$H)H9nPPpHHD$H)fSjH9PwHHCpHCxH9P1H$dH3 %(H []A\f.HtVH|$HH)I)I9IF1HHCxHAL"PhH HCpHD$H)DAHl$qHD$H H)HHHHL"1>CfDATUSHH Hw LG0dH%(H$1HW(HO8H.LOHHHFHHl$HHjPU~H HD$HH)H9ODH|$H3HHH|$H)CPH9O<<H9IL%K"1AT$pHHlBHT$HHDH)HD$HH;HA$HHt$HHD1H$dH3 %(VH []A\DLD$LHCXHD$H)H;mNH HC`HD$HH)H9NP0fShHPHT$H)H9wNPpHHD$H)fSjH9XNwAHCp1HCx2f.1!fHl$HtH|$HHH)H9MH)H9sMHCxHHeI"1PhHCp1DHHHLr1@fDHv3HvHv1HG HwDHGfw@@7HGfwHHG@wff.AWAVAUATUSHH $HXDHoLg dH%(H$H1HG0IH$HG(HD$HG8HD$HGHHD$EmLl$0I]IwPD\$(HHt$ ?Ht$ HH=IƸLCLGAIwXN 3D\$(AHI_`HMqAY1LL)HH!HtLHD\$ IsAD\$ IHEIwpHt;HHt$ >LHt$ LL)HH9HGHLALsIHPDXHPIIL91ztzHBHtqH H@LAH=vH=vH=HHH LHIv IvIHHH H48HH I9sHVHv HVHvHVHF HHGLL)HH=1AMM)IIID$L $LLLD$Ht$P`HufH|$H$HWRH$KDLl$01MuIUH1EPHHtHH߉S1H$HdH3 %(WHX[]A\A]A^A_ÐHGxLl$0f1D$=I]$HD$4AED$3z<1IHv HvHHHH ff.fAWAVAUATUSHhHt$HHL$ dH%(HD$X1HGHD$HHAMLHIB HH $LE1M<HHD$PL|$PMMHL$HD$(H9f.H IB"CAmHA"L"M{L\$PM)DI$I;D$tpHHID$H8tIA|$uALD$@DֺLHL$8L\$0DT$AD$AD$LD$@HL$8L\$0DT$I|$I$LID$HA|$LD$8LھLHL$0DT$AD$HL$0LD$8AD$DT$@M{Ld$PM)DIUI;Et?HHIEH8tA}uAEDLAEI}t=IULIEHt$A}uAEL⾢LAEf@u IHAH9\$LD$PA/LH+D$H9$zDH EQ"LD$HL$ҋ$ILd$ )AD$xLH@HHL$(H|$PLD$H ?"_A|$xAD$xH=QHcH>f.A}^iHLXo@HL`o@1HL$XdH3 %(Hh[]A\A]A^A_A|AwEt,A^Hl$HHHHHH4H9uwAtAnAsA~cASAyCAz3Ax#AqAoApA{AsArAuAvAmAEAA^Hl$HHHHHH\3H9uA4ff.fAWAVAUATUSHLoHt$0HL$DD$'dH%(HD$x1Ll$XL/HRHL$0HHHHD$H9HD$XHl$0ME1HD$HD$`HD$HIfDH|$HHHD$XL9@LH)H9@DHM"L <"LILT$ABxH @HDBJ A=H=yRHcH>AhfH;"H(HDHUH;EtmHHHEH8tH}uBDD$DD޺HL$@LT$8D\$(EDD$DL$@EL ;"LT$8D\$(H}HUHHEHz}pD\$DHھHDD$@L$8LT$(EED\$DL X;"DD$@L$8LT$(AfMDII;FtZHHIFH8t:A~u3DD$@DLL$8LT$(AFDD$@L$8AFLT$(I~t\IHIFHtDA~u=DD$@HھLL$8LT$(AFAFDD$@L$8LT$(fD|$'AzxZHl$XHHM:"HAGIHl$XIAL9|$?1Ht$xdH34%(>HĈ[]A\A]A^A_AfDAGfDnAzxYHL$A1LLHl$X]@HH{ Hi6HHHHHYHyHHAHL$(2HL$(AGDH\$XIHAHD$XH(AdH|$X 11AGIHD$X@,H\$XHf.UH8"HHAGIfDH|$X 1LT$(b1LT$(ABl RHIHt$XH{ HHt$8B5Ht$8HHHHHyHAHYHL$(1HL$(AGDI&fDHL$1ALLKHl$XHH)AHD$XIH|$HH5B1 5HcHy HL$(H4HL$(Ht$HHHHMH}HHEHE0HL$(I/H\$XAGD HHD$X1H(H|$Xv3AGAD@IAG0AaDA^DA]DAeDAWDA`uDA_eDA\UDA[EDAZ5DAY%DAjDAiDAkDAgDAXDAbDAdDAcDAl-fDECE3Hm5"@`(ff.HtH5"w`8ff.DSHHHtHs 1C[H5]P1[ff.fH4"ATIUHSPHtYI$HH4"Hxxt1H-tuH1E11H5-H0HH1Ht[]A\fD[]A\fDH{ HHO*Cf.fohPCHen fileHK<C foRPCfoVPC,rff.fHt7SHH?Ht0HHc3"H[H@0fff.@SHH?/x [foOleCfSC C[ff.HEHHHHHH+HAWAVAUATUSHHHH/LoHt$H$dH%(H$81HHD$ HD$Hp57HLLHD$H%2"PH|$ Ht$IH$AMt$t4MDHcHELLLLHP`HLH|$ Aׅ‰D$HE1HT$,LLLHP`DT$H1EDHHCE1`LHR1t$H|$@H DMt H1"LP0H$8dH34%(HH[]A\A]A^A_HH MH H P:fH$Lt$0H|$ LHD$Hu5H HEHHT$,1LLLP`L LHw APH$Hl$0H|$ HHD$HuH L HH AP'f.1ҾH=?"(@H=?")H?"@UHSH(dH%(HD$1HHX H&HHH,$HH=`?"D$'HD$dH3%(uH([]&AWAVAUATUSHD5/?"H ?"IIL9t9HAI{tHHtH@Ht HIHu$H I9uE1HL[]A\A]A^A_fDH8HtHXDAEfAWMAVILAUILATAULSHHHHHLLHHtcAIMLLHHtIHHHD$ u2L ILLLHAD$ H[]A\A]A^A_fDH[]A\A]A^A_ff.ATUHSHӁvtvHDgHx8HtHR-"AP8HtH?-"HAPpHHEHX81[]A\ v%H HH 1ulHP1븁tuLHDgHxPHtH,"AP8HtH,"HAPpHHEHXP1]D[]A\fDHDgHx@HtHX,"AP8HtHE,"HAPpHHEHX@1fPCHBX1HDgHx0HtH+"AP8HtH+"HAPpHHEHX01fHDgHx(HtH+"AP8HtH+"HAPpHHEHX(1AfHDgHxHHtHH+"AP8HtH5+"HAPpHHEHXH1fHP11f1fUSHHHoHx(HtH*"@P8HH@(HHx0HtH*"@P8HH@0HHx8HtHr*"@P8HH@8HHx@HtHM*"@P8HH@@HHxHHtH(*"@P8HH@HH[]ff.@ATUSHHL%U*"dH%(HD$1Hl$ID$(HD$HID$8HH߾ D$HHL$dH3 %(u H1[]A\>!ff.HtOATIUHSHHHLHHH;H-5)"waU8sHE8H[]A\DHtHH1ff.fHtHH01f1Ht HH8f.UHSHHHHHHH[]AWIAVAUIATIUSHHHLHLHLL9` HFH HMu/IH)t HLH$Hu fD11H'"L^("L:AM ufMtHtDI}t=IUI)LbIMHyt'A}u D$ LLAEQAED$ LH[]A\A]A^A_ItILH)HQIOHyt?Au8D$ LAGQL'"D$ AGA>@A*AWAVAUATUSHH8dH%(HD$(1"HIHIHLx(ML,Hx IH#LLHHHEH}HELu` BD5LH0CHl$Hl$H5(CHD$#HwHHp0HHHt$Hx IHe#Ht$LIHII~IFM~HLLt$CD>HBH5BD$L#HHx(HHHp8HHHt$Hx IH"Ht$LIHII~IFM~'HLLt$CD>HBH5AD$"HCHHp@HHHt$aHx IH1"Ht$LIHII~IFM~HLLt$CD>H{AH5^AD$"HHHpPHHHt$Hx IH!Ht$LIHII~IFM~HLLt$CD>H5@H@D$!HHHpHHHHt$@Hx IH!Ht$LIHII~IFM~sHLLt$CD>Hl@H5=@D$ HHPX1HLH5@H5?D$ HH$@LH5? HxXLL1Ҿ9Ly(L$!d(H1L@H@uiHL$(dH3 %(H8[]A\A]A^A_fDHpHHPXt PXHPXDH1ҾLHD$HD$1p1Hl$@HH?LD$H5>f.HH>H5>LWmff.fHvN>pipetn>tcp:>unixtzHH HHH >P1Hú>tcp:uf~//uHHHtfDf~:/u~/uHHfDf~:/z~/pf~//RfAVIAUIATMU1SHH@dH%(HD$81HD$ HD$HD$Ht Ls "H|$11HH=APxHE1ɋ@tHD$ LL$ HD$(H1LHD$LPHD$(PjLD$0qHHD$8H HHHt$HULcH-c "LHXHt8L(Ht$LHXLHDž>LL?H"H|$LPH HDžPHCxHcpH{xNHCxLPHT$8dH3%(HH@[]A\A]A^H|$HtH"HD$HHHLM$ Hv<D$ HHDAPH|$HtWu/ut*UD1ZfH-"@{15/ff.@ATIUSHH dH%(HD$1HHtHH@A<$tcp:t%HD$dH3%(H []A\fA|$//uHEHAHپ8$nHEAHٺ 8$I1HHH$HD$AA<$tcp:NnfATH~H5:UE11SĹHHtGH-"LPH HDžPH@xHcpzLPHHCx[]A\H HH w:H PH[]A\HtwSHHHt5{tOH"u' HHH1[H[fDHfH뿐ff.@IHHtHF @L@H51"@HF Lff.HtH`pf.DHG@)HG@(1fSHHHG Ht H P8H{HHtH`"sP8HCH@[ff.HdH%(HD$1H"HT$H@ D$HGPHHL$dH3 %(u1Hff.AWIAVIAULMATIUHպSH(dH%(HD$1IHt$\$t$\$Hh"HMLHHHD$IIHLt*MgHHLHID$ IGHx H?PPH|$HtD$H"P0D$HT$dH3%(uPH([]A\A]A^A_fDI_HTMLHHC IGLHp IH6PAWIAVMAUMATIUHSH(dH%(HD$1HGx H@ HHtIHP0IH9vHCH@ HP0IHCHH MHQ <uHCHx H@ P81HI$Ht$MLLtcT$HKt$T$D$A)@8eMLH߈A)HCLPpHCMMHLLHPhHt$dH34%(u]H([]A\A]A^A_DHMLHLLfDLLLD$HQ(LD$HCML)HH f.AWIAVE1AUIATUHSHXHL$0LD$LL$dH%(HD$H1HG@<u(HH"HFH IIE@LL$0H|$@MHD$H|$(M@LD$HL$UHf]IEL@(EILL$HIUB)IUL$HD$B(LH)H*Hu IIEI@IIFHLcH<bUMFHHt$(f]IELLLT$ @(L$H\$@EIEPXLLL$HHLT$ uVCAvAFAVLd$@LLHIE&IT$LD$LANHL$E^IE@(AFI1AFLfAFT$ L@4$HLT$8LT$8L$ D$H"H2"H*‰HHL$H}L$HMHt$0I4HHMH9t}uH$1HEEH$H}HMHt$HqHMHy}H$HT$HEQEH$Ht$HHL$H~HHOHT$0HHHNH9t!~IuH$LF1AGH$Ht$H~HHt$HT$HQHNHyt-~Hu$H$HFQCH$fMtH$"H$LR0H$Hu.H|$H"H$L H H#APH$HL$HdH3 %(HX[]A\A]A^A_La(HMHy(t$}uH$LHEQ(EH$H}uvHt$HY(HNHy(t*~u$H$HHHFHǾQ(CH$HL$HyH f.HM fSHHdH%(HD$1HHH$uH$HH\$dH3%(uH[g HdH%(HD$1H4$H HT$dH3%(uH f.USHH#tt`H[]ÐHGoHxHtH"HT$@P8HT$HtH"H@PpHHCHPH1[]DHGHHH1[]fD:uH;SHCHtHH"P(HH1[]fHHf"PH1/Ht_USHHHGPxH;Ht7H-("sU8HH{w*U8sHE8HH[]@H-"IHHtHF@L@H5"@HFLff.HtHG`8f.DAWAVIAUIATIUSH8wHdH%(HD$(1* I~tIE11HIH5vHHH1L HSH3HLA_cII;^rHD$(dH3%(uH8[]A\A]A^A_fDUH SHHtJ- HH HHH HHBH@HHhH[]fD HH HHH ff.SHH@tH;H[f H; H[ f.HtHGH HHfD1ff.fHt'HHGH1H1HD1ff.fH8HdH%(HD$(1Ht(H5"D HD$(dH3%(uH8fH)$)D$U1HSH: ӿH4ŨH "PHttH "XH(o@oJH oR P0oZ0X@ob@`PojPh`or`ppozpoHHH[]ff.AW1IAVAUAATEUSHHt$h 1_ H4DH- "ÿUH4DIUMHH| "IDha1EnIHt$LoBhoHJxoP oX0o`@ohPop`oxpoILPhuIHL[]A\A]A^A_HtDHE1U8DMtLDE1U8DILLHt$E1PpfAW1IAVAUAATEUSHHt$1H4 DH- "ÿUH4݀DIUMtxHtsH "IFDh*1EnIVHt$LoB0oHJ@oP RPoX0Z`o`@bpIFLP0uBHL[]A\A]A^A_HtDHE1U8DMtLDE1U8DIFLLHt$E1P8fU1HSHH}UtcH4H{ "PHHtBECHEHCH}HXPHHtHH[]fDHCHP1HH[]fAW1AVAUAATIUSHAL5 "A$`H4AVHHHs "1ER`DHCA$`CAVHHHtDhILDLpu{I$H\ "H H HPHCH߾1P`HH[]A\A]A^A_I$H "H H HCPfDLmxLmXLp[LmPuIEHDžAVHHBHDžLI$XPHEVAW1AVAAUIATEUSH1H4DHR"LLU6LUHM{AHILHefDE11ɺH5'H1HHHEdLEHI,pHxLE4111HHEBLUHEL2AT$LEu#A,$uLELGLEL#XfDIHZ!H H HPID$1LPID$1LPE1IH &HFH PHefDIH!H H H P@L[iLEcLEH5&¿1IPIHPHELELEUH5f&f.AWI1AVMAUMATIUSHHG\$XHP H)HID$1HǀP(IHHD$hL1IEPHD$pIEXIEPHHEHPEPn<fI$HtA$`H!P8H}pHyHj!HuxA$`PhI$HExE1I$Mt IE1LPHt HC1HPHE1HPHD[]A\A]A^A_PHHD$HCxHD$@H@`C|HD$@HxXHHHD$hƃHCXHD$pL{PHC`HD$`LshLHCpA$tI$pH@0HHCHPHE1I$<A<I$H HH"AP@D$P fDI$H!AH H HPtDHHL%y!1HAT$hHT$xHH$HHH3HH$AH8A$H$HHH$HHDIDŽ$I$H!AH H HPDI$PI$HAPI$H!H H HPDA DAHHI$H$AHH$HI$H L"HAH PmAWIAVI1AUMATUSH(HDd$hl$pHT$HD$HGHL$HPpHyHIG1H@P(IHH$L1ID$PH$ID$XID$PH\HCHP`IAŅH HKXHYP{PHIEJH!LHt$A`PhI8IHtH}!A`P8Hk!Mw8H|$A`PpIHIHtHD!A`P8IMwHHtH"!A`P8ILJIHGIXLH=wHD$LHpIXPAfDMt ID$1LPHt HE1HPHC1HPH(D[]A\A]A^A_HHPL-i!1HAUhH$HH$HHHQHH$H8AUH$HHH$HHItuDIXLH=vXIXLH=w@IG1HP0IHHH@LPIEL1PIXLfAIH H{H Pl@PHHƀLpPLhhHD$`DHH$HEXH$HE`HD$xHEpAtIpH@0HIXLH=vIHEHE1PHyIPIHAPIHk!H H H}PDH Uf.IH!AH H H.PIfDIH!AH H HPfDIPIHAPIH!H H HPAIH2!H H HdP@IH H>H PIwfH$HH$HI8AWAAVAUATUSHHH$H4$HT$L$HD$H$HL$L$I}HD$ $LD$(D$?$LL$0D$>H!dH %(H$1HD$`HD$hHHt$LHHMHBD-LDH!1LPpD$IH6H$MHD$XHD$xHD$@HD$pHD$HHD$hHD$PHXLIHHHD$pHD$x`HDŽ$HD$`HD$hHtH!P8`HǃH!LLPHHLHHMt?HHH1$pt$8AVULL$HLD$@HL$0H$AUHH0IHA|$>Dt$L$)HHt$Ht$Xt$hH$PAWAUATAV$0P$Ht$xL$L$HL$xHT$pHt$`H`ALH!H@0MtH|$`tLH!Ld$`H@0HHLt$xHl$pAuH|$`D$Ht H{!HP0Mt Hi!LP0H$dH3 %(D#HĘ[]A\A]A^A_H<$t$@Ht$Pt$`HT$xRAWAUATAVT$RHt$xLL$xLD$hHL$`Ht$P4HPA|$H!L1P8H!1H=PpI?EHXLH(fHi!HP0fDHH:!H H HlPAAWMAVIAUMATIUSHHHD$xHt$HxXHtHt D DDD$hHL$pH޿1H$PHŸHtdHUHD$UD$uLjMMLjLH$$$P$$$Ht$HH@H[]A\A]A^A_fDAVIAUIATUHSHHdH%(H$1ILLHLH\$`L$XLHLeHL5LLLBLLLLLHgHHSHHF0EH9uH$dH3%(uHĠ[]A\A]A^@AUATUSHHH|$8vcMMtCMMt;HHt$0LLHHHIHH[]A\A]H1[H]A\A]H1H HHH PHH[]A\A]ff.HH=Q!H=!H=y!HAWAVAUATUSH(LMLoL9oD^EMcMDIAkIHt$LIHD$MIMHT$HL1I@LHL)HL9{uHLL$DD$L$H|$I$I D\$HHLkA}HH!HI$Ht1AUIT$1HHI$I$?@HHD$L H>!H HwAPHD$H[]A\A]HD$̐A1fDW;WsЃHWHH1ff.fHHHff.HGGwDAVAUATIUSHo HGL5g!L,III9tsHt[HHtAV8HǃH{8HtAV8HC8H;HtWuv/uqtd觥Al$ HÐI9uI<$AV8I$At$ I|$IF8HtAt$ ID$IF8[L]A\A]A^@蓫Al$ HÐ또@L5u!AWAAVAUIATU@(SH(HL%C!_HD$AT$HD$HDx IIE꾐IFAMyAT$IHD$HHHAT$IFHIuHH趨AEHt$LHH蝨AE1Af.IIHjIHt@uHPIIVH@AFPIGHtH!H;tI+IIFIGHtH!H;tI+IIFIG HtHX!H;tI+IIF IG(HtH1!H;tI+IIF(IG0HtH !H;tI+IIF0I8t*AGhxAT$IF8HtVAWhIw8HǃRA9]vi؉H HD$HL<HD$IL4AT$IHH|$HGP8HD$HD$H([]A\A]A^A_fDH\$CAECHH\$HAWAVAUATUHSH(HFHt$1HdH %(HL$1PPHIE AGYME1Lt$WtRKl@HLHt$Hh螢HLE1Ht$HL H1VDXZL萡fD1H$dH3%(Hĸ[]A\A]A^A_DHS8HD$HHT$ʟHT$LHLT$%L\$LT$$fDH|$@1 LHHL\$(L)LT$Ht$ DLHD$HHHHL$觡LT$E1LHL "1HARLLT$ UAUHt$8VDL\$(ADt$0L\$HLH I3LL\$zL\$LT$HrHL9Q(L9Q0sLQ0H1HA81HH~LHIHA8H9i HiHA1HHHIHAL9iHLiHHqX1H9J.HHAXH vM9sHA@I9sHA L9sHA`H8H芠 HD$0H!HL(Ll$0聟Ht$0H4LQ(HL\$LT$Ht$衚Ht$H{PHLT$L\$<I37fDL9iPLiPDH9iHiI3LHL$0LLT$HD$0D$8IHLT$LT$LT$Hl$HH$HD$@foD$@Hl$PHl$XfoL$PLT$hfoT$`LT$pLT$xfo\$pL$fo$L$L$fo$IHP X0`@hPHP`Eh葜LT$X肙fAWAVAUMATAUHSH8t$(HT$ LL$t@)$)$)$)$)$)$)$)$ dH%(H$x1H}]AAL$pAF̍ HƄpEtwlHcDH>fDKAt=@AuK@A9At@,*H{ʍFA׍J<>v@EA9w2fH$(dH3%(5H8[]A\A]A^A_At@,uBrA9v-A|5:t%JLA|$qH:t 9uAfA9wȉAtE1KA@KA@KA@A9At@,BrA9tA|5:hJLA|$qH:E9u:fKA.fDA|, C KA@K AKAfDKAfA97At@,DrE9w U<, EE9EEVMA<:uE9vDA|:AA9ENLDT$A)It LD$ALGLLL$?LL$H{PHHD$LBD 萏LD$L\$DT$A8:DGH{=L{AfDHkPH謏111H讍_DJJE9qDA|:bDL Hx:tDDFNE9wAE98I|=L\$։L$!L$L\$HCDJJE9DA|:DLfDHx:tDDFNE9wE9I|=L\$։L$觑 1HILC ZL$L\$iAD9!ANAYADABJA4迋ff.@SHHHt?L @tC@HLDE11ɺLAHH[[fUHSH褌@ HeH{ CTH{8FH{P111臋H111uH!HHHH[]fDff.H=!@HՒ!`0fUE1SHH_WdH%(HD$1HCfT$HT$HLHLHSHHXpAH0u=HH{A1`LPHPH Ht$dH34%(uH[]賉UE11ɾ SHH_HCLHHSHHXp1H0u=HH{A1` LPHPH H[]ff.@AVE1AUATUSH_LoLg HCLHHLLSHHXpLH0HH{1A`LPHPAHHGH PuDH`L5h!Ht AV8`LLAVhLHHt1[]A\A]A^fDHHGP[]A\A]A^DHH!H H HP[]A\A]A^ÐATA1ɾUSH_HCLHHLSHHXp1H0uC`HH{ALPHPAԉH HHGP[]A\@AVE1 AUATUSHH_WdH%(HD$1DwHCT$HT$HLHLLSMHXHpA҉H0uvEtqHH{A1` LPHPAՉH HHGPHt$dH34%(u>H[]A\A]A^@EuʅuHPLPHXHp薅fDUE1SHH_WdH%(HD$1HCT$HT$HLHLHSHHXpAH0u=HH{A1`LPHPH Ht$dH34%(uH[]贄@UE1SHH_WdH%(HD$1HCT$HT$HLHLHSHHXpAH0u=HH{A1`LPHPH Ht$dH34%(uH[]ԃ@HHG1ɾALPPLHHXLp1AH8ff.UE1SH H_HO HWHCSHHHXIHpH0uHPD$ HRD$ H[]fHHGHO HWLPPLHHXpDG(LAH8HHGHO E1HWLPPLHHXLpAH8f.HHGHO E1HWLPPLHHXLpAH8f.HHGHO E1HWLPPLHHXLpAH8f.UE1SHH_WdH%(HD$1HCT$HT$HLHLHSHHXpAH0u=HH{A1`LPHPH Ht$dH34%(uH[]蕀DHHGHO E1HWLPPLHHXLpAH8f.HWE1dH%(HD$1HGT$HT$HLPLHMPLHXpAH0Ht$dH34%(uHAV1AUATUHSHLgLodH%(HD$1Lw ID$HPH;HDhx@|E(Au;1HC1HPHL$dH3 %()H[]A\A]A^f.AtgLHHA@E‰D$HCPHt;I|$HT$HI|$HŃEZI$PI$HPI$XLpI$H!H H HvPHC1HPfI$H7!H H HnvP}fHXHL$8HL$ Ht$(HT$0LD$@LL$HdH4%(Ht$1Ht$`$Ht$HL$,&4unH!(PHA$/% HL$փ$H41Hp' HH5eH .o*HpHhHt$dH34%( HXY`uHՄ! PH$/s уHL$$H HH/F HT$H5H HpPHJf0HQ!PPH$/W HL$׍r4$H<9Hx/ rH<94$o?x/ rH<94$o?x(/t H41 $oH8/; HHH HHHPHH Hp7QGHh! PH$/уHL$$H HH/iHT$HH5:H HpHPHH!PH$/FHT$HH5H HpHPH  WHx!PH*$/HT$HH5gH pHpHPHH !(PH$/уHL$$H HH'iHT$oH5H HpXHf. H! PHtV$/"уHL$$H HH/HT$HH5vH / HpHPH1 H)! PHtߋ$/уHL$$H HH/HT$H5H HpPHf.H!(PHk$/уHL$$H HH'zHT$o2H5H HppH+HI!(PH$/OуHL$$H HH'"HT$o"H5H Hp`HH!PH$/gHT$HH HHH HPHiH! PH;$/WуHL$$H HH/"уHL$$ H/HT$H5AH HpH@H~! PH $/?HT$΃ $H42Hp/jHʋH HHH PHoH~! PH;$/уHL$$H HH/HT$HH5[H HpHPH@H~!0PH$/?уHL$$H HH' уHL$$oP/HT$H5H wHpP(HpH}!(PH;$/уHL$$H HH'HT$oH ZHHH @HH}!(PH$/уHL$$H HH'HT$o H5H HpHHH|!PH[$/HT$HH5H HpHPH9HY|!0PH $/HT$ύq4$H<:Hx/qH<:4$Hx/H42 $Hp /HʋH5H0P(HHPHT$qfDHL$HqHt$CDHT$HHH HT$HHHT$)fDHL$HqHt$DHT$fDHT$ fDHT$HHH HT$HHHHH HT$HHHHH HT$HH DHT$fDHL$HqHt$DHT$fDHL$HqHt$dDHT$=fDHT$fDHT$fDHL$HqHt$dDHT$fDHL$HqHt$DHT$5fDHL$HqHt$DHT$fDHL$HqHt$SDHT$HHH HT$HHHHH HT$o9xHHH HT$o@(HHH HT$oP8fDHT$fDHL$HqHt$DHT$HHH HT$HHHL$HqHt$DHL$HqHt$DHT$fDHL$HqHt$DHL$HqHt$DHL$HqHt$DHT$fDHT$ApHT$HT$HT$HT$HT$HT$HT$#HT$KHT$"AWE11ɾ AVAUATUSHH_LoHCSLHHXHp1H0HC1HP`IHH@LPŅuLMt$XM|$PI~ HtLLHHHH{HCLs>qBD3I]ID$1LPH[]A\A]A^A_fDHHw!H H H4gPAWAVAUATUSH(HGLgLw0Lo@HD$HG(LHHD$HG8I|$HD$HID$1HPHHH@HP;}A$`C`ID$hCPA$H:v!H{XPpID$poI$H+}HMMLI$AWA$pPPsxHL$XHT$PHt$H蚊H@taI$HGI$1HPHCPH([]A\A]A^A_olH11o1H߽IDŽ$HCP묐HI$HH P@I$Ht!H H HePQfDSH_HPHHvtHXH1[HHH112n |f.USHH~HVt1O Gv))HH9tHGxfƇf.AUATUSHL'Il$HtdHHHtjLhImH;nBD(,HHhIl$H>eH HHtzHqL$0L;cs3H|1HgHL`H1[]A\A]@HdIHLHHT$rdH HT$Hq@HHQdHaI@Stc e1[fHH=b!\ci1HHH~ 1(fH=~H9m!HB 1HfDAWAVAUATL%jUSHXdH%(HD$H1Hl$ L|$HjHEH5z\1~g1cH5,H1Ad1HH5'd1HH5 d1HH5cH 1HRl!HHK bH1H5աcHK(H1H rbH1H5cHK8H1H BbH1H5H-#UcLH5HEտ14cLH5HEտ1cHHԠH5vHHD1bfLH=)D$gcHD$HHt HPDHPH5.1bH|$HtWHD$HD$aH\$D`HhIJD%H$H9up@LsHT$MnI9BD3,LkI$HT$Lp LaHT$MdI9sEJ|+HLcH\$LcH H9,$tI}tLeHuI$Lp LJaILLHD$`H\$HD$LkHHt HCHSDH5 1taH|$Ht Wta/HC@HЀxuHLՀ}HUEHFtIDžMIHO!MMAHHO!HH{(HH@HCH@{C(1H@C@H>HT$L$LT$H4$^FHT$HC@L$LT$HH4$F@H8Hw@HI4$L\$IIUL$HpLDAhI LHvAVH9QAFfI@pIphL$HP L$I@hHC H@0AH(D[]A\A]A^A_I$H)L!AH H H;P뻃At]I$IML$HHD$LL AQL$H}xA}HD$L LHAPI$PLPHC @d*ADAx\DHC L$@dI$HGL$I$AP^I$AP`PI$@I$PtLPDLPHI!H-J!L0M I$HDaH9Ht$HD$HL$@Ht$HD$HL$I~)IHHIFHHA~AF)LHAFH HHKAVAUATUSHHH+HH{ IICuH{xCH HH {HHK@HHS B Hׅt\1fDH9j vGHK@H@Hxux IAF tI*t}AFHS H9j wCH>vL0IX@AWAVAUATUSH8dH%(HD$(1H=HH1L#M%HHH?HG H{LxXMH{xIH I$H CD$$LHT$ D$ 1A$PIHHL$AV$PH{@AGxH{PHGIGLPzA\oAx4HEI$Du H$HE HP HE IWPHP8HE IWhHP@IIGPAWXIGhHE M$pM$Hp8Hx@E@hPAv1EuHPH9HHK@H@HрzuH} HIHHO8z  AF t I>/QH9QI>AVAI$H{xH DH\$(dH3%(H8[]A\A]A^A_AEHSPAO^ I$AO^ HSPAO`JI$AO`JHU AO\JdHSPAO^ I$AO^ HSPAO`JI$AO`J[fDI$HD!H H H 4P#fDHP IGpIwhHP IGhIGLPIwhHtIWp$HR IGh$H@C!H C!L2M uuM$MtUtQI~*tJIHPINHPt1A~u*$*LAFPAF$HU HB0AEI~*tIHPMNIPeA~Z$*LAFAPHB!AF$ AF L$HLOHIL9JHZLJHH9NI>HD$Ht$HL$9HD$Ht$HL$ LMp9HtkATUSH/HtVHu@HtME(It-1f.H@H<ƀu 7Hu@9](wID$L HE@[]A\@ff.@HtwUSHH/Ht_HaHE HtHHE HExHHt-=HExsHH A!P8HExHǀH[]ff.@H3AUATIUSHH/HLmMH}xUHH IH E(HLvE(EH1H]@u 3H]@H@HHC t H HE@HC9U(wH1[]A\A]H xH:0PHtID$HL H[]A\A]@D$ HtIT$HL D$ H[]A\A]f.HATUSHHt|L#MttH{ tkCHtpv"HC HPxHQHC HCvCI$PI$HHtI$PHP1[]A\ÐHGH@HЋCvwf.HAUATUSHHHL+MHSH{xAH 9s(IH C(HUHtHR@HtDH IH<ʀH{@SIHH4@H >!HP(HC@Ht:DHvHDHC@D1@H uH.PH[]A\A]ff.H uH-PH[]A\A]f.3C(;HW=!PHC@EfDHAVAUATUSHHL3MIH{xSẢH 9s,IH C,H{8AE tIEH{8H,vHH2Au HC8H`HC8IMAUHHPHC8Dd(1C0[]A\A]A^fH ZtH,P[]A\A]A^@fH QtHZ,P[]A\A]A^@H;!SIPHC8H"@HAUIATUSHHHjL#M^H{xSHH I$H C,,HHS8H1E1@HS8DAH@H<1C,D9wHs8H9tIELC,Hk8tJ1Hk8H@HHtF t HHs8HFHC8xu`9S,wC0H1[]A\A]@H rH*PHtMIEHLH[]A\A]DH{xH ]sH*H PH[]A\A]øf.Hk8ATUS1HH/HLeM}(H] HHsHt)HCHt I$pHJhI$}(I$XuIHH@P(}(2HC Ht.@dHE 1HxHGP0HCHtH[]A\I$H9!H H HC)PH1H[]A\I$H8!H H H)PH[]A\AWAVAUATUSHHL?MM/MtyIxHIԉH IH AGtdIG8HA9_,uHRH|tlIxH IqH](H PAHD[]A\A]A^A_IxH oH!(AH PIPH$IHH$AuH57!HEHT$H$HIHHT$IW8IzLT$JIGHAIwHArIwHArIwfAZHArL*1LT$1H $LLAPLT$HHt L$HHASAL$H6!LP0fDIxH nH&AH P@IxHU7!AH H H&PgfIxHU6!H&HH HPIHپHk&H PIIxH tHPL$L$L$fDAUATAUSHHtbHHtZL+MtRIE1HP@HHtOH@HPAăUTHCPPURHCPCHE1HPHD[]A\A]H{xH=5!Hy%HH HPIHپHS%H PHD[]A\A]HC H~HH{ H4!w(P8H{H1HHHǃH)HC)ff.AUATUSHHHHL#MH{ C(I$PHI$H{~HEH{xH@ HH I$H H3!H-K4!L(M `I$HtKtGH}t@HEHHEHt&}u EHEDHk U(} E\)HEHHUHAHLHUH H`LmAHS HCPHRHRHPCHHH[]A\A]fDH1H[]A\A]HGH@H[]A\A]@I$HA3!1۾H H H"PHH[]A\A]I}IUHIMHsA}hAELAE<@HUI$8H u;HC HH{ H1!w(P8HC CHHJ0H1PI$Hq1!1H H H!PIEHtBHUzHHE1!HIHtHMHU1HNjRHQH)IIfH>AWAVAUATUSHHH9H+H-IH{PH$IHGPHHGPH{xH HH CIMLH $H1PIHtHL$AU$YIHMLHT$M<I@L$1HPhL$HT$HIH@LD$LH$PA}PH$LD$IEX1LHBIAMhHBPH@AE`AlB(AEdB,IEPAW,A(teHXAwIIHIG HXHPHLAEIEA=L5,I9tb1@,L-.!HHAU@HLHH(HLL(HHL(HAUXIFLP`AG1H[]A\A]A^A_@uID$LH@HЋCvHC HtHPxHXHPPIHtvL8f.HzxH.!HVH(H HPL$HH.IH PDI9tIFLP`CH[]A\A]A^A_ÐIHD$HtLMtI@L$1HPPIHtS@XHD$@,t[1$HD$;P,s@IE$LPuIE1LPMDHD$Hxxf.IE1LPLzfDHzxAxL$H t~IMpIqPL$IAxH tCIMpIqPRHHr,!H H HP@fL$HtHHtwUSHH(HtHx tHPHHHtH[]fDH@tHCHPHCH߾H8H[]fHtATUSH/HtkHu8IHt@E,t#1fD؃H@HfDA#H\HcH>fHBBrrrH r:RHDHEEHHD$(dH3%(H0[]A\A]A^ÐH9W7G֍GHf.H1FV  ‰ @HcHHnfDHBHPHHD@19fHDxDXDHDhD@DpD`.AAC0AADBADDH DHHHLl$1HL$H5U,LHL$LcMI|$ HL$HALLIHII~IFMfCD&HL$LuEFH-DH9DGWDH1FFVVH HDH@HB:Rjf.H1FFVVvH H$@H9GGWWGwH HfAA;AAADAACAH C,HDt@Ѝ8DXsH&TfDAVAUIATIHUSHL1tHL)H9&H)щH9&Hى[L]LAA\A]A^AAAAH/!1AHHH5AHHH/!HH/!HAH>/!HH5/!HHB/!HC0!HH/!HA/!HH/!HH5/!HH,/!HMH./!HH/!HH/!HPHa/!H.!HHy/!HHs/!HL/!H.!.!f.!w.!x/!/!z.!H .!.!}.!.!/!H.!HH/!H5 /!H /!H5.!H.!Hf=,E!H=.!H.! /!.!S.!HD!HD!f5D!HD!HD!HE!HE!fDE!HD!HD!fD D!HD!HD!fDD!H=.!H .!.!HD!HD!D!Hl.!Hm.!n.!HD!HD!D!H,!H,!,!HC!HC!C!HC!HC!HC!HC!H|D!H}D!ff.AWAVAUATUSHL/Ht$Ht$pHT$IHL$ dH%(H$1IH$IUHD$pHD$xIEHT$pHBIEHT$pHBIEHT$pHBHD$pHPHT$pIUPHD$pHt$0HPHT$pH$@HD$pHT$@@HD$p@HD$p@HD$pH/HL$xHD$pHDŽ$E,HL$(XHD$xHHD$8IAăfH|$pHD$xH1E1H|$PHD$XM,H\$pH\$p8H$Ll$H1L$HD$@HE8AKTmHBI< <Rփ@t <H|$IWAL]AH$HtMILЀxLEIAWH$$t$tL$f/R Rf/ALM,9Ll$HH\$pE0HD$p}0M,Du0H$AE1Ll$HHD$}fDLÀt`<P<R<uFI{t, Ulf Wendel , Georg Richter Malformed packetEmpty row packet body%luSLEEPQUITINIT_DBQUERYFIELD_LISTCREATE_DBDROP_DBREFRESHSHUTDOWNSTATISTICSPROCESS_INFOCONNECTPROCESS_KILLDEBUGPINGTIMEDELAYED_INSERTCHANGE_USERBINLOG_DUMPTABLE_DUMPCONNECT_OUTREGISTER_SLAVESTMT_PREPARESTMT_EXECUTESTMT_SEND_LONG_DATASTMT_CLOSESTMT_RESETSET_OPTIONSTMT_FETCHDAEMONBINLOG_DUMP_GTIDRESET_CONNECTIONEOF packet expected, field count wasn't 0xFE but 0x%2XWrong response packet %u passed to the functionError while reading %s's response packet. PID=%dError while sending %s packet. PID=%dPackets out of order. Expected %u received %u. Packet size=%zdPremature end of data (mysqlnd_wireprotocol.c:%u)SHA256_PK_REQUEST_RESPONSE packet %zd bytes shorter than expectedGREET packet %zd bytes shorter than expectedCHANGE_USER packet %zd bytes shorter than expectedWrong COM_STMT_PREPARE response size. Received %uPREPARE packet %zd bytes shorter than expectedEOF packet %zd bytes shorter than expectedPremature EOF in result field metadataProtocol error. Server sent NULL_LENGTH. The server is faultyProtocol error. Server sent false length. Expected 12Protocol error. Server sent default for unsupported field list (mysqlnd_wireprotocol.c:%u)Result set field packet %zd bytes shorter than expectedRSET_HEADER packet additional data length is past %zu bytes the packet sizeRSET_HEADER packet %zd bytes shorter than expectedOK packet %zd bytes shorter than expectedOK packet message length is past the packet sizeAUTH_RESPONSE packet %zd bytes shorter than expectedAuthentication data too long. Won't fit into the buffer and will be truncated. Authentication will thus failMalformed server packet. No packet space left for the fieldMalformed server packet. Field length pointing after end of packet ۯ ˯[k{ ;K@@@@+p`@0 Pвгв0d(`X \PT mysqlnd_read_bodymysqlnd_read_headerUnknown errorCan't find file '%-.64s'.LOAD DATA LOCAL INFILE forbiddenLOAD DATA LOCAL INFILE is forbidden, check mysqli.allow_local_infileLost connection to MySQL server during LOAD DATA of a local fileopen_basedir restriction in effect. Unable to opError reading filocal_pkssllocal_certcafilecapathpassphraseciphersverify_peerverify_peer_nameallow_self_signedpipe://unix://No handler for this schemetcp://%pr+Cannot connect to MySQL by using SSLUnknown error while connectingUnknown errror while connectingbytes_sentbytes_receivedpackets_sentpackets_receivedprotocol_overhead_inprotocol_overhead_outbytes_received_ok_packetbytes_received_eof_packetpackets_sent_commandpackets_received_okpackets_received_eofpackets_received_rset_headerpackets_received_rset_rowpackets_received_change_usernon_result_set_queriesno_index_usedbad_index_usedslow_queriesps_buffered_setsps_unbuffered_setsflushed_normal_setsflushed_ps_setsps_prepared_never_executedps_prepared_once_executedrows_fetched_from_server_psrows_buffered_from_client_psrows_affected_normalrows_affected_psrows_skipped_normalrows_skipped_pscopy_on_write_savedcopy_on_write_performedcommand_buffer_too_smallconnect_failureconnection_reusedreconnectpconnect_successactive_connectionsactive_persistent_connectionsexplicit_closeimplicit_closedisconnect_closein_middle_of_command_closeexplicit_free_resultimplicit_free_resultexplicit_stmt_closeimplicit_stmt_closemem_emalloc_countmem_emalloc_amountmem_ecalloc_countmem_ecalloc_amountmem_erealloc_countmem_erealloc_amountmem_efree_countmem_efree_amountmem_malloc_countmem_malloc_amountmem_calloc_countmem_calloc_amountmem_realloc_countmem_realloc_amountmem_free_countmem_free_amountmem_estrndup_countmem_strndup_countmem_estrdup_countmem_strdup_countmem_edupl_countmem_dupl_countproto_text_fetched_nullproto_text_fetched_bitproto_text_fetched_tinyintproto_text_fetched_shortproto_text_fetched_int24proto_text_fetched_intproto_text_fetched_bigintproto_text_fetched_decimalproto_text_fetched_floatproto_text_fetched_doubleproto_text_fetched_dateproto_text_fetched_yearproto_text_fetched_timeproto_text_fetched_datetimeproto_text_fetched_timestampproto_text_fetched_stringproto_text_fetched_blobproto_text_fetched_enumproto_text_fetched_setproto_text_fetched_geometryproto_text_fetched_otherproto_binary_fetched_nullproto_binary_fetched_bitproto_binary_fetched_tinyintproto_binary_fetched_shortproto_binary_fetched_int24proto_binary_fetched_intproto_binary_fetched_bigintproto_binary_fetched_decimalproto_binary_fetched_floatproto_binary_fetched_doubleproto_binary_fetched_dateproto_binary_fetched_yearproto_binary_fetched_timeproto_binary_fetched_datetimeproto_binary_fetched_stringproto_binary_fetched_jsonproto_binary_fetched_blobproto_binary_fetched_enumproto_binary_fetched_setproto_binary_fetched_geometryproto_binary_fetched_otherinit_command_executed_countinit_command_failed_countcom_quitcom_init_dbcom_querycom_field_listcom_create_dbcom_drop_dbcom_refreshcom_shutdowncom_statisticscom_process_infocom_connectcom_process_killcom_debugcom_pingcom_timecom_delayed_insertcom_change_usercom_binlog_dumpcom_table_dumpcom_connect_outcom_register_slavecom_stmt_preparecom_stmt_executecom_stmt_send_long_datacom_stmt_closecom_stmt_resetcom_stmt_set_optioncom_stmt_fetchcom_deamonbytes_received_real_data_psbytes_received_rset_header_packetbytes_received_rset_field_meta_packetbytes_received_rset_row_packetbytes_received_prepare_response_packetbytes_received_change_user_packetpackets_received_rset_field_metapackets_received_prepare_responserows_fetched_from_server_normalrows_buffered_from_client_normalrows_fetched_from_client_normal_bufferedrows_fetched_from_client_normal_unbufferedrows_fetched_from_client_ps_bufferedrows_fetched_from_client_ps_unbufferedrows_fetched_from_client_ps_cursorproto_binary_fetched_timestampbytes_received_real_data_normalrbpassword is too longmysql_native_passwordauth_plugin_sha256_passwordError while sending public key request packet. PID=%dError while receiving public key. PID=%dmysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf fileThe server requested authentication method unknown to the client [%s]The server requested authentication method unknown to the clientThe server sent wrong length for scrambleAndrey Hristov , Ulf Wendel auth_plugin_mysql_clear_passwordauth_plugin_mysql_native_passwordAndrey Hristov , Ulf Wendel , Georg Richter Error while reading a rowfetch_all can be used only with buffered setsresult->m.fetch_row has invalid value. Report to the developersError reading result set's headerUnknown type %u sent by the server. Please send a report to the developers/tmp/mysqlnd.tracenumber of functions: %dinfo : >%s<%s%5u: %02d:%02d:%02d.%06d %14s: %4u: %s%s%s%s%s%s%s%s abwbdebug_trace/builddir/build/BUILD/php-7.2.34/ext/mysqlnd/mysqlnd_debug.c%-40s calls=%5llu own_slow=%5llu in_calls_slow=%5llu total_slow=%5llu min_own=%5llu max_own=%7llu avg_own=%7llu min_in_calls=%5llu max_in_calls=%7llu avg_in_calls=%7llu min_total=%5llu max_total=%7llu avg_total=%7llu<%s (total=%u own=%u in_calls=%u)54444444445454444454t54t544t554444444444444445465464446|6454t54T6444<6Error while reading greeting packet. PID=%dConnecting to 3.22, 3.23 & 4.0 is not supported. Server is %-.32sConnecting to 3.22, 3.23 & 4.0 servers is not supportedServer sent charset (%d) unknown to the client. Please, report to the developersServer sent charset unknown to the client. Please, report to the developersConnection not opened, clear or has been closedPlugin API version mismatch while loading plugin %s. Expected %d, got %dmysqlnd_plugin_apply_with_argument must not remove table entriesYesNon/aenabledVersionsupportedCompressioncore SSLextended SSL%ldCommand buffer sizeRead buffer sizeRead timeoutCollecting statisticsCollecting memory statisticsTracingLoaded pluginsAPI Extensions%s statisticsAPI20170718,NTSstandardmysqlnd.collect_statisticsmysqlnd.debugmysqlnd.trace_allocmysqlnd.net_cmd_buffer_size4096mysqlnd.net_read_buffer_size32768mysqlnd.net_read_timeout86400mysqlnd.log_maskmysqlnd.mempool_default_size16000mysqlnd.fetch_data_copymysqlnd.collect_memory_statisticsmysqlnd.sha256_server_public_keyStatement not preparedNot implementedInvalid parameter numberNo data supplied for parameters in prepared statementNo data supplied for %u parameter%s in prepared statementCouldn't generate the request. Possibly OOM.Re-binding (still) not supportedCan't send long data for non-string/non-binary data typesMalformed server packet. Field length pointing after the end of packet%.*f%s%02u:%02u:%02u%04u-%02u-%02u%04u-%02u-%02u %02u:%02u:%02u|,̥\XH0ȣXXXHC;l @`4<00)0j1T22#(334|4N4\5Jd6i6h8h;>GtM/hO~O@P,SX\c\j__kktlLmmnn 8o@P`, XP`x \ 0@P`p  4H\p`0DXl 0` ,p p@Hp4H P0 d  0\@@|d   (@\`p0 ` p( < P    !!!"!"!# "#("%l"&"'#)\# +#,#@-$.d$/$0$2L%3%`5%6@&07T&8h& 8|&@8&8&8&8& 9&`9&9'9'90'9D':X':l' :'`:':':':':';H(=(=(@>(p>(0?(?)@$)p@8)@L)@A)PA)A)B)B*0C8*C`*PD*D*pE*F+F(+ GP+Gx+@H+H+`I+I,J@, L,M,P$- Rt-S-U-U.VD.VX. W.PW.W.W.X.pX0/XD/@Yx/pY/Y/[D00^0^1p_41`h1a|1 d 2`eh2l2`m<3@n3n3@t4u,4w4y5|p5}55@5x6p667707 P7077В7788 8088@H999К9 :4:Ph::М:::@:D; ;;`8<pl< <<<<0 =(=D=0=Э>d> >p>p>(? H$$8CFAA J@EBAI  AABK zRx $JrH$DFAA JDEAAI  AABF \%(GdP%GFBB B(A0A8G L+3 8A0A(B BBBB l% M3L%LMsFBB B(A0A8D 8A0A(B BBBD $zRx ,ޓL &@RFBB B(A0A8GY 8A0A(B BBBH <p&Y &Y &Y&Y!&Y3EZ A R8&YMII W ABG A FBG  'ZAJg<'ZBER I a\'[=`p',[FBB B(A0A8J$cFFOC 8A0A(B BBBI $zRx $,5tRFFQ$(X]8(d]L(`] (`(\]iEDD@T AAA L(]FBB B(A0A8D@Z 8D0A(B BBBG \(]FEH H(D0D8GPu 8A0A(B BBBG D8F0A(B BBB8<)`^FAD ~ ABD  FBG x)`)`$)`EAG AA0)aFFA G0b  CABA ()aYKDD {AB(*b<* bP*,b$d*8b-EDG MJAH*@bFEB E(D0A8GP 8A0A(B BBBD H*tcSFBB B(A0A8Gpb 8A0A(B BBBG zRx p(\+PhjfTt+iaFEE D(C0Gp|xSFBVp 0A(A BBBD 0+ kFDA G@Q  AABI 4,kINF \ ABD dAB$8,tlJ} I A G h`,l4t,m,m,mEE,PmTH F A H,mPFEE H(D0I8D` 8A0A(B BBBG H$-nFEE E(D0D8D` 8A0A(B BBBF zRx `(&L-oFEE E(A0D8D 8A0A(B BBBA -TtYEG F AA .tFH x A L8.tEAG0_ AAB N CAF M CAG y CAC 0.tuiJAG { DAF P.u4.uH.uFBE E(D0A8Dp 8A0A(B BBBA (0/LvEIL E AAG \/vFE] N Q|/v#/ w3M]/4w_H@x H $/xwEFF AAH/xnFGB E(E0A8DP 8D0A(B BBBH H804y'FGB E(E0A8DP 8D0A(B BBBA 00zEFD ] DAG PDAH0tzFDB E(D0A8D@ 8D0A(B BBBA H1{ FDE E(E0A8DP 8D0A(B BBBK P1|}>Qal1}Nh1~ 1 ~%1(~ 1$~ 1 ~ 1~ 2~ 2~,2~ @2~%T2~ h2~-|2~ 2~ 2~ 2~o2@ 2<72h 3da303D3 X34l3CJFF M FAF DCAH43CJFF M FAF DCAH43CJFF M IAC DCAH44CJFF M FAF DCAH4L4 CJFF M IAC DCAH448CJFF M IAC DCAH44PCJFF M FAF DCAH44hCJFF M IAC DCAH4,5CJFF M IAC DCAH4d5CJFF M FAF DCAH05IEDG a AAE NAA,5̀fEC DEFp I H6 FGE E(D0A8D@ 8D0A(B BBBD HL6PFEG E(A0A8D` 8D0A(B BBBH 6FHB B(A0A8JLCDBA_uGDDIBBBBHGDh 8A0A(B BBBH MGDFBBBBFG]$zRx ,Gd7FEE E(D0A8GPpXK`MhGpHxGGGNPD8A0A(B BBB@8FEE A(D0J 0A(A BBBA XL8ГFBA A(D0M (D ABBD D (C DBBI j(D ABB840Hc`8HMFBB B(A0A8D` 8C0A(B BBBA D8F0A(B BBB(94(EbD9HEEz<`9|EDG0N CAF k FAF UAA9C98#9T9`>H9FBB B(A0A8DPG 8D0A(B BBBJ 4<:@FBA C(G0(C ABBt::: :, :(:$:0H;<FBB B(A0C8Dpd 8C0A(B BBBD (L;NDD {AAE0x;FDH D@E  AABA H;FBB B(A0A8D{ 8D0A(B BBBF d;TFBB B(A0A8DpP 8A0A(B BBBD w 8C0A(B BBBE H`<eFBB B(A0A8Dp 8A0A(B BBBI 8<FED D(G@z (A ABBF zRx @$x~;(=EAG ^ DAH HH=tFBB B(A0H8DP 8A0A(B BBBI =LEj A [=8;8=dFBA A(D@ (A ABBH >+>3 ,>0{W{ N CE8P>NCG M AAI DCAH >{W{ N CEH><FEE B(A0D8D` 8A0A(B BBBF |O`?̭FBB B(A0A8GP 8A0A(B BBBI Q 8C0A(B BBBC |H?tFBB B(A0D8GP  8A0A(B BBBF 8 R|(?FFC ABH@FDE E(D0E8D@ 8D0A(B BBBH 4`@̽FAC  ABB iCBH@TuFDE E(D0E8D@! 8D0A(B BBBA H@uFDE E(D0E8D@! 8D0A(B BBBA P0AJFBD G(N@, (A ABBE  (A ABBD A#AAAA <AFBB D(A0 (D BBBF H(BFEB E(A0J8F`L 8A0A(B BBBG HtB+FBB B(A0D8D` 8A0A(B BBBH Ty&HBFDE H(A0q (A BBBH P(A BBB C< 44C8CJFF M FAF DCAHlCP]EW|C3RBA D(D0l (A ABBA S8T@c8A08J@CHCPCXC`ChCpCxCCCBIJ0YTDTFBB B(A0A8D`hHpVhF`K 8A0A(B BBBH p`DFBB B(A0A8G[FAx 8A0A(B BBBF MBF\xDFBB E(D0D8GB D B D C VV 8A0A(B BBBJ @R [BxPEFBE B(D0D8GLFDBDDYF 8A0A(B BBBI  R[ALEqFBB E(D0A8J  8A0A(B BBBH F@WEA J F$w )OVw Ohw 9{w ;w ?w aw Pbgw Lw "w *Ow +w ,w -$,`g`.$?`g`/Kw 0Vw 1hw 3zw zw zw 2zw 4zw 5w 6c0i7 c0i80c0i:Aw <LRcdc=Lrcdc>|0c0i@ow Aw Bw C{w Dw EPw Fw GKw H|w Iw Jw Kw Mw N3w OOw Pe&w Q80w R:w SC g `T!Lw aaUUw 0bgV_w bbW jw 0cbX5rw `cPcYm{w Zcpc[w ch\w ]w ^w _w ba`w baaw Pbgbw Pbgcw w cpc w cpc2w cpcBw cpcSw cpcew cpctw cpcw cpcw cpcw cpcw cpcw cpcw cpcw cpcw cpcw cpcw cpc#w cpc5w cpcGw cpcWw cpcgw cpcxw cpcw cpcLcdcLcdcLcdcLcdcLcdcLcdcL cdcLcdcL,cdcL=cdcLNcdcL]cdcLmcdcLcdcLcdcLcdcLcdcLcdcLcdcLcdcLcdcL cdcLcdcL2cdcFw  g `Vw  g `hw  g `xw  g `w  g `w  g `w  g `w  g `w  g `w  g `w  g `w  g `w  g `w  g `*w  g `;w  g `Iw  g `Yw  g `kw  g `}w  g `w  g `w  g `w  g `w  g `$w `g`$w `g`$w `g`$w `g`$$w `g`$9w `g`$Kw `g`$_w `g`$rw `g`$w `g`$w `g`$w `g`$w `g`$w `g`$w `g`$w `g`$w `g`$w `g`$0w `g`$Ew `g`$Xw `g`$kw `g`$w `g`$w `g`w iiw iiw `g`$w `g`$w `g`$w `g`$%w `g`$;w `g`$Qw `g`$gw `g`$}w `g`$w `g`$w `g` $w `g` $w `g` $w `g` $w `g` $w `g`$-w `g`$Hw `g`$^w `g`$tw `g`$w `g`$w `g`$w `g`$w `g`$w `g`$w `g`$w `g`$$w `g`$:w `g`$Pw `g`$fw `g`$|w `g`$w `g`$w `g` $w `g`!$w `g`"$w `g`#$w `g`$$w `g`%$,w `g`&$Gw `g`'$]w `g`($sw `g`)$w `g`*$w `g`+$w `g`,$w `g`/$w `g`|'2>MZg{w    "  / @ U k  !%& !    H p!40G Ud t q (*@$h&"'<Maq $3BSn 1ARcu$4C[r $>Vn  <Uo-Hd~ :Sq      #2C O` js|*9M\ gw %1'H(%>&f!& &3&@ O&T&(q&w&8&&0f&@&'x &f ` ,##o`` ; `# + oo8+oo)o~`# 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`p 0@P`pP   P `.Pp Ap&pPpp>Pp ** )*( (` @P@@P) 0 0%@;B-`++705  ,@-P ` P/% 03 0 02PN^@]\PZpKpU YWVT@Q MpRpLPL`K`Pp@0&\/kll0mmnPnpopp qq@rr`s|{s@zp `P`u@0hЖhv`PЎj``pP k`0` @`0@0P0@PP @\/ P`p@P@P`&\/P\/0x\/p  8;@&%p$"`@$$P%!` !`p@ >P>p>>>`B?>~ \/@[URpM@GHFEi3#@$ %0 0 P Ppp`p0З pP@ GCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1`9 GA$3p11134GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113`K)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYLGA+GLIBCXX_ASSERTIONSGA*: GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY`K4GA+GLIBCXX_ASSERTIONSGA*:GA*GA! P QKA c   u  + N u P l l- }w }  !  L u     G    & !U    9 N~ ~ N h P5 hm D p D : Pc  2  2!  LR  @ v  L  s  P#  s<  o        ,  h        ?   i        @  u       = x    ?  b     C |    +  K + @ 0 @ IT @ | I e P eQ b p b " p\M     Q {  ,   W ,  C  0 ! C ] W  P  W  g 6 ` a g    5  [   -  C . sM j C   P 9 .  e    p) o  M & `    2 0\   L l+ Lk 9 P 9  Z\  @  Z    `!)! ^! &#!  ! ! &#" )$?" 0#^" )$" +%" 0$" +%# %Y# 0%o# %# b&$ %5$ b&h$ ($ p&$ ($ (5% (ic% (% )% (% ))& )Y& )i|& )& )& )o' )B' }*r' *}' }*' *' *p#( *Y( `+( *p( `+( +,) `+KZ) +) ,) +p) ,7* ;-o* ,* ;-* [.+ @-O+ [.+ M/+ `.+ M/>, #2, P/, #2, "3!- 02J- "3- -5- 03- -5B. 6. 05. 6. ?;!/ 7?H/ #Rw/ ?;/ >/ @;#0 >\0 A0 >.0 A0 A11 A]1 A1 A1 A1 RB1 RB+2 BY2 B2 mC2 B2 mC3 C93 Cb3 C3 C3 C3 C3 C'4 CN4 XEs4 XE4 qF4 qF4 I5 I>5 qIc5 qI5 QK5 `K5 `5 6 )6 uK6 uq6 6 6 6 6 `K7 iK?7 `K U7 iKs7 ML7 pK7 ML7 bL7 PL7 bL8 M.8 pL?8 Ma8 }N8 M]8 }N8 P8 N8 P9 6Q$9 P&59 6QV9 eRu9 @Q%9 eR9 T9 pR9 T9 mU: T: mU>: V[: pU4k: V: W: V:: W: Y: W&; Y%; FZB; Y&R; FZt; \; PZ; \; >]; \.; >]< ^9< @]K< ^k< `< ^B<<<`<<==P-=pD=@X=0l==== `= j= > &> uJ> ur> > > > ? `&? `J? `a? `? a? `? a? a? a? a%@ aI@ a`@ a~@ a@ aH@ a@ &b@ b& A &b4A DbYA 0bqA DbA bA Pb6A bA bB b3'B bOB buB bB bB *cB b:B *cB DcC 0c/C DcLC YcgC Pc uC YcC icC `c C icC zcD pc D zcBD cfD c }D cD cD c6D cE c*E cBE c`E c|E c E cE dE d E dF Cd;F CdeF VeF VeF gF g G Qg1G g1KG QgqG gG `gAG gG gG g.G gH h3H gDH haH "i|H hH "iH tiH 0iDH tiH i#I i]=I i`I NjI inI NjI jI jJ jCJ#hbJ jJ AJ J J uK HK pK K K K jL k:L jWTL kL |kL k\L |kM lTM kM#M lM lN l4N lyN 'mN lN 'm>O mO 0mO mO Gn7P mbP GnP nP PnQ nAQ go~Q nQ goQ o2R pofR oR pR p!S p\S qS pS qS q9T qgT qT 7rT q.U 7rzU rU @rV rJV WsV rV WsW smW `sW sW u4X shX uX xvX uX xvY =zAY =zY {Y @zFY {EZ r|Z {Z r|Z 6[ |`[ [ A[ ![ A[ ,\ PO\ \ !\ !\ !] 5] 0WM] u] ] !] ] ^ !^ K^ Gy^ W^ G^ q^ P!_ q@_ ׁh_ W_ ׁ_ _ !_ #` N` l` ` т` !` т{ 3p{ W{ @{ W{ v1| `Z| v| | -| } 0N} s} 0} } 0S} "~ Y~ ^~ ~ ^~ $ `aM    ! P r  ؀   T; T[ qy  ́  ) Z     Q ~  ǃ  / EU  D TȄ D'  PPԅ  60 P &w 6 .͆ @ . D 0Yc   F܇  L v  Ï i I  ' G e   lj   ? e   ي  Z% ZG g  F FЋ s s# M v   qՌ   8 _   ƍ  @  ݎ  NO nz N w P' wa   - t   .  `  x#  q#H 4 #V x  œ   @ c      E v % Õ   # - T  n  Ȗ  #  A  `    З  $ @ v   ј  ; %b  ș   ! MS -x M \Ț P # \  l2 ` L l |ԛ p  |O  oȜ    / W 7} 7 7 L @  L% K Pad   מ  - J y   Ɵ  " B u S Cʠ S . `CR   C  CO Ct C  PC& j  C " 3a C 3ɤ  @C$ c  CХ   #B Cm 0   ݦ  d# C g   0ӧ y 0I yO ~ f ƨ   8 b  G ީ  2 T   ֪  R #Pm#P`#P Ϋ >  , dO $v   ݬ  S = M =- hp @( h  pEI  x   x 2 v C  1 #e      N ^ } > ^ ޲ S SN _ ` _Գ ~ `% ~d  Ѵ  K z     O   Զ  ' Y    J  ϸ i F i~ e pݹ e -Y p -˺   0> } 5 e 5 L @o d; ۼ  L  v!Ƚ  v!3 !l !L !; " !;& "Y # " # #0 #+c # 3$ $3 3$ $F @${j $ C% $ C%; %m P%{ % & % O> &q - &  -& 5X  5 6 6 8# 8U 8 8 8 E: E:6 ;b ; > ;J >  E/ R y $ J   C k > C> ># C>A b>~ P> b> x> p>H x> > > > >H > p > ? > ?- `Bf ? `B D `B+/ $&a D @E#@ @E LE4 LEs E E P\  $ JF Jl     E  EL E]k E 3G F3 3G HM @Gr# H nM H nMH Qv pM Q U R  U? 1[o Uq 1[ [ @[W  [- *\M *\j 5\ 5\ P\@#P  P\% zE e  J   # D i P\ ^\ P\ ^\ =]@ =]e ] @] ] __ ]o __& `H `_] ` Za Za  4X r      - L  ܊ , ܊  < 8b  ܎  ܎ H 4i    * [ '   f & R q    C ܖs  ܖ  ' X # # # J 0: Jp k P k 1 pV     Η; Z Η  З#  -3 -U - V 0& V gF `n g  p ! rP Rr r  6  9 d    3 V 3 3 3 q/ qh    , [   |  8, 8]  @q  A H A|  PF  f9 ^ f  pz 0 Li \ L  P, d p ` p J/ pW J  PB  .5 [ .  0  ~@ e ~    ,  4T  @p  )      "  F  n    @  L  @  "  :H  "a  L  u  P%  :  u  8  d            T  ?!  L  }u  }  }  d    D  d  ) p9 QQ n b B a  b  p n  C k   ` {      * F U s    /  / 4B 4w )    ##  @#6|D @b] @\ $ p  , # #X0 `aH `:e | #6 @  -## `\#@8  ^ `    ~ 0 / `EX#p# p3$ 0 `# % H Pp + # s  j 0C p  p)#`# 0  : ~&X As v `  cU d 8``)8++ `    ,@p)9###`#`## #d #3 }|J\n}(# 8u"1 >E a{ P4# D5 3R[o# #   [ & C >Rf `y Pd C2 #)BZ IQr P# ! . vQ^ i ;  4. II#[o 7 ##P #&  d3>  M g { `#  P:u   pC  !%!8!H!_! Pj\y!#0! )! F!! PEC"" 01">"V"j" @~l""" @E """# A)# `:#I#e#0#### `##Bo$# `e $ 5$#8F$  <Q$n$@#$$ `B;$$#$$7$ Ch% @1C%#0j%w%@#P% %%%H#%&&6& K&Y&`#0 t&& $&& &&&&''*' 1T'_'o'y'  ' '  ,9''''#(,(I(@#o((( ((( ])) ') F9)O) f) |)~))") C )@#) * @='* _A*V*#j* 0\x**#*.annobin_mysqlnd_connection.c.annobin_mysqlnd_connection.c_end.annobin_mysqlnd_connection.c.hot.annobin_mysqlnd_connection.c_end.hot.annobin_mysqlnd_connection.c.unlikely.annobin_mysqlnd_connection.c_end.unlikely.annobin_mysqlnd_connection.c.startup.annobin_mysqlnd_connection.c_end.startup.annobin_mysqlnd_connection.c.exit.annobin_mysqlnd_connection.c_end.exit.annobin_mysqlnd_mysqlnd_upsert_status_reset_pub.start.annobin_mysqlnd_mysqlnd_upsert_status_reset_pub.end.annobin_mysqlnd_mysqlnd_upsert_status_set_affected_rows_to_error_pub.start.annobin_mysqlnd_mysqlnd_upsert_status_set_affected_rows_to_error_pub.end.annobin_mysqlnd_error_list_pdtor.start.annobin_mysqlnd_error_list_pdtor.endmysqlnd_error_list_pdtor.annobin_mysqlnd_mysqlnd_connection_state_get_pub.start.annobin_mysqlnd_mysqlnd_connection_state_get_pub.endmysqlnd_mysqlnd_connection_state_get_pub.annobin_mysqlnd_mysqlnd_connection_state_set_pub.start.annobin_mysqlnd_mysqlnd_connection_state_set_pub.endmysqlnd_mysqlnd_connection_state_set_pub.annobin_mysqlnd_mysqlnd_conn_data_free_contents_pub.start.annobin_mysqlnd_mysqlnd_conn_data_free_contents_pub.endmysqlnd_mysqlnd_conn_data_free_contents_pub.annobin_mysqlnd_mysqlnd_conn_data_restart_psession_pub.start.annobin_mysqlnd_mysqlnd_conn_data_restart_psession_pub.endmysqlnd_mysqlnd_conn_data_restart_psession_pub.annobin_mysqlnd_mysqlnd_conn_data_end_psession_pub.start.annobin_mysqlnd_mysqlnd_conn_data_end_psession_pub.endmysqlnd_mysqlnd_conn_data_end_psession_pub.annobin_mysqlnd_mysqlnd_conn_data_get_updated_connect_flags_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_updated_connect_flags_pub.endmysqlnd_mysqlnd_conn_data_get_updated_connect_flags_pub.annobin_mysqlnd_mysqlnd_conn_connect_pub.start.annobin_mysqlnd_mysqlnd_conn_connect_pub.endmysqlnd_mysqlnd_conn_connect_pub.annobin_mysqlnd_mysqlnd_conn_data_send_query_pub.start.annobin_mysqlnd_mysqlnd_conn_data_send_query_pub.endmysqlnd_mysqlnd_conn_data_send_query_pub.annobin_mysqlnd_mysqlnd_conn_data_reap_query_pub.start.annobin_mysqlnd_mysqlnd_conn_data_reap_query_pub.endmysqlnd_mysqlnd_conn_data_reap_query_pub.annobin_mysqlnd_mysqlnd_conn_data_err_no_pub.start.annobin_mysqlnd_mysqlnd_conn_data_err_no_pub.endmysqlnd_mysqlnd_conn_data_err_no_pub.annobin_mysqlnd_mysqlnd_conn_data_error_pub.start.annobin_mysqlnd_mysqlnd_conn_data_error_pub.endmysqlnd_mysqlnd_conn_data_error_pub.annobin_mysqlnd_mysqlnd_conn_data_sqlstate_pub.start.annobin_mysqlnd_mysqlnd_conn_data_sqlstate_pub.endmysqlnd_mysqlnd_conn_data_sqlstate_pub.annobin_mysqlnd_mysqlnd_conn_data_ssl_set_pub.start.annobin_mysqlnd_mysqlnd_conn_data_ssl_set_pub.endmysqlnd_mysqlnd_conn_data_ssl_set_pub.annobin_mysqlnd_mysqlnd_conn_data_send_close_pub.start.annobin_mysqlnd_mysqlnd_conn_data_send_close_pub.endmysqlnd_mysqlnd_conn_data_send_close_pub.annobin_mysqlnd_mysqlnd_conn_data_get_reference_priv.start.annobin_mysqlnd_mysqlnd_conn_data_get_reference_priv.endmysqlnd_mysqlnd_conn_data_get_reference_priv.annobin_mysqlnd_mysqlnd_conn_data_field_count_pub.start.annobin_mysqlnd_mysqlnd_conn_data_field_count_pub.endmysqlnd_mysqlnd_conn_data_field_count_pub.annobin_mysqlnd_mysqlnd_conn_data_server_status_pub.start.annobin_mysqlnd_mysqlnd_conn_data_server_status_pub.endmysqlnd_mysqlnd_conn_data_server_status_pub.annobin_mysqlnd_mysqlnd_conn_data_insert_id_pub.start.annobin_mysqlnd_mysqlnd_conn_data_insert_id_pub.endmysqlnd_mysqlnd_conn_data_insert_id_pub.annobin_mysqlnd_mysqlnd_conn_data_affected_rows_pub.start.annobin_mysqlnd_mysqlnd_conn_data_affected_rows_pub.endmysqlnd_mysqlnd_conn_data_affected_rows_pub.annobin_mysqlnd_mysqlnd_conn_data_warning_count_pub.start.annobin_mysqlnd_mysqlnd_conn_data_warning_count_pub.endmysqlnd_mysqlnd_conn_data_warning_count_pub.annobin_mysqlnd_mysqlnd_conn_data_info_pub.start.annobin_mysqlnd_mysqlnd_conn_data_info_pub.endmysqlnd_mysqlnd_conn_data_info_pub.annobin_mysqlnd_mysqlnd_conn_data_get_server_info_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_server_info_pub.endmysqlnd_mysqlnd_conn_data_get_server_info_pub.annobin_mysqlnd_mysqlnd_conn_data_get_host_info_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_host_info_pub.endmysqlnd_mysqlnd_conn_data_get_host_info_pub.annobin_mysqlnd_mysqlnd_conn_data_get_proto_info_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_proto_info_pub.endmysqlnd_mysqlnd_conn_data_get_proto_info_pub.annobin_mysqlnd_mysqlnd_conn_data_charset_name_pub.start.annobin_mysqlnd_mysqlnd_conn_data_charset_name_pub.endmysqlnd_mysqlnd_conn_data_charset_name_pub.annobin_mysqlnd_mysqlnd_conn_data_thread_id_pub.start.annobin_mysqlnd_mysqlnd_conn_data_thread_id_pub.endmysqlnd_mysqlnd_conn_data_thread_id_pub.annobin_mysqlnd_mysqlnd_conn_data_more_results_pub.start.annobin_mysqlnd_mysqlnd_conn_data_more_results_pub.endmysqlnd_mysqlnd_conn_data_more_results_pub.annobin_mysqlnd_mysqlnd_conn_data_use_result_pub.start.annobin_mysqlnd_mysqlnd_conn_data_use_result_pub.endmysqlnd_mysqlnd_conn_data_use_result_pub.annobin_mysqlnd_mysqlnd_conn_data_store_result_pub.start.annobin_mysqlnd_mysqlnd_conn_data_store_result_pub.endmysqlnd_mysqlnd_conn_data_store_result_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_commit_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_commit_pub.endmysqlnd_mysqlnd_conn_data_tx_commit_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_rollback_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_rollback_pub.endmysqlnd_mysqlnd_conn_data_tx_rollback_pub.annobin_mysqlnd_mysqlnd_conn_data_negotiate_client_api_capabilities_pub.start.annobin_mysqlnd_mysqlnd_conn_data_negotiate_client_api_capabilities_pub.endmysqlnd_mysqlnd_conn_data_negotiate_client_api_capabilities_pub.annobin_mysqlnd_mysqlnd_conn_data_get_client_api_capabilities_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_client_api_capabilities_pub.endmysqlnd_mysqlnd_conn_data_get_client_api_capabilities_pub.annobin_mysqlnd_mysqlnd_conn_data_local_tx_start_pub.start.annobin_mysqlnd_mysqlnd_conn_data_local_tx_start_pub.endmysqlnd_mysqlnd_conn_data_local_tx_start_pub.annobin_mysqlnd_mysqlnd_conn_data_local_tx_end_pub.start.annobin_mysqlnd_mysqlnd_conn_data_local_tx_end_pub.endmysqlnd_mysqlnd_conn_data_local_tx_end_pub.annobin_mysqlnd_mysqlnd_conn_data_stmt_init_pub.start.annobin_mysqlnd_mysqlnd_conn_data_stmt_init_pub.end.annobin_mysqlnd_mysqlnd_conn_clone_object_pub.start.annobin_mysqlnd_mysqlnd_conn_clone_object_pub.endmysqlnd_mysqlnd_conn_clone_object_pub.annobin_mysqlnd_mysqlnd_conn_dtor_priv.start.annobin_mysqlnd_mysqlnd_conn_dtor_priv.endmysqlnd_mysqlnd_conn_dtor_priv.annobin_mysqlnd_mysqlnd_conn_close_pub.start.annobin_mysqlnd_mysqlnd_conn_close_pub.endmysqlnd_mysqlnd_conn_close_pubclose_type_to_stat_map.19554.annobin_mysqlnd_mysqlnd_error_info_reset_pub.start.annobin_mysqlnd_mysqlnd_error_info_reset_pub.endmysqlnd_mysqlnd_error_info_reset_pub.annobin_mysqlnd_mysqlnd_conn_data_list_method_pub.start.annobin_mysqlnd_mysqlnd_conn_data_list_method_pub.end.annobin_mysqlnd_mysqlnd_conn_data_fetch_auth_plugin_by_name_pub.start.annobin_mysqlnd_mysqlnd_conn_data_fetch_auth_plugin_by_name_pub.endmysqlnd_mysqlnd_conn_data_fetch_auth_plugin_by_name_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_cor_options_to_string_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_cor_options_to_string_pub.endmysqlnd_mysqlnd_conn_data_tx_cor_options_to_string_pub.annobin_mysqlnd_escape_string_for_tx_name_in_comment.start.annobin_mysqlnd_escape_string_for_tx_name_in_comment.endmysqlnd_escape_string_for_tx_name_in_commentmysqlnd_escape_string_for_tx_name_in_comment.cold.26.annobin_mysqlnd_mysqlnd_conn_data_set_charset_pub.start.annobin_mysqlnd_mysqlnd_conn_data_set_charset_pub.endmysqlnd_mysqlnd_conn_data_set_charset_pubmysqlnd_mysqlnd_conn_data_set_charset_pub.cold.27.annobin_mysqlnd_mysqlnd_conn_data_free_options_pub.start.annobin_mysqlnd_mysqlnd_conn_data_free_options_pub.endmysqlnd_mysqlnd_conn_data_free_options_pub.annobin_mysqlnd_mysqlnd_conn_data_get_server_version_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_server_version_pub.endmysqlnd_mysqlnd_conn_data_get_server_version_pub.annobin_mysqlnd_mysqlnd_conn_data_get_connection_stats_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_connection_stats_pub.endmysqlnd_mysqlnd_conn_data_get_connection_stats_pub.annobin_mysqlnd_mysqlnd_conn_data_change_user_pub.start.annobin_mysqlnd_mysqlnd_conn_data_change_user_pub.endmysqlnd_mysqlnd_conn_data_change_user_pub.annobin_mysqlnd_mysqlnd_conn_data_connect_pub.start.annobin_mysqlnd_mysqlnd_conn_data_connect_pub.endmysqlnd_mysqlnd_conn_data_connect_pubmysqlnd_mysqlnd_conn_data_connect_pub.cold.28.annobin_mysqlnd_stream_array_to_fd_set.start.annobin_mysqlnd_stream_array_to_fd_set.endmysqlnd_stream_array_to_fd_set.annobin_mysqlnd_stream_array_from_fd_set.start.annobin_mysqlnd_stream_array_from_fd_set.endmysqlnd_stream_array_from_fd_set.annobin_mysqlnd_mysqlnd_conn_data_set_server_option_pub.start.annobin_mysqlnd_mysqlnd_conn_data_set_server_option_pub.endmysqlnd_mysqlnd_conn_data_set_server_option_pub.annobin_mysqlnd_mysqlnd_conn_data_connect_handshake_pub.start.annobin_mysqlnd_mysqlnd_conn_data_connect_handshake_pub.endmysqlnd_mysqlnd_conn_data_connect_handshake_pub.annobin_mysqlnd_mysqlnd_conn_data_query_pub.start.annobin_mysqlnd_mysqlnd_conn_data_query_pub.endmysqlnd_mysqlnd_conn_data_query_pub.annobin_mysqlnd_mysqlnd_conn_data_dump_debug_info_pub.start.annobin_mysqlnd_mysqlnd_conn_data_dump_debug_info_pub.endmysqlnd_mysqlnd_conn_data_dump_debug_info_pub.annobin_mysqlnd_mysqlnd_conn_data_select_db_pub.start.annobin_mysqlnd_mysqlnd_conn_data_select_db_pub.endmysqlnd_mysqlnd_conn_data_select_db_pub.annobin_mysqlnd_mysqlnd_conn_data_ping_pub.start.annobin_mysqlnd_mysqlnd_conn_data_ping_pub.endmysqlnd_mysqlnd_conn_data_ping_pub.annobin_mysqlnd_mysqlnd_conn_data_statistic_pub.start.annobin_mysqlnd_mysqlnd_conn_data_statistic_pub.endmysqlnd_mysqlnd_conn_data_statistic_pub.annobin_mysqlnd_mysqlnd_conn_data_kill_pub.start.annobin_mysqlnd_mysqlnd_conn_data_kill_pub.endmysqlnd_mysqlnd_conn_data_kill_pub.annobin_mysqlnd_mysqlnd_conn_data_refresh_pub.start.annobin_mysqlnd_mysqlnd_conn_data_refresh_pub.endmysqlnd_mysqlnd_conn_data_refresh_pub.annobin_mysqlnd_mysqlnd_conn_data_shutdown_pub.start.annobin_mysqlnd_mysqlnd_conn_data_shutdown_pub.endmysqlnd_mysqlnd_conn_data_shutdown_pub.annobin_mysqlnd_mysqlnd_conn_data_free_reference_priv.start.annobin_mysqlnd_mysqlnd_conn_data_free_reference_priv.endmysqlnd_mysqlnd_conn_data_free_reference_priv.annobin_mysqlnd_mysqlnd_conn_data_set_autocommit_pub.start.annobin_mysqlnd_mysqlnd_conn_data_set_autocommit_pub.endmysqlnd_mysqlnd_conn_data_set_autocommit_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_savepoint_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_savepoint_pub.endmysqlnd_mysqlnd_conn_data_tx_savepoint_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_savepoint_release_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_savepoint_release_pub.endmysqlnd_mysqlnd_conn_data_tx_savepoint_release_pub.annobin_mysqlnd_mysqlnd_error_info_set_client_error_pub.start.annobin_mysqlnd_mysqlnd_error_info_set_client_error_pub.endmysqlnd_mysqlnd_error_info_set_client_error_pub.annobin_mysqlnd_mysqlnd_conn_data_execute_init_commands_pub.start.annobin_mysqlnd_mysqlnd_conn_data_execute_init_commands_pub.endmysqlnd_mysqlnd_conn_data_execute_init_commands_pub.annobin_mysqlnd_mysqlnd_conn_data_get_scheme_pub.start.annobin_mysqlnd_mysqlnd_conn_data_get_scheme_pub.endmysqlnd_mysqlnd_conn_data_get_scheme_pub.annobin_mysqlnd_mysqlnd_conn_data_set_client_option_2d_pub.start.annobin_mysqlnd_mysqlnd_conn_data_set_client_option_2d_pub.endmysqlnd_mysqlnd_conn_data_set_client_option_2d_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_commit_or_rollback_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_commit_or_rollback_pub.endmysqlnd_mysqlnd_conn_data_tx_commit_or_rollback_pub.annobin_mysqlnd_mysqlnd_conn_data_tx_begin_pub.start.annobin_mysqlnd_mysqlnd_conn_data_tx_begin_pub.endmysqlnd_mysqlnd_conn_data_tx_begin_pubmysqlnd_mysqlnd_conn_data_tx_begin_pub.cold.29.annobin_mysqlnd_mysqlnd_conn_data_set_client_option_pub.start.annobin_mysqlnd_mysqlnd_conn_data_set_client_option_pub.endmysqlnd_mysqlnd_conn_data_set_client_option_pub.annobin_mysqlnd_mysqlnd_conn_data_next_result_pub.start.annobin_mysqlnd_mysqlnd_conn_data_next_result_pub.endmysqlnd_mysqlnd_conn_data_next_result_pub.annobin_mysqlnd_mysqlnd_conn_data_escape_string_pub.start.annobin_mysqlnd_mysqlnd_conn_data_escape_string_pub.endmysqlnd_mysqlnd_conn_data_escape_string_pub.annobin_mysqlnd_upsert_status_init.start.annobin_mysqlnd_upsert_status_init.end.annobin_mysqlnd_error_info_init.start.annobin_mysqlnd_error_info_init.end.annobin_mysqlnd_error_info_free_contents.start.annobin_mysqlnd_error_info_free_contents.end.annobin_mysqlnd_mysqlnd_conn_data_dtor_priv.start.annobin_mysqlnd_mysqlnd_conn_data_dtor_priv.endmysqlnd_mysqlnd_conn_data_dtor_priv.annobin_mysqlnd_connection_state_init.start.annobin_mysqlnd_connection_state_init.end.annobin_mysqlnd_old_escape_string.start.annobin_mysqlnd_old_escape_string.end.annobin_mysqlnd_get_client_info.start.annobin_mysqlnd_get_client_info.end.annobin_mysqlnd_get_client_version.start.annobin_mysqlnd_get_client_version.end.annobin_mysqlnd_field_type_name.start.annobin_mysqlnd_field_type_name.end.annobin_mysqlnd_stream_array_check_for_readiness.start.annobin_mysqlnd_stream_array_check_for_readiness.end.annobin_mysqlnd_poll.start.annobin_mysqlnd_poll.end.annobin_mysqlnd_connection_init.start.annobin_mysqlnd_connection_init.end.annobin_mysqlnd_connection_connect.start.annobin_mysqlnd_connection_connect.end.annobin_mysqlnd_alloc.c.annobin_mysqlnd_alloc.c_end.annobin_mysqlnd_alloc.c.hot.annobin_mysqlnd_alloc.c_end.hot.annobin_mysqlnd_alloc.c.unlikely.annobin_mysqlnd_alloc.c_end.unlikely.annobin_mysqlnd_alloc.c.startup.annobin_mysqlnd_alloc.c_end.startup.annobin_mysqlnd_alloc.c.exit.annobin_mysqlnd_alloc.c_end.exit.annobin__mysqlnd_sprintf_free.start.annobin__mysqlnd_sprintf_free.end_mysqlnd_sprintf_free.annobin__mysqlnd_efree.start.annobin__mysqlnd_efree.end_mysqlnd_efree.annobin__mysqlnd_vsprintf.start.annobin__mysqlnd_vsprintf.end_mysqlnd_vsprintf.annobin__mysqlnd_sprintf.start.annobin__mysqlnd_sprintf.end_mysqlnd_sprintf.annobin__mysqlnd_pestrndup.start.annobin__mysqlnd_pestrndup.end_mysqlnd_pestrndup.annobin__mysqlnd_pemalloc.start.annobin__mysqlnd_pemalloc.end_mysqlnd_pemalloc.annobin__mysqlnd_emalloc.start.annobin__mysqlnd_emalloc.end_mysqlnd_emalloc.annobin__mysqlnd_pememdup.start.annobin__mysqlnd_pememdup.end_mysqlnd_pememdup.annobin__mysqlnd_pestrdup.start.annobin__mysqlnd_pestrdup.end_mysqlnd_pestrdup.annobin__mysqlnd_free.start.annobin__mysqlnd_free.end_mysqlnd_free.annobin__mysqlnd_pefree.start.annobin__mysqlnd_pefree.end_mysqlnd_pefree.annobin__mysqlnd_realloc.start.annobin__mysqlnd_realloc.end_mysqlnd_realloc.annobin__mysqlnd_calloc.start.annobin__mysqlnd_calloc.end_mysqlnd_calloc.annobin__mysqlnd_malloc.start.annobin__mysqlnd_malloc.end_mysqlnd_malloc.annobin__mysqlnd_perealloc.start.annobin__mysqlnd_perealloc.end_mysqlnd_perealloc.annobin__mysqlnd_erealloc.start.annobin__mysqlnd_erealloc.end_mysqlnd_erealloc.annobin__mysqlnd_pecalloc.start.annobin__mysqlnd_pecalloc.end_mysqlnd_pecalloc.annobin__mysqlnd_ecalloc.start.annobin__mysqlnd_ecalloc.end_mysqlnd_ecallocmysqlnd_emalloc_namemysqlnd_ecalloc_namemysqlnd_efree_namemysqlnd_erealloc_namemysqlnd_pemalloc_namemysqlnd_pecalloc_namemysqlnd_pefree_namemysqlnd_perealloc_namemysqlnd_malloc_namemysqlnd_calloc_namemysqlnd_realloc_namemysqlnd_free_namemysqlnd_pestrndup_name.annobin_mysqlnd_charset.c.annobin_mysqlnd_charset.c_end.annobin_mysqlnd_charset.c.hot.annobin_mysqlnd_charset.c_end.hot.annobin_mysqlnd_charset.c.unlikely.annobin_mysqlnd_charset.c_end.unlikely.annobin_mysqlnd_charset.c.startup.annobin_mysqlnd_charset.c_end.startup.annobin_mysqlnd_charset.c.exit.annobin_mysqlnd_charset.c_end.exit.annobin_check_mb_utf8mb3_valid.start.annobin_check_mb_utf8mb3_valid.endcheck_mb_utf8mb3_valid.annobin_check_mb_utf8_valid.start.annobin_check_mb_utf8_valid.endcheck_mb_utf8_valid.annobin_check_mb_big5.start.annobin_check_mb_big5.endcheck_mb_big5.annobin_mysqlnd_mbcharlen_big5.start.annobin_mysqlnd_mbcharlen_big5.endmysqlnd_mbcharlen_big5.annobin_check_mb_cp932.start.annobin_check_mb_cp932.endcheck_mb_cp932.annobin_mysqlnd_mbcharlen_cp932.start.annobin_mysqlnd_mbcharlen_cp932.endmysqlnd_mbcharlen_cp932.annobin_mysqlnd_mbcharlen_euckr.start.annobin_mysqlnd_mbcharlen_euckr.endmysqlnd_mbcharlen_euckr.annobin_mysqlnd_mbcharlen_eucjpms.start.annobin_mysqlnd_mbcharlen_eucjpms.endmysqlnd_mbcharlen_eucjpms.annobin_check_mb_gb2312.start.annobin_check_mb_gb2312.endcheck_mb_gb2312.annobin_mysqlnd_mbcharlen_gb2312.start.annobin_mysqlnd_mbcharlen_gb2312.endmysqlnd_mbcharlen_gb2312.annobin_check_mb_gbk.start.annobin_check_mb_gbk.endcheck_mb_gbk.annobin_mysqlnd_mbcharlen_gbk.start.annobin_mysqlnd_mbcharlen_gbk.endmysqlnd_mbcharlen_gbk.annobin_check_mb_sjis.start.annobin_check_mb_sjis.endcheck_mb_sjis.annobin_mysqlnd_mbcharlen_sjis.start.annobin_mysqlnd_mbcharlen_sjis.endmysqlnd_mbcharlen_sjis.annobin_check_mb_ucs2.start.annobin_check_mb_ucs2.endcheck_mb_ucs2.annobin_mysqlnd_mbcharlen_ucs2.start.annobin_mysqlnd_mbcharlen_ucs2.endmysqlnd_mbcharlen_ucs2.annobin_mysqlnd_mbcharlen_ujis.start.annobin_mysqlnd_mbcharlen_ujis.endmysqlnd_mbcharlen_ujis.annobin_mysqlnd_mbcharlen_utf16.start.annobin_mysqlnd_mbcharlen_utf16.endmysqlnd_mbcharlen_utf16.annobin_check_mb_utf32.start.annobin_check_mb_utf32.endcheck_mb_utf32.annobin_mysqlnd_mbcharlen_utf32.start.annobin_mysqlnd_mbcharlen_utf32.endmysqlnd_mbcharlen_utf32.annobin_mysqlnd_find_charset_nr.start.annobin_mysqlnd_find_charset_nr.end.annobin_mysqlnd_cset_escape_quotes.start.annobin_mysqlnd_cset_escape_quotes.end.annobin_mysqlnd_cset_escape_slashes.start.annobin_mysqlnd_cset_escape_slashes.end.annobin_mysqlnd_mbcharlen_utf8mb3.start.annobin_mysqlnd_mbcharlen_utf8mb3.endmysqlnd_mbcharlen_utf8mb3.annobin_mysqlnd_mbcharlen_utf8.start.annobin_mysqlnd_mbcharlen_utf8.endmysqlnd_mbcharlen_utf8.annobin_check_mb_euckr.start.annobin_check_mb_euckr.endcheck_mb_euckr.annobin_check_mb_eucjpms.start.annobin_check_mb_eucjpms.endcheck_mb_eucjpms.annobin_check_mb_ujis.start.annobin_check_mb_ujis.endcheck_mb_ujis.annobin_check_mb_utf16.start.annobin_check_mb_utf16.endcheck_mb_utf16.annobin_mysqlnd_mbcharlen_gb18030.start.annobin_mysqlnd_mbcharlen_gb18030.endmysqlnd_mbcharlen_gb18030.annobin_my_ismbchar_gb18030.start.annobin_my_ismbchar_gb18030.endmy_ismbchar_gb18030.annobin_mysqlnd_find_charset_name.start.annobin_mysqlnd_find_charset_name.end.annobin_mysqlnd_charsets_plugin_register.start.annobin_mysqlnd_charsets_plugin_register.endmysqlnd_plugin_charsets_plugin.annobin_mysqlnd_wireprotocol.c.annobin_mysqlnd_wireprotocol.c_end.annobin_mysqlnd_wireprotocol.c.hot.annobin_mysqlnd_wireprotocol.c_end.hot.annobin_mysqlnd_wireprotocol.c.unlikely.annobin_mysqlnd_wireprotocol.c_end.unlikely.annobin_mysqlnd_wireprotocol.c.startup.annobin_mysqlnd_wireprotocol.c_end.startup.annobin_mysqlnd_wireprotocol.c.exit.annobin_mysqlnd_wireprotocol.c_end.exit.annobin_php_mysqlnd_rowp_free_mem.start.annobin_php_mysqlnd_rowp_free_mem.endphp_mysqlnd_rowp_free_mem.annobin_php_mysqlnd_sha256_pk_request_write.start.annobin_php_mysqlnd_sha256_pk_request_write.endphp_mysqlnd_sha256_pk_request_write.annobin_mysqlnd_mysqlnd_protocol_get_greet_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_greet_packet_pub.endmysqlnd_mysqlnd_protocol_get_greet_packet_pubpacket_methods.annobin_mysqlnd_mysqlnd_protocol_get_auth_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_auth_packet_pub.endmysqlnd_mysqlnd_protocol_get_auth_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_auth_response_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_auth_response_packet_pub.endmysqlnd_mysqlnd_protocol_get_auth_response_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_change_auth_response_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_change_auth_response_packet_pub.endmysqlnd_mysqlnd_protocol_get_change_auth_response_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_ok_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_ok_packet_pub.endmysqlnd_mysqlnd_protocol_get_ok_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_eof_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_eof_packet_pub.endmysqlnd_mysqlnd_protocol_get_eof_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_command_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_command_packet_pub.endmysqlnd_mysqlnd_protocol_get_command_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_rset_header_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_rset_header_packet_pub.endmysqlnd_mysqlnd_protocol_get_rset_header_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_result_field_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_result_field_packet_pub.endmysqlnd_mysqlnd_protocol_get_result_field_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_row_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_row_packet_pub.endmysqlnd_mysqlnd_protocol_get_row_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_stats_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_stats_packet_pub.endmysqlnd_mysqlnd_protocol_get_stats_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_prepare_response_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_prepare_response_packet_pub.endmysqlnd_mysqlnd_protocol_get_prepare_response_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_change_user_response_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_change_user_response_packet_pub.endmysqlnd_mysqlnd_protocol_get_change_user_response_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_sha256_pk_request_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_sha256_pk_request_packet_pub.endmysqlnd_mysqlnd_protocol_get_sha256_pk_request_packet_pub.annobin_mysqlnd_mysqlnd_protocol_get_sha256_pk_request_response_packet_pub.start.annobin_mysqlnd_mysqlnd_protocol_get_sha256_pk_request_response_packet_pub.endmysqlnd_mysqlnd_protocol_get_sha256_pk_request_response_packet_pub.annobin_mysqlnd_mysqlnd_protocol_send_command_handle_OK_pub.start.annobin_mysqlnd_mysqlnd_protocol_send_command_handle_OK_pub.endmysqlnd_mysqlnd_protocol_send_command_handle_OK_pub.annobin_php_mysqlnd_change_auth_response_write.start.annobin_php_mysqlnd_change_auth_response_write.endphp_mysqlnd_change_auth_response_write.annobin_php_mysqlnd_cmd_write.start.annobin_php_mysqlnd_cmd_write.end.annobin_mysqlnd_mysqlnd_protocol_send_command_handle_EOF_pub.start.annobin_mysqlnd_mysqlnd_protocol_send_command_handle_EOF_pub.endmysqlnd_mysqlnd_protocol_send_command_handle_EOF_pub.annobin_mysqlnd_mysqlnd_protocol_send_command_handle_response_pub.start.annobin_mysqlnd_mysqlnd_protocol_send_command_handle_response_pub.endmysqlnd_mysqlnd_protocol_send_command_handle_response_pub.annobin_mysqlnd_mysqlnd_protocol_send_command_pub.start.annobin_mysqlnd_mysqlnd_protocol_send_command_pub.endmysqlnd_mysqlnd_protocol_send_command_pub.annobin_php_mysqlnd_auth_free_mem.start.annobin_php_mysqlnd_auth_free_mem.endphp_mysqlnd_auth_free_mem.annobin_php_mysqlnd_auth_response_free_mem.start.annobin_php_mysqlnd_auth_response_free_mem.endphp_mysqlnd_auth_response_free_mem.annobin_php_mysqlnd_change_auth_response_free_mem.start.annobin_php_mysqlnd_change_auth_response_free_mem.endphp_mysqlnd_change_auth_response_free_mem.annobin_php_mysqlnd_ok_free_mem.start.annobin_php_mysqlnd_ok_free_mem.endphp_mysqlnd_ok_free_mem.annobin_php_mysqlnd_eof_free_mem.start.annobin_php_mysqlnd_eof_free_mem.endphp_mysqlnd_eof_free_mem.annobin_php_mysqlnd_cmd_free_mem.start.annobin_php_mysqlnd_cmd_free_mem.endphp_mysqlnd_cmd_free_mem.annobin_php_mysqlnd_rset_header_free_mem.start.annobin_php_mysqlnd_rset_header_free_mem.endphp_mysqlnd_rset_header_free_mem.annobin_php_mysqlnd_rset_field_free_mem.start.annobin_php_mysqlnd_rset_field_free_mem.endphp_mysqlnd_rset_field_free_mem.annobin_php_mysqlnd_stats_free_mem.start.annobin_php_mysqlnd_stats_free_mem.endphp_mysqlnd_stats_free_mem.annobin_php_mysqlnd_prepare_free_mem.start.annobin_php_mysqlnd_prepare_free_mem.endphp_mysqlnd_prepare_free_mem.annobin_php_mysqlnd_chg_user_free_mem.start.annobin_php_mysqlnd_chg_user_free_mem.endphp_mysqlnd_chg_user_free_mem.annobin_php_mysqlnd_sha256_pk_request_free_mem.start.annobin_php_mysqlnd_sha256_pk_request_free_mem.endphp_mysqlnd_sha256_pk_request_free_mem.annobin_php_mysqlnd_sha256_pk_request_response_free_mem.start.annobin_php_mysqlnd_sha256_pk_request_response_free_mem.endphp_mysqlnd_sha256_pk_request_response_free_mem.annobin_mysqlnd_read_header.isra.16.start.annobin_mysqlnd_read_header.isra.16.endmysqlnd_read_header.isra.16mysqlnd_read_header.isra.16.cold.23.annobin_mysqlnd_read_packet_header_and_body.isra.17.start.annobin_mysqlnd_read_packet_header_and_body.isra.17.endmysqlnd_read_packet_header_and_body.isra.17packet_type_to_statistic_byte_countpacket_type_to_statistic_packet_count.annobin_php_mysqlnd_sha256_pk_request_response_read.start.annobin_php_mysqlnd_sha256_pk_request_response_read.endphp_mysqlnd_sha256_pk_request_response_readphp_mysqlnd_sha256_pk_request_response_read.cold.24.annobin_php_mysqlnd_stats_read.start.annobin_php_mysqlnd_stats_read.endphp_mysqlnd_stats_read.annobin_php_mysqlnd_greet_free_mem.start.annobin_php_mysqlnd_greet_free_mem.endphp_mysqlnd_greet_free_mem.annobin_php_mysqlnd_read_error_from_line.constprop.22.start.annobin_php_mysqlnd_read_error_from_line.constprop.22.endphp_mysqlnd_read_error_from_line.constprop.22.annobin_php_mysqlnd_greet_read.start.annobin_php_mysqlnd_greet_read.endphp_mysqlnd_greet_readphp_mysqlnd_greet_read.cold.25.annobin_php_mysqlnd_chg_user_read.start.annobin_php_mysqlnd_chg_user_read.endphp_mysqlnd_chg_user_readphp_mysqlnd_chg_user_read.cold.26.annobin_php_mysqlnd_rowp_read.start.annobin_php_mysqlnd_rowp_read.endphp_mysqlnd_rowp_readphp_mysqlnd_rowp_read.cold.27.annobin_php_mysqlnd_prepare_read.start.annobin_php_mysqlnd_prepare_read.endphp_mysqlnd_prepare_readphp_mysqlnd_prepare_read.cold.28.annobin_php_mysqlnd_eof_read.start.annobin_php_mysqlnd_eof_read.endphp_mysqlnd_eof_readphp_mysqlnd_eof_read.cold.29.annobin_php_mysqlnd_net_field_length.start.annobin_php_mysqlnd_net_field_length.end.annobin_php_mysqlnd_rset_field_read.start.annobin_php_mysqlnd_rset_field_read.endphp_mysqlnd_rset_field_readrset_field_offsetsphp_mysqlnd_rset_field_read.cold.30.annobin_php_mysqlnd_net_field_length_ll.start.annobin_php_mysqlnd_net_field_length_ll.end.annobin_php_mysqlnd_rset_header_read.start.annobin_php_mysqlnd_rset_header_read.endphp_mysqlnd_rset_header_readphp_mysqlnd_rset_header_read.cold.31.annobin_php_mysqlnd_ok_read.start.annobin_php_mysqlnd_ok_read.endphp_mysqlnd_ok_readphp_mysqlnd_ok_read.cold.32.annobin_php_mysqlnd_auth_response_read.start.annobin_php_mysqlnd_auth_response_read.endphp_mysqlnd_auth_response_readphp_mysqlnd_auth_response_read.cold.33.annobin_php_mysqlnd_net_store_length.start.annobin_php_mysqlnd_net_store_length.end.annobin_php_mysqlnd_auth_write.start.annobin_php_mysqlnd_auth_write.endphp_mysqlnd_auth_write.annobin_php_mysqlnd_net_store_length_size.start.annobin_php_mysqlnd_net_store_length_size.end.annobin_php_mysqlnd_rowp_read_binary_protocol.start.annobin_php_mysqlnd_rowp_read_binary_protocol.endphp_mysqlnd_rowp_read_binary_protocol.cold.34.annobin_php_mysqlnd_rowp_read_text_protocol_aux.start.annobin_php_mysqlnd_rowp_read_text_protocol_aux.endphp_mysqlnd_rowp_read_text_protocol_aux.cold.35.annobin_php_mysqlnd_rowp_read_text_protocol_zval.start.annobin_php_mysqlnd_rowp_read_text_protocol_zval.end.annobin_php_mysqlnd_rowp_read_text_protocol_c.start.annobin_php_mysqlnd_rowp_read_text_protocol_c.end.annobin_mysqlnd_protocol_payload_decoder_factory_init.start.annobin_mysqlnd_protocol_payload_decoder_factory_init.end.annobin_mysqlnd_protocol_payload_decoder_factory_free.start.annobin_mysqlnd_protocol_payload_decoder_factory_free.end.annobin_mysqlnd_loaddata.c.annobin_mysqlnd_loaddata.c_end.annobin_mysqlnd_loaddata.c.hot.annobin_mysqlnd_loaddata.c_end.hot.annobin_mysqlnd_loaddata.c.unlikely.annobin_mysqlnd_loaddata.c_end.unlikely.annobin_mysqlnd_loaddata.c.startup.annobin_mysqlnd_loaddata.c_end.startup.annobin_mysqlnd_loaddata.c.exit.annobin_mysqlnd_loaddata.c_end.exit.annobin_mysqlnd_local_infile_error.start.annobin_mysqlnd_local_infile_error.endmysqlnd_local_infile_error.annobin_mysqlnd_local_infile_init.start.annobin_mysqlnd_local_infile_init.endmysqlnd_local_infile_init.annobin_mysqlnd_local_infile_end.start.annobin_mysqlnd_local_infile_end.endmysqlnd_local_infile_end.annobin_mysqlnd_local_infile_read.start.annobin_mysqlnd_local_infile_read.endmysqlnd_local_infile_read.annobin_mysqlnd_local_infile_default.start.annobin_mysqlnd_local_infile_default.end.annobin_mysqlnd_handle_local_infile.start.annobin_mysqlnd_handle_local_infile.endmysqlnd_handle_local_infile.cold.3.annobin_mysqlnd_reverse_api.c.annobin_mysqlnd_reverse_api.c_end.annobin_mysqlnd_reverse_api.c.hot.annobin_mysqlnd_reverse_api.c_end.hot.annobin_mysqlnd_reverse_api.c.unlikely.annobin_mysqlnd_reverse_api.c_end.unlikely.annobin_mysqlnd_reverse_api.c.startup.annobin_mysqlnd_reverse_api.c_end.startup.annobin_mysqlnd_reverse_api.c.exit.annobin_mysqlnd_reverse_api.c_end.exit.annobin_mysqlnd_reverse_api_init.start.annobin_mysqlnd_reverse_api_init.endmysqlnd_api_ext_ht.annobin_mysqlnd_reverse_api_end.start.annobin_mysqlnd_reverse_api_end.end.annobin_mysqlnd_reverse_api_get_api_list.start.annobin_mysqlnd_reverse_api_get_api_list.end.annobin_mysqlnd_reverse_api_register_api.start.annobin_mysqlnd_reverse_api_register_api.end.annobin_zval_to_mysqlnd.start.annobin_zval_to_mysqlnd.end.annobin_mysqlnd_vio.c.annobin_mysqlnd_vio.c_end.annobin_mysqlnd_vio.c.hot.annobin_mysqlnd_vio.c_end.hot.annobin_mysqlnd_vio.c.unlikely.annobin_mysqlnd_vio.c_end.unlikely.annobin_mysqlnd_vio.c.startup.annobin_mysqlnd_vio.c_end.startup.annobin_mysqlnd_vio.c.exit.annobin_mysqlnd_vio.c_end.exit.annobin_mysqlnd_mysqlnd_vio_connect_pub.start.annobin_mysqlnd_mysqlnd_vio_connect_pub.endmysqlnd_mysqlnd_vio_connect_pub.annobin_mysqlnd_mysqlnd_vio_set_client_option_pub.start.annobin_mysqlnd_mysqlnd_vio_set_client_option_pub.endmysqlnd_mysqlnd_vio_set_client_option_pub.annobin_mysqlnd_mysqlnd_vio_consume_uneaten_data_pub.start.annobin_mysqlnd_mysqlnd_vio_consume_uneaten_data_pub.end.annobin_mysqlnd_mysqlnd_vio_disable_ssl_pub.start.annobin_mysqlnd_mysqlnd_vio_disable_ssl_pub.endmysqlnd_mysqlnd_vio_disable_ssl_pub.annobin_mysqlnd_mysqlnd_vio_free_contents_pub.start.annobin_mysqlnd_mysqlnd_vio_free_contents_pub.endmysqlnd_mysqlnd_vio_free_contents_pub.annobin_mysqlnd_mysqlnd_vio_init_pub.start.annobin_mysqlnd_mysqlnd_vio_init_pub.endmysqlnd_mysqlnd_vio_init_pub.annobin_mysqlnd_mysqlnd_vio_dtor_pub.start.annobin_mysqlnd_mysqlnd_vio_dtor_pub.endmysqlnd_mysqlnd_vio_dtor_pub.annobin_mysqlnd_mysqlnd_vio_get_stream_pub.start.annobin_mysqlnd_mysqlnd_vio_get_stream_pub.endmysqlnd_mysqlnd_vio_get_stream_pub.annobin_mysqlnd_mysqlnd_vio_set_stream_pub.start.annobin_mysqlnd_mysqlnd_vio_set_stream_pub.endmysqlnd_mysqlnd_vio_set_stream_pub.annobin_mysqlnd_mysqlnd_vio_has_valid_stream_pub.start.annobin_mysqlnd_mysqlnd_vio_has_valid_stream_pub.endmysqlnd_mysqlnd_vio_has_valid_stream_pub.annobin_mysqlnd_mysqlnd_vio_network_write_pub.start.annobin_mysqlnd_mysqlnd_vio_network_write_pub.endmysqlnd_mysqlnd_vio_network_write_pub.annobin_mysqlnd_mysqlnd_vio_network_read_pub.start.annobin_mysqlnd_mysqlnd_vio_network_read_pub.endmysqlnd_mysqlnd_vio_network_read_pub.annobin_mysqlnd_mysqlnd_vio_enable_ssl_pub.start.annobin_mysqlnd_mysqlnd_vio_enable_ssl_pub.endmysqlnd_mysqlnd_vio_enable_ssl_pubmysqlnd_mysqlnd_vio_enable_ssl_pub.cold.7.annobin_mysqlnd_mysqlnd_vio_get_open_stream_pub.start.annobin_mysqlnd_mysqlnd_vio_get_open_stream_pub.endmysqlnd_mysqlnd_vio_get_open_stream_pub.annobin_mysqlnd_mysqlnd_vio_open_tcp_or_unix_pub.start.annobin_mysqlnd_mysqlnd_vio_open_tcp_or_unix_pub.endmysqlnd_mysqlnd_vio_open_tcp_or_unix_pub.annobin_mysqlnd_mysqlnd_vio_post_connect_set_opt_pub.start.annobin_mysqlnd_mysqlnd_vio_post_connect_set_opt_pub.endmysqlnd_mysqlnd_vio_post_connect_set_opt_pub.annobin_mysqlnd_mysqlnd_vio_open_pipe_pub.start.annobin_mysqlnd_mysqlnd_vio_open_pipe_pub.endmysqlnd_mysqlnd_vio_open_pipe_pub.annobin_mysqlnd_mysqlnd_vio_close_stream_pub.start.annobin_mysqlnd_mysqlnd_vio_close_stream_pub.endmysqlnd_mysqlnd_vio_close_stream_pub.annobin_mysqlnd_vio_init.start.annobin_mysqlnd_vio_init.end.annobin_mysqlnd_vio_free.start.annobin_mysqlnd_vio_free.end.annobin_mysqlnd_protocol_frame_codec.c.annobin_mysqlnd_protocol_frame_codec.c_end.annobin_mysqlnd_protocol_frame_codec.c.hot.annobin_mysqlnd_protocol_frame_codec.c_end.hot.annobin_mysqlnd_protocol_frame_codec.c.unlikely.annobin_mysqlnd_protocol_frame_codec.c_end.unlikely.annobin_mysqlnd_protocol_frame_codec.c.startup.annobin_mysqlnd_protocol_frame_codec.c_end.startup.annobin_mysqlnd_protocol_frame_codec.c.exit.annobin_mysqlnd_protocol_frame_codec.c_end.exit.annobin_mysqlnd_mysqlnd_pfc_reset_pub.start.annobin_mysqlnd_mysqlnd_pfc_reset_pub.endmysqlnd_mysqlnd_pfc_reset_pub.annobin_mysqlnd_mysqlnd_pfc_free_contents_pub.start.annobin_mysqlnd_mysqlnd_pfc_free_contents_pub.endmysqlnd_mysqlnd_pfc_free_contents_pub.annobin_mysqlnd_mysqlnd_pfc_init_pub.start.annobin_mysqlnd_mysqlnd_pfc_init_pub.endmysqlnd_mysqlnd_pfc_init_pub.annobin_mysqlnd_mysqlnd_pfc_read_compressed_packet_from_stream_and_fill_read_buffer_pub.start.annobin_mysqlnd_mysqlnd_pfc_read_compressed_packet_from_stream_and_fill_read_buffer_pub.endmysqlnd_mysqlnd_pfc_read_compressed_packet_from_stream_and_fill_read_buffer_pub.annobin_mysqlnd_mysqlnd_pfc_receive_pub.start.annobin_mysqlnd_mysqlnd_pfc_receive_pub.endmysqlnd_mysqlnd_pfc_receive_pubmysqlnd_mysqlnd_pfc_receive_pub.cold.4.annobin_mysqlnd_mysqlnd_pfc_send_pub.start.annobin_mysqlnd_mysqlnd_pfc_send_pub.endmysqlnd_mysqlnd_pfc_send_pub.annobin_mysqlnd_mysqlnd_pfc_encode_pub.start.annobin_mysqlnd_mysqlnd_pfc_encode_pub.endmysqlnd_mysqlnd_pfc_encode_pub.annobin_mysqlnd_mysqlnd_pfc_decode_pub.start.annobin_mysqlnd_mysqlnd_pfc_decode_pub.endmysqlnd_mysqlnd_pfc_decode_pub.annobin_mysqlnd_mysqlnd_pfc_set_client_option_pub.start.annobin_mysqlnd_mysqlnd_pfc_set_client_option_pub.endmysqlnd_mysqlnd_pfc_set_client_option_pub.annobin_mysqlnd_mysqlnd_pfc_dtor_pub.start.annobin_mysqlnd_mysqlnd_pfc_dtor_pub.endmysqlnd_mysqlnd_pfc_dtor_pub.annobin_mysqlnd_pfc_init.start.annobin_mysqlnd_pfc_init.end.annobin_mysqlnd_pfc_free.start.annobin_mysqlnd_pfc_free.end.annobin_mysqlnd_statistics.c.annobin_mysqlnd_statistics.c_end.annobin_mysqlnd_statistics.c.hot.annobin_mysqlnd_statistics.c_end.hot.annobin_mysqlnd_statistics.c.unlikely.annobin_mysqlnd_statistics.c_end.unlikely.annobin_mysqlnd_statistics.c.startup.annobin_mysqlnd_statistics.c_end.startup.annobin_mysqlnd_statistics.c.exit.annobin_mysqlnd_statistics.c_end.exit.annobin_mysqlnd_fill_stats_hash.start.annobin_mysqlnd_fill_stats_hash.end.annobin_mysqlnd_stats_init.start.annobin_mysqlnd_stats_init.end.annobin_mysqlnd_stats_end.start.annobin_mysqlnd_stats_end.end.annobin_mysqlnd_stats_set_trigger.start.annobin_mysqlnd_stats_set_trigger.end.annobin_mysqlnd_stats_reset_triggers.start.annobin_mysqlnd_stats_reset_triggers.end.annobin__mysqlnd_get_client_stats.start.annobin__mysqlnd_get_client_stats.end.annobin_mysqlnd_driver.c.annobin_mysqlnd_driver.c_end.annobin_mysqlnd_driver.c.hot.annobin_mysqlnd_driver.c_end.hot.annobin_mysqlnd_driver.c.unlikely.annobin_mysqlnd_driver.c_end.unlikely.annobin_mysqlnd_driver.c.startup.annobin_mysqlnd_driver.c_end.startup.annobin_mysqlnd_driver.c.exit.annobin_mysqlnd_driver.c_end.exit.annobin_mysqlnd_mysqlnd_object_factory_get_protocol_payload_decoder_factory_pub.start.annobin_mysqlnd_mysqlnd_object_factory_get_protocol_payload_decoder_factory_pub.endmysqlnd_mysqlnd_object_factory_get_protocol_payload_decoder_factory_pub.annobin_mysqlnd_mysqlnd_object_factory_get_vio_pub.start.annobin_mysqlnd_mysqlnd_object_factory_get_vio_pub.endmysqlnd_mysqlnd_object_factory_get_vio_pub.annobin_mysqlnd_mysqlnd_object_factory_get_pfc_pub.start.annobin_mysqlnd_mysqlnd_object_factory_get_pfc_pub.endmysqlnd_mysqlnd_object_factory_get_pfc_pub.annobin_mysqlnd_mysqlnd_object_factory_clone_connection_object_pub.start.annobin_mysqlnd_mysqlnd_object_factory_clone_connection_object_pub.endmysqlnd_mysqlnd_object_factory_clone_connection_object_pub.annobin_mysqlnd_mysqlnd_object_factory_get_prepared_statement_pub.start.annobin_mysqlnd_mysqlnd_object_factory_get_prepared_statement_pub.endmysqlnd_mysqlnd_object_factory_get_prepared_statement_pub.annobin_mysqlnd_mysqlnd_object_factory_get_connection_pub.start.annobin_mysqlnd_mysqlnd_object_factory_get_connection_pub.endmysqlnd_mysqlnd_object_factory_get_connection_pub.annobin_mysqlnd_library_end.start.annobin_mysqlnd_library_end.endmysqlnd_library_initted.annobin_mysqlnd_library_init.start.annobin_mysqlnd_library_init.endmysqlnd_plugin_core.annobin_mysqlnd_ext_plugin.c.annobin_mysqlnd_ext_plugin.c_end.annobin_mysqlnd_ext_plugin.c.hot.annobin_mysqlnd_ext_plugin.c_end.hot.annobin_mysqlnd_ext_plugin.c.unlikely.annobin_mysqlnd_ext_plugin.c_end.unlikely.annobin_mysqlnd_ext_plugin.c.startup.annobin_mysqlnd_ext_plugin.c_end.startup.annobin_mysqlnd_ext_plugin.c.exit.annobin_mysqlnd_ext_plugin.c_end.exit.annobin__mysqlnd_object_factory_get_methods.start.annobin__mysqlnd_object_factory_get_methods.end_mysqlnd_object_factory_get_methods.annobin__mysqlnd_object_factory_set_methods.start.annobin__mysqlnd_object_factory_set_methods.end_mysqlnd_object_factory_set_methods.annobin__mysqlnd_conn_get_methods.start.annobin__mysqlnd_conn_get_methods.end_mysqlnd_conn_get_methods.annobin__mysqlnd_conn_set_methods.start.annobin__mysqlnd_conn_set_methods.end_mysqlnd_conn_set_methods.annobin__mysqlnd_conn_data_get_methods.start.annobin__mysqlnd_conn_data_get_methods.end_mysqlnd_conn_data_get_methods.annobin__mysqlnd_conn_data_set_methods.start.annobin__mysqlnd_conn_data_set_methods.end_mysqlnd_conn_data_set_methods.annobin__mysqlnd_result_get_methods.start.annobin__mysqlnd_result_get_methods.end_mysqlnd_result_get_methods.annobin__mysqlnd_result_set_methods.start.annobin__mysqlnd_result_set_methods.end_mysqlnd_result_set_methods.annobin__mysqlnd_result_unbuffered_get_methods.start.annobin__mysqlnd_result_unbuffered_get_methods.end_mysqlnd_result_unbuffered_get_methods.annobin__mysqlnd_result_unbuffered_set_methods.start.annobin__mysqlnd_result_unbuffered_set_methods.end_mysqlnd_result_unbuffered_set_methods.annobin__mysqlnd_result_buffered_get_methods.start.annobin__mysqlnd_result_buffered_get_methods.end_mysqlnd_result_buffered_get_methods.annobin__mysqlnd_result_buffered_set_methods.start.annobin__mysqlnd_result_buffered_set_methods.end_mysqlnd_result_buffered_set_methods.annobin__mysqlnd_stmt_get_methods.start.annobin__mysqlnd_stmt_get_methods.end_mysqlnd_stmt_get_methods.annobin__mysqlnd_stmt_set_methods.start.annobin__mysqlnd_stmt_set_methods.end_mysqlnd_stmt_set_methods.annobin__mysqlnd_protocol_payload_decoder_factory_get_methods.start.annobin__mysqlnd_protocol_payload_decoder_factory_get_methods.end_mysqlnd_protocol_payload_decoder_factory_get_methods.annobin__mysqlnd_protocol_payload_decoder_factory_set_methods.start.annobin__mysqlnd_protocol_payload_decoder_factory_set_methods.end_mysqlnd_protocol_payload_decoder_factory_set_methods.annobin__mysqlnd_pfc_get_methods.start.annobin__mysqlnd_pfc_get_methods.end_mysqlnd_pfc_get_methods.annobin__mysqlnd_pfc_set_methods.start.annobin__mysqlnd_pfc_set_methods.end_mysqlnd_pfc_set_methods.annobin__mysqlnd_vio_get_methods.start.annobin__mysqlnd_vio_get_methods.end_mysqlnd_vio_get_methods.annobin__mysqlnd_vio_set_methods.start.annobin__mysqlnd_vio_set_methods.end_mysqlnd_vio_set_methods.annobin__mysqlnd_command_factory_get.start.annobin__mysqlnd_command_factory_get.end_mysqlnd_command_factory_get.annobin__mysqlnd_command_factory_set.start.annobin__mysqlnd_command_factory_set.end_mysqlnd_command_factory_set.annobin__mysqlnd_error_info_get_methods.start.annobin__mysqlnd_error_info_get_methods.end_mysqlnd_error_info_get_methods.annobin__mysqlnd_error_info_set_methods.start.annobin__mysqlnd_error_info_set_methods.end_mysqlnd_error_info_set_methods.annobin_mysqlnd_plugin__get_plugin_vio_data.start.annobin_mysqlnd_plugin__get_plugin_vio_data.endmysqlnd_plugin__get_plugin_vio_data.annobin_mysqlnd_plugin__get_plugin_pfc_data.start.annobin_mysqlnd_plugin__get_plugin_pfc_data.endmysqlnd_plugin__get_plugin_pfc_data.annobin_mysqlnd_plugin__get_plugin_protocol_data.start.annobin_mysqlnd_plugin__get_plugin_protocol_data.endmysqlnd_plugin__get_plugin_protocol_data.annobin_mysqlnd_plugin__get_plugin_stmt_data.start.annobin_mysqlnd_plugin__get_plugin_stmt_data.endmysqlnd_plugin__get_plugin_stmt_data.annobin_mysqlnd_plugin__get_plugin_result_buffered_data_c.start.annobin_mysqlnd_plugin__get_plugin_result_buffered_data_c.endmysqlnd_plugin__get_plugin_result_buffered_data_c.annobin_mysqlnd_plugin__get_plugin_result_buffered_data_zval.start.annobin_mysqlnd_plugin__get_plugin_result_buffered_data_zval.endmysqlnd_plugin__get_plugin_result_buffered_data_zval.annobin_mysqlnd_plugin__get_plugin_result_unbuffered_data.start.annobin_mysqlnd_plugin__get_plugin_result_unbuffered_data.endmysqlnd_plugin__get_plugin_result_unbuffered_data.annobin_mysqlnd_plugin__get_plugin_result_data.start.annobin_mysqlnd_plugin__get_plugin_result_data.endmysqlnd_plugin__get_plugin_result_data.annobin_mysqlnd_plugin__get_plugin_connection_data_data.start.annobin_mysqlnd_plugin__get_plugin_connection_data_data.endmysqlnd_plugin__get_plugin_connection_data_data.annobin_mysqlnd_plugin__get_plugin_connection_data.start.annobin_mysqlnd_plugin__get_plugin_connection_data.endmysqlnd_plugin__get_plugin_connection_data.annobin_mysqlnd_auth.c.annobin_mysqlnd_auth.c_end.annobin_mysqlnd_auth.c.hot.annobin_mysqlnd_auth.c_end.hot.annobin_mysqlnd_auth.c.unlikely.annobin_mysqlnd_auth.c_end.unlikely.annobin_mysqlnd_auth.c.startup.annobin_mysqlnd_auth.c_end.startup.annobin_mysqlnd_auth.c.exit.annobin_mysqlnd_auth.c_end.exit.annobin_mysqlnd_pam_auth_get_auth_data.start.annobin_mysqlnd_pam_auth_get_auth_data.endmysqlnd_pam_auth_get_auth_data.annobin_mysqlnd_sha256_auth_get_auth_data.start.annobin_mysqlnd_sha256_auth_get_auth_data.endmysqlnd_sha256_auth_get_auth_data.annobin_mysqlnd_auth_handshake.start.annobin_mysqlnd_auth_handshake.end.annobin_mysqlnd_auth_change_user.start.annobin_mysqlnd_auth_change_user.end.annobin_mysqlnd_run_authentication.start.annobin_mysqlnd_run_authentication.endmysqlnd_run_authentication.cold.7.annobin_mysqlnd_connect_run_authentication.start.annobin_mysqlnd_connect_run_authentication.end.annobin_php_mysqlnd_scramble.start.annobin_php_mysqlnd_scramble.end.annobin_mysqlnd_native_auth_get_auth_data.start.annobin_mysqlnd_native_auth_get_auth_data.endmysqlnd_native_auth_get_auth_data.annobin_mysqlnd_register_builtin_authentication_plugins.start.annobin_mysqlnd_register_builtin_authentication_plugins.endmysqlnd_native_auth_pluginmysqlnd_pam_authentication_pluginmysqlnd_sha256_authentication_plugin.annobin_mysqlnd_result.c.annobin_mysqlnd_result.c_end.annobin_mysqlnd_result.c.hot.annobin_mysqlnd_result.c_end.hot.annobin_mysqlnd_result.c.unlikely.annobin_mysqlnd_result.c_end.unlikely.annobin_mysqlnd_result.c.startup.annobin_mysqlnd_result.c_end.startup.annobin_mysqlnd_result.c.exit.annobin_mysqlnd_result.c_end.exit.annobin_mysqlnd_mysqlnd_result_buffered_zval_initialize_result_set_rest_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_zval_initialize_result_set_rest_pub.endmysqlnd_mysqlnd_result_buffered_zval_initialize_result_set_rest_pub.annobin_mysqlnd_mysqlnd_res_free_result_contents_internal_pub.start.annobin_mysqlnd_mysqlnd_res_free_result_contents_internal_pub.endmysqlnd_mysqlnd_res_free_result_contents_internal_pub.annobin_mysqlnd_mysqlnd_res_free_result_internal_pub.start.annobin_mysqlnd_mysqlnd_res_free_result_internal_pub.endmysqlnd_mysqlnd_res_free_result_internal_pub.annobin_mysqlnd_mysqlnd_res_read_result_metadata_pub.start.annobin_mysqlnd_mysqlnd_res_read_result_metadata_pub.endmysqlnd_mysqlnd_res_read_result_metadata_pub.annobin_mysqlnd_mysqlnd_result_buffered_zval_fetch_lengths_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_zval_fetch_lengths_pub.endmysqlnd_mysqlnd_result_buffered_zval_fetch_lengths_pub.annobin_mysqlnd_mysqlnd_result_buffered_c_fetch_lengths_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_c_fetch_lengths_pub.endmysqlnd_mysqlnd_result_buffered_c_fetch_lengths_pub.annobin_mysqlnd_mysqlnd_result_unbuffered_fetch_lengths_pub.start.annobin_mysqlnd_mysqlnd_result_unbuffered_fetch_lengths_pub.endmysqlnd_mysqlnd_result_unbuffered_fetch_lengths_pub.annobin_mysqlnd_mysqlnd_res_fetch_row_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_row_pub.endmysqlnd_mysqlnd_res_fetch_row_pub.annobin_mysqlnd_mysqlnd_res_store_result_fetch_data_pub.start.annobin_mysqlnd_mysqlnd_res_store_result_fetch_data_pub.end.annobin_mysqlnd_mysqlnd_res_free_result_pub.start.annobin_mysqlnd_mysqlnd_res_free_result_pub.endmysqlnd_mysqlnd_res_free_result_pub.annobin_mysqlnd_mysqlnd_res_data_seek_pub.start.annobin_mysqlnd_mysqlnd_res_data_seek_pub.endmysqlnd_mysqlnd_res_data_seek_pub.annobin_mysqlnd_mysqlnd_result_buffered_c_data_seek_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_c_data_seek_pub.endmysqlnd_mysqlnd_result_buffered_c_data_seek_pub.annobin_mysqlnd_mysqlnd_result_unbuffered_num_rows_pub.start.annobin_mysqlnd_mysqlnd_result_unbuffered_num_rows_pub.endmysqlnd_mysqlnd_result_unbuffered_num_rows_pub.annobin_mysqlnd_mysqlnd_result_buffered_num_rows_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_num_rows_pub.endmysqlnd_mysqlnd_result_buffered_num_rows_pub.annobin_mysqlnd_mysqlnd_res_num_fields_pub.start.annobin_mysqlnd_mysqlnd_res_num_fields_pub.endmysqlnd_mysqlnd_res_num_fields_pub.annobin_mysqlnd_mysqlnd_res_field_seek_pub.start.annobin_mysqlnd_mysqlnd_res_field_seek_pub.endmysqlnd_mysqlnd_res_field_seek_pub.annobin_mysqlnd_mysqlnd_res_field_tell_pub.start.annobin_mysqlnd_mysqlnd_res_field_tell_pub.endmysqlnd_mysqlnd_res_field_tell_pub.annobin_mysqlnd_mysqlnd_result_buffered_c_initialize_result_set_rest_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_c_initialize_result_set_rest_pub.endmysqlnd_mysqlnd_result_buffered_c_initialize_result_set_rest_pub.annobin_mysqlnd_mysqlnd_result_unbuffered_free_last_data_pub.start.annobin_mysqlnd_mysqlnd_result_unbuffered_free_last_data_pub.endmysqlnd_mysqlnd_result_unbuffered_free_last_data_pub.annobin_mysqlnd_mysqlnd_res_fetch_field_data_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_field_data_pub.endmysqlnd_mysqlnd_res_fetch_field_data_pub.annobin_mysqlnd_mysqlnd_result_unbuffered_fetch_row_pub.start.annobin_mysqlnd_mysqlnd_result_unbuffered_fetch_row_pub.endmysqlnd_mysqlnd_result_unbuffered_fetch_row_pub.annobin_mysqlnd_mysqlnd_result_buffered_zval_fetch_row_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_zval_fetch_row_pub.endmysqlnd_mysqlnd_result_buffered_zval_fetch_row_pub.annobin_mysqlnd_mysqlnd_result_buffered_c_fetch_row_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_c_fetch_row_pub.endmysqlnd_mysqlnd_result_buffered_c_fetch_row_pub.annobin_mysqlnd_mysqlnd_res_fetch_into_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_into_pub.endmysqlnd_mysqlnd_res_fetch_into_pubmysqlnd_mysqlnd_res_fetch_into_pub.cold.16.annobin_mysqlnd_mysqlnd_result_unbuffered_free_result_pub.start.annobin_mysqlnd_mysqlnd_result_unbuffered_free_result_pub.endmysqlnd_mysqlnd_result_unbuffered_free_result_pub.annobin_mysqlnd_mysqlnd_result_buffered_free_result_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_free_result_pub.endmysqlnd_mysqlnd_result_buffered_free_result_pub.annobin_mysqlnd_mysqlnd_res_free_result_buffers_pub.start.annobin_mysqlnd_mysqlnd_res_free_result_buffers_pub.endmysqlnd_mysqlnd_res_free_result_buffers_pub.annobin_mysqlnd_mysqlnd_res_fetch_lengths_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_lengths_pub.endmysqlnd_mysqlnd_res_fetch_lengths_pub.annobin_mysqlnd_mysqlnd_res_skip_result_pub.start.annobin_mysqlnd_mysqlnd_res_skip_result_pub.endmysqlnd_mysqlnd_res_skip_result_pub.annobin_mysqlnd_mysqlnd_result_buffered_zval_data_seek_pub.start.annobin_mysqlnd_mysqlnd_result_buffered_zval_data_seek_pub.endmysqlnd_mysqlnd_result_buffered_zval_data_seek_pub.annobin_mysqlnd_mysqlnd_res_num_rows_pub.start.annobin_mysqlnd_mysqlnd_res_num_rows_pub.endmysqlnd_mysqlnd_res_num_rows_pub.annobin_mysqlnd_mysqlnd_res_fetch_field_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_field_pub.endmysqlnd_mysqlnd_res_fetch_field_pub.annobin_mysqlnd_mysqlnd_res_fetch_field_direct_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_field_direct_pub.endmysqlnd_mysqlnd_res_fetch_field_direct_pub.annobin_mysqlnd_mysqlnd_res_fetch_fields_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_fields_pub.endmysqlnd_mysqlnd_res_fetch_fields_pub.annobin_mysqlnd_mysqlnd_res_fetch_all_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_all_pub.endmysqlnd_mysqlnd_res_fetch_all_pubmysqlnd_mysqlnd_res_fetch_all_pub.cold.17.annobin_mysqlnd_mysqlnd_res_fetch_row_c_pub.start.annobin_mysqlnd_mysqlnd_res_fetch_row_c_pub.endmysqlnd_mysqlnd_res_fetch_row_c_pubmysqlnd_mysqlnd_res_fetch_row_c_pub.cold.18.annobin_mysqlnd_query_read_result_set_header.start.annobin_mysqlnd_query_read_result_set_header.endmysqlnd_query_read_result_set_header.cold.19.annobin_mysqlnd_result_init.start.annobin_mysqlnd_result_init.end.annobin_mysqlnd_result_unbuffered_init.start.annobin_mysqlnd_result_unbuffered_init.end.annobin_mysqlnd_mysqlnd_res_use_result_pub.start.annobin_mysqlnd_mysqlnd_res_use_result_pub.endmysqlnd_mysqlnd_res_use_result_pub.annobin_mysqlnd_result_buffered_zval_init.start.annobin_mysqlnd_result_buffered_zval_init.end.annobin_mysqlnd_result_buffered_c_init.start.annobin_mysqlnd_result_buffered_c_init.end.annobin_mysqlnd_mysqlnd_res_store_result_pub.start.annobin_mysqlnd_mysqlnd_res_store_result_pub.endmysqlnd_mysqlnd_res_store_result_pub.annobin_mysqlnd_result_meta.c.annobin_mysqlnd_result_meta.c_end.annobin_mysqlnd_result_meta.c.hot.annobin_mysqlnd_result_meta.c_end.hot.annobin_mysqlnd_result_meta.c.unlikely.annobin_mysqlnd_result_meta.c_end.unlikely.annobin_mysqlnd_result_meta.c.startup.annobin_mysqlnd_result_meta.c_end.startup.annobin_mysqlnd_result_meta.c.exit.annobin_mysqlnd_result_meta.c_end.exit.annobin_mysqlnd_mysqlnd_res_meta_fetch_field_pub.start.annobin_mysqlnd_mysqlnd_res_meta_fetch_field_pub.endmysqlnd_mysqlnd_res_meta_fetch_field_pub.annobin_mysqlnd_mysqlnd_res_meta_fetch_field_direct_pub.start.annobin_mysqlnd_mysqlnd_res_meta_fetch_field_direct_pub.endmysqlnd_mysqlnd_res_meta_fetch_field_direct_pub.annobin_mysqlnd_mysqlnd_res_meta_fetch_fields_pub.start.annobin_mysqlnd_mysqlnd_res_meta_fetch_fields_pub.endmysqlnd_mysqlnd_res_meta_fetch_fields_pub.annobin_mysqlnd_mysqlnd_res_meta_field_tell_pub.start.annobin_mysqlnd_mysqlnd_res_meta_field_tell_pub.endmysqlnd_mysqlnd_res_meta_field_tell_pub.annobin_mysqlnd_mysqlnd_res_meta_field_seek_pub.start.annobin_mysqlnd_mysqlnd_res_meta_field_seek_pub.endmysqlnd_mysqlnd_res_meta_field_seek_pub.annobin_mysqlnd_mysqlnd_res_meta_free_pub.start.annobin_mysqlnd_mysqlnd_res_meta_free_pub.endmysqlnd_mysqlnd_res_meta_free_pub.annobin_mysqlnd_mysqlnd_res_meta_clone_metadata_pub.start.annobin_mysqlnd_mysqlnd_res_meta_clone_metadata_pub.endmysqlnd_mysqlnd_res_meta_clone_metadata_pub.annobin_mysqlnd_mysqlnd_res_meta_read_metadata_pub.start.annobin_mysqlnd_mysqlnd_res_meta_read_metadata_pub.endmysqlnd_mysqlnd_res_meta_read_metadata_pubmysqlnd_mysqlnd_res_meta_read_metadata_pub.cold.2.annobin_mysqlnd_result_meta_init.start.annobin_mysqlnd_result_meta_init.endmysqlnd_mysqlnd_res_meta_methods.annobin_mysqlnd_result_metadata_get_methods.start.annobin_mysqlnd_result_metadata_get_methods.end.annobin__mysqlnd_plugin_get_plugin_result_metadata_data.start.annobin__mysqlnd_plugin_get_plugin_result_metadata_data.end.annobin_mysqlnd_debug.c.annobin_mysqlnd_debug.c_end.annobin_mysqlnd_debug.c.hot.annobin_mysqlnd_debug.c_end.hot.annobin_mysqlnd_debug.c.unlikely.annobin_mysqlnd_debug.c_end.unlikely.annobin_mysqlnd_debug.c.startup.annobin_mysqlnd_debug.c_end.startup.annobin_mysqlnd_debug.c.exit.annobin_mysqlnd_debug.c_end.exit.annobin_mysqlnd_mysqlnd_debug_free_pub.start.annobin_mysqlnd_mysqlnd_debug_free_pub.endmysqlnd_mysqlnd_debug_free_pub.annobin_mysqlnd_mysqlnd_debug_close_pub.start.annobin_mysqlnd_mysqlnd_debug_close_pub.endmysqlnd_mysqlnd_debug_close_pub.annobin_mysqlnd_mysqlnd_debug_func_enter_pub.start.annobin_mysqlnd_mysqlnd_debug_func_enter_pub.endmysqlnd_mysqlnd_debug_func_enter_pubmysqlnd_debug_empty_string.annobin_mysqlnd_mysqlnd_debug_func_leave_pub.start.annobin_mysqlnd_mysqlnd_debug_func_leave_pub.endmysqlnd_mysqlnd_debug_func_leave_pub.annobin_mysqlnd_mysqlnd_debug_log_va_pub.start.annobin_mysqlnd_mysqlnd_debug_log_va_pub.endmysqlnd_mysqlnd_debug_log_va_pub.annobin_mysqlnd_mysqlnd_debug_log_pub.start.annobin_mysqlnd_mysqlnd_debug_log_pub.endmysqlnd_mysqlnd_debug_log_pub.annobin_mysqlnd_mysqlnd_debug_set_mode_pub.start.annobin_mysqlnd_mysqlnd_debug_set_mode_pub.endmysqlnd_mysqlnd_debug_set_mode_pub.annobin_mysqlnd_mysqlnd_debug_open_pub.start.annobin_mysqlnd_mysqlnd_debug_open_pub.endmysqlnd_mysqlnd_debug_open_pub.annobin_mysqlnd_debug_init.start.annobin_mysqlnd_debug_init.end.annobin_mysqlnd_debug.start.annobin_mysqlnd_debug.end.annobin_mysqlnd_debug_trace_plugin_register.start.annobin_mysqlnd_debug_trace_plugin_register.endmysqlnd_plugin_trace_log_plugin.annobin_mysqlnd_commands.c.annobin_mysqlnd_commands.c_end.annobin_mysqlnd_commands.c.hot.annobin_mysqlnd_commands.c_end.hot.annobin_mysqlnd_commands.c.unlikely.annobin_mysqlnd_commands.c_end.unlikely.annobin_mysqlnd_commands.c.startup.annobin_mysqlnd_commands.c_end.startup.annobin_mysqlnd_commands.c.exit.annobin_mysqlnd_commands.c_end.exit.annobin_mysqlnd_com_no_params_free_command.start.annobin_mysqlnd_com_no_params_free_command.endmysqlnd_com_no_params_free_command.annobin_mysqlnd_com_set_option_run.start.annobin_mysqlnd_com_set_option_run.end.annobin_mysqlnd_com_debug_run.start.annobin_mysqlnd_com_debug_run.endmysqlnd_com_debug_run.annobin_mysqlnd_com_init_db_run.start.annobin_mysqlnd_com_init_db_run.endmysqlnd_com_init_db_run.annobin_mysqlnd_com_ping_run.start.annobin_mysqlnd_com_ping_run.endmysqlnd_com_ping_run.annobin_mysqlnd_com_process_kill_run.start.annobin_mysqlnd_com_process_kill_run.end.annobin_mysqlnd_com_refresh_run.start.annobin_mysqlnd_com_refresh_run.end.annobin_mysqlnd_com_shutdown_run.start.annobin_mysqlnd_com_shutdown_run.end.annobin_mysqlnd_com_quit_run.start.annobin_mysqlnd_com_quit_run.end.annobin_mysqlnd_com_query_run.start.annobin_mysqlnd_com_query_run.endmysqlnd_com_query_run.annobin_mysqlnd_com_change_user_run.start.annobin_mysqlnd_com_change_user_run.endmysqlnd_com_change_user_run.annobin_mysqlnd_com_stmt_prepare_run.start.annobin_mysqlnd_com_stmt_prepare_run.endmysqlnd_com_stmt_prepare_run.annobin_mysqlnd_com_stmt_execute_run.start.annobin_mysqlnd_com_stmt_execute_run.endmysqlnd_com_stmt_execute_run.annobin_mysqlnd_com_stmt_fetch_run.start.annobin_mysqlnd_com_stmt_fetch_run.endmysqlnd_com_stmt_fetch_run.annobin_mysqlnd_com_stmt_reset_run.start.annobin_mysqlnd_com_stmt_reset_run.endmysqlnd_com_stmt_reset_run.annobin_mysqlnd_com_stmt_send_long_data_run.start.annobin_mysqlnd_com_stmt_send_long_data_run.endmysqlnd_com_stmt_send_long_data_run.annobin_mysqlnd_com_stmt_close_run.start.annobin_mysqlnd_com_stmt_close_run.endmysqlnd_com_stmt_close_run.annobin_mysqlnd_com_enable_ssl_run.start.annobin_mysqlnd_com_enable_ssl_run.endmysqlnd_com_enable_ssl_run.annobin_mysqlnd_get_command.start.annobin_mysqlnd_get_command.endmysqlnd_get_commandmysqlnd_com_handshake_runmysqlnd_com_statistics_runmysqlnd_com_reap_result_run.annobin_mysqlnd_com_statistics_run.start.annobin_mysqlnd_com_statistics_run.end.annobin_mysqlnd_com_handshake_run.start.annobin_mysqlnd_com_handshake_run.endmysqlnd_com_handshake_run.cold.4.annobin_mysqlnd_com_reap_result_run.start.annobin_mysqlnd_com_reap_result_run.endmysqlnd_com_reap_result_run.cold.5.annobin_mysqlnd_block_alloc.c.annobin_mysqlnd_block_alloc.c_end.annobin_mysqlnd_block_alloc.c.hot.annobin_mysqlnd_block_alloc.c_end.hot.annobin_mysqlnd_block_alloc.c.unlikely.annobin_mysqlnd_block_alloc.c_end.unlikely.annobin_mysqlnd_block_alloc.c.startup.annobin_mysqlnd_block_alloc.c_end.startup.annobin_mysqlnd_block_alloc.c.exit.annobin_mysqlnd_block_alloc.c_end.exit.annobin_mysqlnd_mempool_free_chunk.start.annobin_mysqlnd_mempool_free_chunk.endmysqlnd_mempool_free_chunk.annobin_mysqlnd_mempool_get_chunk.start.annobin_mysqlnd_mempool_get_chunk.endmysqlnd_mempool_get_chunk.annobin_mysqlnd_mempool_resize_chunk.start.annobin_mysqlnd_mempool_resize_chunk.endmysqlnd_mempool_resize_chunk.annobin_mysqlnd_mempool_destroy.start.annobin_mysqlnd_mempool_destroy.end.annobin_mysqlnd_mempool_create.start.annobin_mysqlnd_mempool_create.end.annobin_mysqlnd_read_buffer.c.annobin_mysqlnd_read_buffer.c_end.annobin_mysqlnd_read_buffer.c.hot.annobin_mysqlnd_read_buffer.c_end.hot.annobin_mysqlnd_read_buffer.c.unlikely.annobin_mysqlnd_read_buffer.c_end.unlikely.annobin_mysqlnd_read_buffer.c.startup.annobin_mysqlnd_read_buffer.c_end.startup.annobin_mysqlnd_read_buffer.c.exit.annobin_mysqlnd_read_buffer.c_end.exit.annobin_mysqlnd_read_buffer_is_empty.start.annobin_mysqlnd_read_buffer_is_empty.endmysqlnd_read_buffer_is_empty.annobin_mysqlnd_read_buffer_bytes_left.start.annobin_mysqlnd_read_buffer_bytes_left.endmysqlnd_read_buffer_bytes_left.annobin_mysqlnd_read_buffer_free.start.annobin_mysqlnd_read_buffer_free.endmysqlnd_read_buffer_free.annobin_mysqlnd_read_buffer_read.start.annobin_mysqlnd_read_buffer_read.endmysqlnd_read_buffer_read.annobin_mysqlnd_create_read_buffer.start.annobin_mysqlnd_create_read_buffer.end.annobin_mysqlnd_plugin.c.annobin_mysqlnd_plugin.c_end.annobin_mysqlnd_plugin.c.hot.annobin_mysqlnd_plugin.c_end.hot.annobin_mysqlnd_plugin.c.unlikely.annobin_mysqlnd_plugin.c_end.unlikely.annobin_mysqlnd_plugin.c.startup.annobin_mysqlnd_plugin.c_end.startup.annobin_mysqlnd_plugin.c.exit.annobin_mysqlnd_plugin.c_end.exit.annobin_mysqlnd_plugin_end_apply_func.start.annobin_mysqlnd_plugin_end_apply_func.end.annobin_mysqlnd_plugin_subsystem_init.start.annobin_mysqlnd_plugin_subsystem_init.endmysqlnd_registered_plugins.annobin_mysqlnd_plugin_subsystem_end.start.annobin_mysqlnd_plugin_subsystem_end.end.annobin_mysqlnd_plugin_register_ex.start.annobin_mysqlnd_plugin_register_ex.endmysqlnd_plugins_countermysqlnd_plugin_register_ex.cold.0.annobin_mysqlnd_plugin_register.start.annobin_mysqlnd_plugin_register.end.annobin_mysqlnd_plugin_find.start.annobin_mysqlnd_plugin_find.end.annobin_mysqlnd_plugin_apply_with_argument.start.annobin_mysqlnd_plugin_apply_with_argument.endmysqlnd_plugin_apply_with_argument.cold.1.annobin_mysqlnd_plugin_count.start.annobin_mysqlnd_plugin_count.end.annobin_php_mysqlnd.c.annobin_php_mysqlnd.c_end.annobin_php_mysqlnd.c.hot.annobin_php_mysqlnd.c_end.hot.annobin_php_mysqlnd.c.unlikely.annobin_php_mysqlnd.c_end.unlikely.annobin_php_mysqlnd.c.startup.annobin_php_mysqlnd.c_end.startup.annobin_php_mysqlnd.c.exit.annobin_php_mysqlnd.c_end.exit.annobin_zm_globals_ctor_mysqlnd.start.annobin_zm_globals_ctor_mysqlnd.endzm_globals_ctor_mysqlnd.annobin_mysqlnd_minfo_dump_loaded_plugins.start.annobin_mysqlnd_minfo_dump_loaded_plugins.endmysqlnd_minfo_dump_loaded_plugins.annobin_zm_shutdown_mysqlnd.start.annobin_zm_shutdown_mysqlnd.endzm_shutdown_mysqlnd.annobin_zm_startup_mysqlnd.start.annobin_zm_startup_mysqlnd.endzm_startup_mysqlnd.annobin_OnUpdateNetCmdBufferSize.start.annobin_OnUpdateNetCmdBufferSize.endOnUpdateNetCmdBufferSize.annobin_zm_info_mysqlnd.start.annobin_zm_info_mysqlnd.endmysqlnd_minfo_dump_plugin_stats.annobin_mysqlnd_minfo_print_hash.start.annobin_mysqlnd_minfo_print_hash.end.annobin_mysqlnd_minfo_dump_plugin_stats.start.annobin_mysqlnd_minfo_dump_plugin_stats.end.annobin_get_module.start.annobin_get_module.endmysqlnd_depsmysqlnd_functions.annobin_mysqlnd_ps.c.annobin_mysqlnd_ps.c_end.annobin_mysqlnd_ps.c.hot.annobin_mysqlnd_ps.c_end.hot.annobin_mysqlnd_ps.c.unlikely.annobin_mysqlnd_ps.c_end.unlikely.annobin_mysqlnd_ps.c.startup.annobin_mysqlnd_ps.c_end.startup.annobin_mysqlnd_ps.c.exit.annobin_mysqlnd_ps.c_end.exit.annobin_mysqlnd_mysqlnd_stmt_get_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_get_result_pub.endmysqlnd_mysqlnd_stmt_get_result_pub.annobin_mysqlnd_mysqlnd_stmt_more_results_pub.start.annobin_mysqlnd_mysqlnd_stmt_more_results_pub.endmysqlnd_mysqlnd_stmt_more_results_pub.annobin_mysqlnd_stmt_execute_parse_response.start.annobin_mysqlnd_stmt_execute_parse_response.endmysqlnd_stmt_execute_parse_response.annobin_mysqlnd_mysqlnd_stmt_execute_pub.start.annobin_mysqlnd_mysqlnd_stmt_execute_pub.endmysqlnd_mysqlnd_stmt_execute_pub.annobin_mysqlnd_mysqlnd_stmt_send_execute_pub.start.annobin_mysqlnd_mysqlnd_stmt_send_execute_pub.endmysqlnd_mysqlnd_stmt_send_execute_pub.annobin_mysqlnd_mysqlnd_stmt_use_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_use_result_pub.endmysqlnd_mysqlnd_stmt_use_result_pub.annobin_mysqlnd_mysqlnd_stmt_reset_pub.start.annobin_mysqlnd_mysqlnd_stmt_reset_pub.endmysqlnd_mysqlnd_stmt_reset_pub.annobin_mysqlnd_mysqlnd_stmt_flush_pub.start.annobin_mysqlnd_mysqlnd_stmt_flush_pub.endmysqlnd_mysqlnd_stmt_flush_pub.annobin_mysqlnd_mysqlnd_stmt_refresh_bind_param_pub.start.annobin_mysqlnd_mysqlnd_stmt_refresh_bind_param_pub.endmysqlnd_mysqlnd_stmt_refresh_bind_param_pub.annobin_mysqlnd_mysqlnd_stmt_insert_id_pub.start.annobin_mysqlnd_mysqlnd_stmt_insert_id_pub.endmysqlnd_mysqlnd_stmt_insert_id_pub.annobin_mysqlnd_mysqlnd_stmt_affected_rows_pub.start.annobin_mysqlnd_mysqlnd_stmt_affected_rows_pub.endmysqlnd_mysqlnd_stmt_affected_rows_pub.annobin_mysqlnd_mysqlnd_stmt_num_rows_pub.start.annobin_mysqlnd_mysqlnd_stmt_num_rows_pub.endmysqlnd_mysqlnd_stmt_num_rows_pub.annobin_mysqlnd_mysqlnd_stmt_warning_count_pub.start.annobin_mysqlnd_mysqlnd_stmt_warning_count_pub.endmysqlnd_mysqlnd_stmt_warning_count_pub.annobin_mysqlnd_mysqlnd_stmt_server_status_pub.start.annobin_mysqlnd_mysqlnd_stmt_server_status_pub.endmysqlnd_mysqlnd_stmt_server_status_pub.annobin_mysqlnd_mysqlnd_stmt_field_count_pub.start.annobin_mysqlnd_mysqlnd_stmt_field_count_pub.endmysqlnd_mysqlnd_stmt_field_count_pub.annobin_mysqlnd_mysqlnd_stmt_param_count_pub.start.annobin_mysqlnd_mysqlnd_stmt_param_count_pub.endmysqlnd_mysqlnd_stmt_param_count_pub.annobin_mysqlnd_mysqlnd_stmt_errno_pub.start.annobin_mysqlnd_mysqlnd_stmt_errno_pub.endmysqlnd_mysqlnd_stmt_errno_pub.annobin_mysqlnd_mysqlnd_stmt_error_pub.start.annobin_mysqlnd_mysqlnd_stmt_error_pub.endmysqlnd_mysqlnd_stmt_error_pub.annobin_mysqlnd_mysqlnd_stmt_sqlstate_pub.start.annobin_mysqlnd_mysqlnd_stmt_sqlstate_pub.endmysqlnd_mysqlnd_stmt_sqlstate_pub.annobin_mysqlnd_mysqlnd_stmt_data_seek_pub.start.annobin_mysqlnd_mysqlnd_stmt_data_seek_pub.endmysqlnd_mysqlnd_stmt_data_seek_pub.annobin_mysqlnd_mysqlnd_stmt_param_metadata_pub.start.annobin_mysqlnd_mysqlnd_stmt_param_metadata_pub.endmysqlnd_mysqlnd_stmt_param_metadata_pub.annobin_mysqlnd_mysqlnd_stmt_attr_set_pub.start.annobin_mysqlnd_mysqlnd_stmt_attr_set_pub.endmysqlnd_mysqlnd_stmt_attr_set_pub.annobin_mysqlnd_mysqlnd_stmt_attr_get_pub.start.annobin_mysqlnd_mysqlnd_stmt_attr_get_pub.endmysqlnd_mysqlnd_stmt_attr_get_pub.annobin_mysqlnd_mysqlnd_stmt_close_on_server_priv.start.annobin_mysqlnd_mysqlnd_stmt_close_on_server_priv.endmysqlnd_mysqlnd_stmt_close_on_server_priv.annobin_mysqlnd_mysqlnd_stmt_dtor_pub.start.annobin_mysqlnd_mysqlnd_stmt_dtor_pub.endmysqlnd_mysqlnd_stmt_dtor_pub.annobin_mysqlnd_mysqlnd_stmt_alloc_param_bind_pub.start.annobin_mysqlnd_mysqlnd_stmt_alloc_param_bind_pub.endmysqlnd_mysqlnd_stmt_alloc_param_bind_pub.annobin_mysqlnd_mysqlnd_stmt_alloc_result_bind_pub.start.annobin_mysqlnd_mysqlnd_stmt_alloc_result_bind_pub.endmysqlnd_mysqlnd_stmt_alloc_result_bind_pub.annobin_mysqlnd_mysqlnd_stmt_free_parameter_bind_pub.start.annobin_mysqlnd_mysqlnd_stmt_free_parameter_bind_pub.end.annobin_mysqlnd_mysqlnd_stmt_free_result_bind_pub.start.annobin_mysqlnd_mysqlnd_stmt_free_result_bind_pub.end.annobin_mysqlnd_stmt_fetch_row_buffered.start.annobin_mysqlnd_stmt_fetch_row_buffered.end.annobin_mysqlnd_stmt_fetch_row_unbuffered.start.annobin_mysqlnd_stmt_fetch_row_unbuffered.end.annobin_mysqlnd_mysqlnd_stmt_fetch_pub.start.annobin_mysqlnd_mysqlnd_stmt_fetch_pub.endmysqlnd_mysqlnd_stmt_fetch_pub.annobin_mysqlnd_fetch_stmt_row_cursor.start.annobin_mysqlnd_fetch_stmt_row_cursor.end.annobin_mysqlnd_stmt_separate_result_bind.start.annobin_mysqlnd_stmt_separate_result_bind.endmysqlnd_stmt_separate_result_bind.annobin_mysqlnd_mysqlnd_stmt_free_stmt_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_free_stmt_result_pub.endmysqlnd_mysqlnd_stmt_free_stmt_result_pub.annobin_mysqlnd_mysqlnd_stmt_bind_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_bind_result_pub.endmysqlnd_mysqlnd_stmt_bind_result_pub.annobin_mysqlnd_mysqlnd_stmt_free_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_free_result_pub.endmysqlnd_mysqlnd_stmt_free_result_pub.annobin_mysqlnd_mysqlnd_stmt_bind_one_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_bind_one_result_pub.endmysqlnd_mysqlnd_stmt_bind_one_result_pub.annobin_mysqlnd_mysqlnd_stmt_bind_one_parameter_pub.start.annobin_mysqlnd_mysqlnd_stmt_bind_one_parameter_pub.endmysqlnd_mysqlnd_stmt_bind_one_parameter_pub.annobin_mysqlnd_mysqlnd_stmt_bind_parameters_pub.start.annobin_mysqlnd_mysqlnd_stmt_bind_parameters_pub.endmysqlnd_mysqlnd_stmt_bind_parameters_pub.annobin_mysqlnd_mysqlnd_stmt_result_metadata_pub.start.annobin_mysqlnd_mysqlnd_stmt_result_metadata_pub.endmysqlnd_mysqlnd_stmt_result_metadata_pub.annobin_mysqlnd_mysqlnd_stmt_send_long_data_pub.start.annobin_mysqlnd_mysqlnd_stmt_send_long_data_pub.endmysqlnd_mysqlnd_stmt_send_long_data_pub.annobin_mysqlnd_stmt_prepare_read_eof.start.annobin_mysqlnd_stmt_prepare_read_eof.endmysqlnd_stmt_prepare_read_eof.annobin_mysqlnd_mysqlnd_stmt_store_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_store_result_pub.endmysqlnd_mysqlnd_stmt_store_result_pub.annobin_mysqlnd_mysqlnd_stmt_prepare_pub.start.annobin_mysqlnd_mysqlnd_stmt_prepare_pub.endmysqlnd_mysqlnd_stmt_prepare_pub.annobin_mysqlnd_mysqlnd_stmt_next_result_pub.start.annobin_mysqlnd_mysqlnd_stmt_next_result_pub.endmysqlnd_mysqlnd_stmt_next_result_pub.annobin_mysqlnd_mysqlnd_stmt_free_stmt_content_pub.start.annobin_mysqlnd_mysqlnd_stmt_free_stmt_content_pub.endmysqlnd_mysqlnd_stmt_free_stmt_content_pub.annobin__mysqlnd_init_ps_subsystem.start.annobin__mysqlnd_init_ps_subsystem.end.annobin_mysqlnd_ps_codec.c.annobin_mysqlnd_ps_codec.c_end.annobin_mysqlnd_ps_codec.c.hot.annobin_mysqlnd_ps_codec.c_end.hot.annobin_mysqlnd_ps_codec.c.unlikely.annobin_mysqlnd_ps_codec.c_end.unlikely.annobin_mysqlnd_ps_codec.c.startup.annobin_mysqlnd_ps_codec.c_end.startup.annobin_mysqlnd_ps_codec.c.exit.annobin_mysqlnd_ps_codec.c_end.exit.annobin_ps_fetch_null.start.annobin_ps_fetch_null.endps_fetch_null.annobin_ps_fetch_over_read_error.start.annobin_ps_fetch_over_read_error.endps_fetch_over_read_error.annobin_ps_fetch_double.start.annobin_ps_fetch_double.endps_fetch_doubleps_fetch_double.cold.8.annobin_mysqlnd_stmt_execute_check_n_enlarge_buffer.start.annobin_mysqlnd_stmt_execute_check_n_enlarge_buffer.endmysqlnd_stmt_execute_check_n_enlarge_buffer.annobin_mysql_float_to_double.start.annobin_mysql_float_to_double.endmysql_float_to_double.annobin_ps_fetch_float.start.annobin_ps_fetch_float.endps_fetch_floatps_fetch_float.cold.9.annobin_mysqlnd_stmt_copy_it.isra.2.start.annobin_mysqlnd_stmt_copy_it.isra.2.endmysqlnd_stmt_copy_it.isra.2.annobin_ps_fetch_time.start.annobin_ps_fetch_time.endps_fetch_timeps_fetch_time.cold.10.annobin_ps_fetch_string.start.annobin_ps_fetch_string.endps_fetch_stringps_fetch_string.cold.11.annobin_ps_fetch_date.start.annobin_ps_fetch_date.endps_fetch_dateps_fetch_date.cold.12.annobin_ps_fetch_datetime.start.annobin_ps_fetch_datetime.endps_fetch_datetimeps_fetch_datetime.cold.13.annobin_ps_fetch_from_1_to_8_bytes.start.annobin_ps_fetch_from_1_to_8_bytes.end.annobin_ps_fetch_bit.start.annobin_ps_fetch_bit.endps_fetch_bitps_fetch_bit.cold.14.annobin_ps_fetch_int64.start.annobin_ps_fetch_int64.endps_fetch_int64.annobin_ps_fetch_int32.start.annobin_ps_fetch_int32.endps_fetch_int32.annobin_ps_fetch_int16.start.annobin_ps_fetch_int16.endps_fetch_int16.annobin_ps_fetch_int8.start.annobin_ps_fetch_int8.endps_fetch_int8.annobin__mysqlnd_init_ps_fetch_subsystem.start.annobin__mysqlnd_init_ps_fetch_subsystem.end.annobin_mysqlnd_stmt_execute_generate_request.start.annobin_mysqlnd_stmt_execute_generate_request.endderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__mysqlnd_com_shutdown_runmysqlnd_debug_trace_plugin_register_mysqlnd_init_ps_subsystemmysqlnd_mysqlnd_conn_data_stmt_init_pub_finimysqlnd_mysqlnd_connection_state_methodsphp_mysqlnd_net_field_length_llmysqlnd_mysqlnd_stmt_methodsmysqlnd_com_refresh_runmysqlnd_com_process_kill_runmysqlnd_auth_handshakemysqlnd_charsetsmysqlnd_stmt_execute_generate_requestmysqlnd_query_read_result_set_header__dso_handlemysqlnd_stmt_not_preparedmysqlnd_com_set_option_runmysqlnd_mysqlnd_debug_methodsphp_mysqlnd_rowp_read_text_protocol_cmysqlnd_mysqlnd_res_store_result_fetch_data_pubphp_mysqlnd_rowp_read_text_protocol_zvalmysqlnd_plugin_subsystem_initmysqlnd_register_builtin_authentication_pluginsmysqlnd_mysqlnd_conn_data_list_method_pubmysqlnd_stream_array_check_for_readinessmysqlnd_command_factorymysqlnd_module_entryphp_mysqlnd_net_store_length_sizemysqlnd_ps_fetch_functions_mysqlnd_init_ps_fetch_subsystemmysqlnd_auth_change_user_DYNAMICmysqlnd_stmt_fetch_row_bufferedmysqlnd_connect_run_authenticationmysqlnd_mysqlnd_upsert_status_reset_pubmysqlnd_plugin_subsystem_endzm_info_mysqlndmysqlnd_not_bound_as_blobphp_mysqlnd_rowp_read_binary_protocolphp_mysqlnd_net_field_lengthmysqlnd_charsets_plugin_registerphp_mysqlnd_rowp_read_text_protocol_auxmysqlnd_mysqlnd_upsert_status_set_affected_rows_to_error_pubmysqlnd_stmt_fetch_row_unbuffered__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_mysqlnd_mysqlnd_vio_consume_uneaten_data_pubps_fetch_from_1_to_8_bytesmysqlnd_run_authenticationmysqlnd_plugin_end_apply_funcmysqlnd_upsert_status_initphp_mysqlnd_cmd_writemysqlnd_handle_local_infilemysqlnd_com_quit_runphp_mysqlnd_net_store_lengthmysqlnd_fetch_stmt_row_cursorzval_to_mysqlndzend_ini_boolean_displayer_cbconvert_to_longmysqlnd_mempool_createzend_hash_str_delfree@@GLIBC_2.2.5zend_vspprintf_php_stream_castzend_stack_pushstrcasecmp@@GLIBC_2.2.5localtime@@GLIBC_2.2.5mysqlnd_global_statsmysqlnd_result_buffered_zval_init__errno_location@@GLIBC_2.2.5_zval_ptr_dtormysqlnd_library_end_ITM_deregisterTMCloneTablezend_register_ini_entriesRSA_public_encryptPHP_SHA1Updatemysqlnd_pfc_initmysqlnd_out_of_memoryPHP_SHA1Initsetsockopt@@GLIBC_2.2.5zend_strndupap_php_snprintfmysqlnd_result_meta_init_zend_hash_str_updatemysqlnd_stats_reset_triggersRSA_sizegetpid@@GLIBC_2.2.5smart_str_ereallocmysqlnd_mysqlnd_conn_methods_php_stream_write_edatamysqlnd_reverse_api_get_api_listmysqlnd_debug_inituncompress_estrdupOnUpdateBool_php_stream_xport_createmysqlnd_get_client_infostrlen@@GLIBC_2.2.5zend_hash_index_delmysqlnd_stats_initmysqlnd_cset_escape_quotes__stack_chk_fail@@GLIBC_2.4_zval_dtor_funcconvert_to_doublemysqlnd_old_escape_stringzend_unregister_ini_entriesmysqlnd_debug_std_no_trace_funcsphp_info_print_table_row__fdelt_chk@@GLIBC_2.15mysqlnd_connection_initgettimeofday@@GLIBC_2.2.5mysqlnd_stats_set_triggermysqlnd_protocol_payload_decoder_factory_free_zend_hash_initadd_assoc_string_exmemset@@GLIBC_2.2.5_zend_hash_str_addOnUpdateStringmysqlnd_plugin_apply_with_argument_emalloc_112mysqlnd_reverse_api_register_apiadd_index_zvalmysqlnd_reverse_api_end_zend_hash_index_updatemysqlnd_protocol_payload_decoder_factory_initmysqlnd_vio_initzend_stack_destroyphp_stream_xport_crypto_setupmysqlnd_connection_connectmysqlnd_allocatorcalloc@@GLIBC_2.2.5mysqlnd_result_unbuffered_initmysqlnd_mysqlnd_protocol_payload_decoder_factory_methodsstrtoll@@GLIBC_2.2.5__memcpy_chk@@GLIBC_2.3.4mysqlnd_plugin_area_gettersmysqlnd_server_gonemysqlnd_find_charset_nr__gmon_start__php_check_open_basedir_exstrtol@@GLIBC_2.2.5mysqlnd_mysqlnd_conn_data_methodsmysqlnd_result_buffered_c_initphp_error_docref0mysqlnd_connection_state_initzend_hash_str_add_empty_elementphp_info_print_table_endmemcpy@@GLIBC_2.14zend_stack_initphp_stream_context_setmysqlnd_find_charset_namemysqlnd_mysqlnd_result_unbuffered_methodsmysqlnd_plugin_findmysqlnd_pollzend_hash_destroy_mysqlnd_plugin_get_plugin_result_metadata_dataBIO_new_mem_bufmysqlnd_plugin_register_exOnUpdateLongPEM_read_bio_RSA_PUBKEYselect@@GLIBC_2.2.5mysqlnd_create_read_bufferzend_hash_get_current_data_exzend_stack_topmysqlnd_result_metadata_get_methods__zend_mallocmalloc@@GLIBC_2.2.5strncasecmp@@GLIBC_2.2.5mysqlnd_error_info_initmysqlnd_vio_free__zend_reallocphp_info_print_table_headermysqlnd_mysqlnd_error_info_methodszend_hash_str_findphp_stream_context_allocmysqlnd_reverse_api_init_php_stream_copy_to_memBIO_freemysqlnd_cset_escape_slashesmysqlnd_result_initmysqlnd_mysqlnd_result_buffered_methodsget_module_zend_hash_next_index_insertmysqlnd_command_to_textrealloc@@GLIBC_2.2.5mysqlnd_error_info_free_contents_php_stream_set_option__bss_start_array_init_convert_to_stringmysqlnd_field_type_namemysqlnd_mysqlnd_stmt_free_parameter_bind_pubmysqlnd_mysqlnd_object_factory_methodscore_globalsmysqlnd_mysqlnd_protocol_packet_frame_codec_methodsmysqlnd_library_initzend_stack_del_topzend_llist_initmysqlnd_empty_stringzend_hash_cleanzend_memory_usage_zend_handle_numeric_str_exphp_mysqlnd_scramble__zend_callocmysqlnd_stats_values_names_php_stream_open_wrapper_exmysqlnd_globals_php_stream_freemysqlnd_read_header_namezend_strtodzend_llist_clean_php_stream_readphp_strlcpyzend_hash_str_existszend_stack_countmysqlnd_mysqlnd_stmt_free_result_bind_pubzend_errorzend_hash_apply_estrndupmysqlnd_plugin_countmysqlnd_pfc_freemysqlnd_plugin_registerzend_empty_stringexit@@GLIBC_2.2.5zend_hash_internal_pointer_reset_exmysqlnd_mysqlnd_res_methodsexecutor_globals_php_emit_fd_setsize_warningmysqlnd_mysqlnd_upsert_status_methodsphp_stream_context_set_optionzend_hash_move_forward_ex_ITM_registerTMCloneTablephp_sprintfphp_info_print_table_startmysqlnd_minfo_print_hashPHP_SHA1Finalmysqlnd_fill_stats_hashmysqlnd_stats_endstrerror@@GLIBC_2.2.5mysqlnd_read_body_namemysqlnd_mempool_destroyzend_llist_add_element__cxa_finalize@@GLIBC_2.2.5mysqlnd_get_client_versionmysqlnd_plugin_methods_xettersphp_stream_xport_crypto_enablemysqlnd_local_infile_default_mysqlnd_get_client_statszend_one_char_stringmysqlnd_out_of_syncmysqlnd_debug_zend_hash_updatemysqlnd_mysqlnd_vio_methodsphp_gcvt.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``8 P@``;Ho))Uo8+8+`d++nB x``s0 ~ Y,, @@0J p)p)l99_ ###`E `#``#`#  # 0- dHt `*#PK!A}88modules/mcrypt.sonuȯELF>@5@@8 @88 PP P  88 8  888$$ Std Ptd{{{QtdRtdPP P GNU.[%;9ەFɺPS@ SVBE| pqX5V UlR'l+.ADwT]p#P~y s[Bgu:,z Bns,  F"zVؠ   Ph ؠ __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizemcrypt_list_algorithmsstrlenmemcpymcrypt_free_pmcrypt_list_modesap_php_snprintfphp_info_print_table_startphp_info_print_table_headerphp_info_print_table_rowphp_info_print_table_enddisplay_ini_entriessmart_str_erealloc_efree__stack_chk_failphp_stream_filter_unregister_factoryzend_unregister_ini_entrieszend_register_list_destructors_exzend_register_long_constantzend_register_string_constantzend_register_ini_entriesphp_stream_filter_register_factorymcrypt_generic_deinitmcrypt_module_closezend_parse_parametersmcrypt_module_open_emalloc_16zend_register_resourcephp_error_docref0zend_fetch_resourcemcrypt_enc_get_key_sizemcrypt_enc_get_iv_sizezend_list_close_emallocmemsetmcrypt_enc_mode_has_ivmcrypt_generic_initmcrypt_enc_is_block_modemcrypt_enc_get_block_sizemcrypt_genericmdecrypt_generic_array_initmcrypt_enc_get_supported_key_sizesadd_index_longmcrypt_freemcrypt_enc_self_testmcrypt_enc_is_block_algorithm_modemcrypt_enc_is_block_algorithmmcrypt_enc_get_algorithms_namemcrypt_enc_get_modes_namemcrypt_module_self_testmcrypt_module_is_block_algorithm_modemcrypt_module_is_block_algorithmmcrypt_module_is_block_modemcrypt_module_get_algo_block_sizemcrypt_module_get_algo_key_sizemcrypt_module_get_algo_supported_key_sizesadd_index_string_ecallocphp_randreadmcrypt_generic_endspprintf_estrndupget_moduleOnUpdateStringzend_ini_string_exstrncasecmpzend_hash_str_find__zend_malloc_php_stream_filter_alloc_emalloc_32php_stream_bucket_make_writeablephp_stream_bucket_appendphp_stream_bucket_newphp_stream_bucket_unlinkphp_stream_bucket_delreflibmcrypt.so.4libltdl.so.7libc.so.6_edata__bss_startmcrypt.soGLIBC_2.14GLIBC_2.4GLIBC_2.2.5/opt/cpanel/libmcrypt/lib64:/opt/cpanel/ea-php70/root/usr/lib64:/lib64ii ui P @:X :` ` &t F @ :t L  Ptȋ 0TЋ @ gt \  xt [  t( [0  @ tH 0HP  ` th fp  t pg  t `E  tȌ IЌ  t pM  u N  u( ^0  @ /uH QP @ ` Hyh Rp  Du R @ bu K  {uȍ  LЍ  u PF  py P  u( G0 @ @ yH 0SP  ` uh Up  u V ` y pW  yȎ XЎ  u X @ z  Y  0z( Y0  @ PzH @ZP  ` vh Hp  ksЏ &v -v0 4vH 8v` vux o -vА 4v 8v vu oX -v -v =v -v =vX -vp =v Dv Dv8 XuP Dv Xu Dv Xu DvX vup Dv XuД Dv vu0 Dvx Xu Dvؕ Lv LvX Lv Lvؖ Lv LvX Lv Lvؗ Lv LvX Lv Lvؘ Lv 8v8 LvP 8v Lv 4vș o -v Ov( vu@ `v` sx  s  Ko(  0 ?8 ?P :X th  p P:x `: t h 0lȠ `hР 7oh    ( J Np x           ȝ  Н ؝          ( 0 8 @ H P X ` !h "p #x $ % & ' ) * + , - .Ȟ /О 0؞ 1 2 3 4 5 6 7 8 9 :( ;0 <8 =@ >H ?P @X A` Bh Cp Dx E F G H I K L M N Oȟ PП Q؟ RHHt HtH5q %q hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hM%m D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%l D%}l D%ul D%ml D%el D%]l D%Ul D%Ml D%El D%=l D%5l D%-l D%%l D%l D%l D% l D%l D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%k D%}k D%uk D%mk D%ek D%]k D%Uk D%Mk D%Ek D%=k D%5k D%-k D%%k D%k D%k D% k D%k D%j D%j D%j D%j D%j D%j D%j D%j D%j D%j D%j D%j D%j DH)A11kCHe=11JEHD=11)E HR=111HM=111H=1H|$ 3HEH@11HT$ _HL$(E1H@1LL$LL$gH<11dEH<11CAFH@11AFH<HG@H<11AFFHO@11AFH$<H?H;11EH@11lt$&$H<11Nt$$H@11+AE5&HO@11 E'$A1H A1L6HD$+H@11LLHD$+H',1H:1nHD$\+At>AH:1192LH%B11J3Hd:11H](3H9B110HA110H9111HlB1H2H$B11v2HA11\0H=11Bm2f.H=Ag H:g H9tH6f Ht H=g H5 g H)HHH?HHtHf HtfD=f u+UH=e Ht H=>Q df ]wHGSH~ C{[@C[f.AWfAVAUATUSHxH|$H=Nf dH%(HD$h1HD$,)D$0H)D$@HD$t$,IąH\$01Lt$0M2HP1H|$0HtWEHD$0HD$8H|$@HtWHD$@HD$HH|$HD$hdH3%(Hx[]A\A]A^A_HHLHD$H\$@HD$HSBf.ILLHD$mH\$0HD$HSbf.HLHD$HT$H|$HLHH HEHHHEHD$(dH3%(u H0[]A\ff.@SHH5.H,dH%(HD$1Ht2H$Y H5*H8Ht/H8CHHHD$dH3%(uH[DCRfATUHH5*SH0,HX dH%(HD$(1HL$HT$L%X LL$ LD$ t>HT$H|$HLFHHHEHHHE]HD$(dH3%(u H0[]A\ff.@SHH53-H,dH%(HD$1Ht1H$W H5)H8Ht/H$H8CHD$dH3%(uH[fDCfAWAVAUIH5V)ATUSHH,dH%(HD$81HL$HT$0HHD$0P1LL$(LD$0ZY+HD$0V H5(H8HH+H8#H;AH|$ AHRHT$ 1HHAWHcHHT$,HT$1HIHT$ IcH9AHt$HYHT$(McLL$I9t#H;LL$mHT$(I9Ht$LH;/H;DLHLcExfCMuLAEHHD$8dH3%(uqHH[]A\A]A^A_AEfDLL$(LoHD$0H8AVA2H'11:cSHH5*H,dH%(HD$1Ht2H$U H5&H8Ht H8Wt"CHD$dH3%(uH[DCbfSHH5*H,dH%(HD$1HRt2H$T H5b&H8THt/H8CHHHD$dH3%(uH[DCfATUHH5*&SH0,H@T dH%(HD$(1HL$HT$L%T LL$ LD$t>HT$H|$HLHH!HEHHHEHD$(dH3%(u H0[]A\ff.@AVIH5$AUATUSH ,dH%(HD$1HL$HLD$H$"S H5$H8HHxHD$HH=H}6Ld$EMcI|$ HTL1HHHKHHHCLcHT$Ht$HuH}DHFBD#IAFHD$dH3%(uOH []A\A]A^H}GD$DhDEMc@fAFAVIH5#AUATUSH ,dH%(HD$1HL$HLD$qH$Q H5}#H8oHH3xHD$HH=dH}H\${AHcHcIH1LwHT$Ht$LH}DLH{ HHLHHHEH}HEH]DLI.AFHD$dH3%(u_H []A\A]A^H}D$DhDEMIcH{I"fDAFATUHH5%SH ,dH%(HD$1HT$D$ tqHD$O H5!H8HHtn1HH;Ht$ 7IċD$ ~%1f.IcHHHM9\$ LHD$dH3%(uH []A\fDEfSHH5$H,dH%(HD$1Ht2H$'O H5!H8Ht/H8wCHHHD$dH3%(uH[DCrfSHH5$H,dH%(HD$1Hbt2H$N H5r H8dHt H8wt"CHD$dH3%(uH[DCfSHH5#H,dH%(HD$1Ht2H$N H5H8Ht H8t"CHD$dH3%(uH[DCRfAUATIH5"USH,dH%(HD$1H=H$nM H5IH8;HH8HIHx HHHLHHH{HHCHkI$LAD$D+*HD$dH3%(uH[]A\A]AD$XAUATUHH5fSH(,L%L dH%(HD$1HL$HT$L-L (H|$LHLHHHHHIiLHx IHLLHHHH{HCLcBD#LH]E HD$dH3%(H([]A\A]fDH|$LH`LHHH HILHx IHLLHHHH{HCLc/BD#LH]EVDff.AUATIH5@ USH,dH%(HD$1HH$J H5H8HH8HIHx HHHLHHH{HHCHkTI$LAD$D+zHD$dH3%(uH[]A\A]AD$SHH5H0,dH%(HD$(1HL$ HT$HD$LL$LD$xtHt$H|$$CHD$(dH3%(uH0[ff.SHH5eH0,dH%(HD$(1HL$ HT$HD$LL$LD$tHt$H|$CHD$(dH3%(uH0[f.SHH5H0,dH%(HD$(1HL$ HT$HD$LL$LD$XtHt$H|$4CHD$(dH3%(uH0[f.SHH5EH0,dH%(HD$(1HL$ HT$HD$LL$LD$tHt$H|$CHD$(dH3%(uH0[jf.SHH5H0,dH%(HD$(1HL$ HT$HD$LL$LD$8tHt$H|$CHHHD$(dH3%(uH0[ff.fSHH5%H0,dH%(HD$(1HL$ HT$HD$LL$LD$tHt$H|$$CHHHD$(dH3%(uH0[Mff.fATUHH5SH0,dH%(HD$(1HL$ HT$D$LL$LD$HD$ tQ1H>Ht$H|$HT$IċD$~ 1DIcHHH9\$L7HD$(dH3%(u H0[]A\yfATUHH5SH ,dH%(HD$1HE HL$HT$HD$1JtX1H{H|$Ht$\t$Ią~$1IHHH}t$9LMHD$dH3%(u H []A\ff.@ATUHH5SH ,dH%(HD$1HD HL$HT$HD$1ztX1HH|$Ht$,t$Ią ~$1IHHHt$9L}HD$dH3%(u H []A\ff.@AWAVAUIH5ATUSH(,dH%(HD$1HL$HT$HD$H|$HGH=fHIHD$HHD$HcHk HHt@fDfHL$H*Y ^ ,HQHT$AD HuHHLHHHEH}HEH]"DLImAEHD$dH3%(H([]A\A]A^A_fDL5B LxCTx\H\$1HuHH\$HHH9vH)C|I4,H"HD$HcH9|`Hk H@HH=HHE11CDyLMH"@ L)H11AEUHH53SH,dH%(HD$1HtHfSHH5B H`,dH%(HD$X1HD$PHL$0HD$(HD$PHT$PHD$0PHD$XPHD$8PHD$`PHD$@P1LL$hLD$@H0t;HHCPSjt$pt$PLL$PLD$pHL$HHT$hHt$@H|$8IH0HD$XdH3%(uH`[f.SHH5b H`,dH%(HD$X1HD$PHL$0HD$(HD$PHT$PHD$0PHD$XPHD$8PHD$`PHD$@P1LL$hLD$@H0t;HHCPSjt$pt$PLL$PLD$pHL$HHT$hHt$@H|$8iH0HD$XdH3%(uH`[:f.H7 @HtgSH_Ht=H{Ht {t>H;qH;{Ht[f.[fD[2f+fff.@AW1IH= AVAUA1ATUSHH(11ɾH= Hx H5lLI!9AIG HD$H-{#H;H5 &H HL$HtxMHHHD$H;H5? HtxH(HH; H5+ HtxaL IH;H50 H#xHHT$HH|$HHLxHL$LHHH[HLcH;H5PA9ANljD$!IHx~A|$HcI7HHVHI9HIL1HxH)HXT$Ht$HHHAEbE -HH(HDpC HCCDHH=p5 DkH([]A\A]A^A_fLHeXH5LuXIGAHD$@[HH(HDpy^H)C HcHCQDH(1[]A\A]A^A_HC Hc%Gff.H^AWAVAUATUSH8L~MFDL$,E1LD$ HL$H$H|$=fDHAI?HHpP (H|$HH $H)H9H] AG I݅tA_ALcLIIcW1HU HuLAW 9sE1fDAW AB29$IcI?LAu_AW AB29~McD)K4 LcA_ILLL$^LL$EGLH|$LOH|$HHHDfDIwLIcKID$,tiAW taIcOtY)IO1HcHAAW IwI?usoIcW Iw1EGH|$H|$H9@HL$ HtL)H8[]A\A]A^A_@LE11H81[]A\A]A^A_ HH%denabledmcrypt supportmcrypt_filter support2.5.8VersionApi NoSupported ciphersSupported modesmcrypt.*mdecrypt.*mcryptMCRYPT_ENCRYPTMCRYPT_DECRYPTMCRYPT_DEV_RANDOMMCRYPT_DEV_URANDOMMCRYPT_RANDtripledesMCRYPT_3DESarcfour-ivMCRYPT_ARCFOUR_IVarcfourMCRYPT_ARCFOURblowfishMCRYPT_BLOWFISHblowfish-compatMCRYPT_BLOWFISH_COMPATcast-128MCRYPT_CAST_128cast-256MCRYPT_CAST_256MCRYPT_CRYPTMCRYPT_DESMCRYPT_ENIGNAgostMCRYPT_GOSTloki97MCRYPT_LOKI97panamaMCRYPT_PANAMArc2MCRYPT_RC2rijndael-128MCRYPT_RIJNDAEL_128rijndael-192MCRYPT_RIJNDAEL_192rijndael-256MCRYPT_RIJNDAEL_256safer-sk64MCRYPT_SAFER64safer-sk128MCRYPT_SAFER128saferplusMCRYPT_SAFERPLUSserpentMCRYPT_SERPENTthreewayMCRYPT_THREEWAYMCRYPT_TRIPLEDEStwofishMCRYPT_TWOFISHwakeMCRYPT_WAKExteaMCRYPT_XTEAideaMCRYPT_IDEAmarsMCRYPT_MARSrc6MCRYPT_RC6skipjackMCRYPT_SKIPJACKcbcMCRYPT_MODE_CBCcfbMCRYPT_MODE_CFBecbMCRYPT_MODE_ECBnofbMCRYPT_MODE_NOFBMCRYPT_MODE_OFBstreamMCRYPT_MODE_STREAMssssMCryptModule initialization failedrssKey size is 0Key length incorrectMemory allocation errorUnknown errorAn empty string was passedInteger overflow in data sizeNo modes found in module dir/dev/random/dev/urandoml|lCannot open source deviceMcrypt initialisation failedssss|smcrypt.algorithms_dirmcrypt.modes_dir7.0.33API20151012,NTSmcrypt_get_key_sizemcrypt_get_block_sizemcrypt_get_cipher_namemcrypt_create_ivmcrypt_list_algorithmsmcrypt_list_modesmcrypt_get_iv_sizemcrypt_encryptmcrypt_decryptmcrypt_module_openmcrypt_generic_initmcrypt_genericmdecrypt_genericmcrypt_generic_deinitmcrypt_enc_self_testmcrypt_enc_is_block_algorithmmcrypt_enc_is_block_modemcrypt_enc_get_block_sizemcrypt_enc_get_key_sizemcrypt_enc_get_iv_sizemcrypt_enc_get_modes_namemcrypt_module_self_testmcrypt_module_is_block_modemcrypt_module_closesourcecipherkeydatamodulelib_dirtdcipher_directorymode_directoryCould not open encryption moduleKey size too large; supplied length: %zd, max: %dIv size incorrect; supplied length: %zd, needed: %dOperation disallowed prior to mcrypt_generic_init().Data size too large, %d maximumNo algorithms found in module dirCannot create an IV with a size of less than 1 or greater than %dCould not gather sufficient random dataCould not terminate encryption specifierOnly keys of size 1 to %d supportedOnly keys of size %d supportedKey of size %d not supported by this algorithm. %sEncryption mode requires an initialization vector of size %dReceived initialization vector of size %d, but size %d is required for this encryption modemcrypt_enc_is_block_algorithm_modemcrypt_enc_get_supported_key_sizesmcrypt_enc_get_algorithms_namemcrypt_module_is_block_algorithm_modemcrypt_module_is_block_algorithmmcrypt_module_get_algo_block_sizemcrypt_module_get_algo_key_sizemcrypt_module_get_supported_key_sizeso@AOnly keys of sizmdecrypt.mcrypt.Filter parameters for %s must be an arraymode is not a string, ignoringalgorithms_dir is not a string, ignoringmodes_dir is not a string, ignoringkey not specified or is not a stringFilter parameter[iv] not provided or not of type: string;;(xxp۹0<Vw \ ڻ D @TؾtXh<(DXh(PH$hHh0T8xXx H<  (p X  P h zRx $FJ w?:*3$"Dh\@ p<6E^ E ML\FFB B(A0A8D 8A0A(B BBBI *EdkEeT2E] N A<8tEANpcxFFFUpz AAF zRx p ! EN f AF 0`FAK DP  AABA zRx P$! 4EN f AF 0X$FAK DP  AABA B! EN e AG \FBB L(A0A8DaFRAH 8A0A(B BBBH $zRx , `|EN f AF EN f AF 0TFAK DP  AABA !@FLB A(A0DP 0A(A BBBI zRx P(\[@lFLB A(A0DP5 0A(A BBBI _[0(FAK D@  AABG EN f AF @EN f AF @EN f AF 8dFBK A(D@ (A ABBH 8FBA K(DP (A ABBG zRx P$n!8FBK A(D@ (A ABBH LEN@k AA pLEN@l AA EN@l AA $EN@l AA EN@i AA EN@i AA 0$hFAK DP  AABA 0XFAK D@  AABA zRx @$߱0lFAK D@  AABA lH9FBB L(A0A8D`# 8A0A(B BBBG zRx `(O'(EKD0p AAJ zRx 0 !LBBB H(A0A8G5 8A0A(B BBBJ $zRx ,Tt hENpuxFFFFFUpIxEABDDgpT AA T ENpuxFFFFFUpIxEABDDgpT AA $ x ,< pqJw O A G A G Pdl BFNB G(A0A8L`M 8A0A(B BBBN  8C0A(B BBBH گ!x OBB B(A0A8Dp6 8A0A(B BBBE KCpD 8C0A(B BBBA GNU@::` &tF@ :tL Pt0T@ gt\ xt[ t[ t0H tf tpg t`E tI tpM uN u^ /uQ@ HyR DuR@ buK {u L uPF pyP uG@ y0S uU uV` ypW yX uX@ z Y 0zY Pz@Z vH ks&v-v4v8vvuo-v4v8vvuo-v-v=v-v=v-v=vDvDvXuDvXuDvXuDvvuDvXuDvvuDvXuDvLvLvLvLvLvLvLvLvLvLvLvLvLv8vLv8vLv4vo-vOvvu`vs s   H+ nP X o`  P X P# ooooo8 ++++++++,, ,0,@,P,`,p,,,,,,,,,-- -0-@-P-`-p---------.. .0.@.P.`.p.........// /0/@/P/`/p/////////00 000@0P0z3Ko ??:t P:`:th0l`h7oGCC: (GNU) 8.5.0 20210514 (Red Hat 8.5.0-28)GA$3a1H+n GA$3p1113@5\hGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA$3p1113`hnGA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFYP:\hGA+GLIBCXX_ASSERTIONSGA+GLIBCXX_ASSERTIONS`hh GA*FORTIFY P: \h) 9? 9Y @5t b8 9 9 9 9 P:# ]:G P: ^ ]: : `:6 : v? : v?* ?J ?*] ?~ E ?k E2 `  E RE RE@ LFd @5! LF F F G" a5!A Gk .H .H H 5! H" ~IG ~In K 5 K L L5 L` L aM G6! aM N h6[- NQ Ps 6[ P ~Q ~Q! RG R} R R .S  .SC  (Ts  (T  U  7!  U  V?  Vj  eW  eW  W  W7  Xi  X  Y  Y  Y-  Y`  3Z  3Z  [  [+  [S  ?7v  [  \  ]7  \ ^" {7'? ^h _ 7! _ f _ 7A fc fg fg Fh Fh \h@ H H1@ 0P Hi 0 0 H   x `" H9 HR 0p@ 0 0@ 0 0 0! 0A 0l@ 0 0 0` H H" HK@ Ho H H H 0  `h$ nA 9^ 9 b8 9 9 9  9+ 9M `hs h `hq h "l hB + b8!K "ll n 0l 9 9 : X  @: P )7 Y] pW 0T 0S  X `E n N0 VL Id R L ^ P @Z  U) [?` L f_ Qx  K pM X [ pg H 0H4 E8 N Ff \9{ PF{ؠ X   G R( YL L^ H+8` # H+ p+ `0 @5 nn{}P X ` 8 X    `aj| #3L_ؠ fP(AW`l;4 CUnP c-h<  Ph $-ؠ 9EL^,4jt}  " + 4 .annobin_mcrypt.c.annobin_mcrypt.c_end.annobin_mcrypt.c.hot.annobin_mcrypt.c_end.hot.annobin_mcrypt.c.unlikely.annobin_mcrypt.c_end.unlikely.annobin_mcrypt.c.startup.annobin_mcrypt.c_end.startup.annobin_mcrypt.c.exit.annobin_mcrypt.c_end.exit.annobin_zm_globals_ctor_mcrypt.start.annobin_zm_globals_ctor_mcrypt.endzm_globals_ctor_mcrypt.annobin_zm_globals_dtor_mcrypt.start.annobin_zm_globals_dtor_mcrypt.endzm_globals_dtor_mcrypt.annobin_zm_info_mcrypt.start.annobin_zm_info_mcrypt.endzm_info_mcrypt.annobin_zm_shutdown_mcrypt.start.annobin_zm_shutdown_mcrypt.endzm_shutdown_mcrypt.annobin_zm_startup_mcrypt.start.annobin_zm_startup_mcrypt.endzm_startup_mcryptphp_mcrypt_module_dtorle_mcrypt.annobin_php_mcrypt_module_dtor.start.annobin_php_mcrypt_module_dtor.end.annobin_zif_mcrypt_module_open.start.annobin_zif_mcrypt_module_open.endzif_mcrypt_module_open.cold.2.annobin_zif_mcrypt_enc_get_key_size.start.annobin_zif_mcrypt_enc_get_key_size.end.annobin_zif_mcrypt_get_key_size.start.annobin_zif_mcrypt_get_key_size.endzif_mcrypt_get_key_size.cold.3.annobin_zif_mcrypt_enc_get_iv_size.start.annobin_zif_mcrypt_enc_get_iv_size.end.annobin_zif_mcrypt_get_iv_size.start.annobin_zif_mcrypt_get_iv_size.endzif_mcrypt_get_iv_size.cold.4.annobin_zif_mcrypt_module_close.start.annobin_zif_mcrypt_module_close.end.annobin_zif_mcrypt_generic_init.start.annobin_zif_mcrypt_generic_init.endzif_mcrypt_generic_init.cold.5.annobin_zif_mcrypt_enc_is_block_mode.start.annobin_zif_mcrypt_enc_is_block_mode.end.annobin_zif_mcrypt_enc_get_block_size.start.annobin_zif_mcrypt_enc_get_block_size.end.annobin_zif_mcrypt_get_block_size.start.annobin_zif_mcrypt_get_block_size.endzif_mcrypt_get_block_size.cold.6.annobin_zif_mcrypt_generic.start.annobin_zif_mcrypt_generic.endzif_mcrypt_generic.cold.7.annobin_zif_mdecrypt_generic.start.annobin_zif_mdecrypt_generic.endzif_mdecrypt_generic.cold.8.annobin_zif_mcrypt_enc_get_supported_key_sizes.start.annobin_zif_mcrypt_enc_get_supported_key_sizes.end.annobin_zif_mcrypt_enc_self_test.start.annobin_zif_mcrypt_enc_self_test.end.annobin_zif_mcrypt_enc_is_block_algorithm_mode.start.annobin_zif_mcrypt_enc_is_block_algorithm_mode.end.annobin_zif_mcrypt_enc_is_block_algorithm.start.annobin_zif_mcrypt_enc_is_block_algorithm.end.annobin_zif_mcrypt_enc_get_algorithms_name.start.annobin_zif_mcrypt_enc_get_algorithms_name.end.annobin_zif_mcrypt_get_cipher_name.start.annobin_zif_mcrypt_get_cipher_name.endzif_mcrypt_get_cipher_name.cold.9.annobin_zif_mcrypt_enc_get_modes_name.start.annobin_zif_mcrypt_enc_get_modes_name.end.annobin_zif_mcrypt_module_self_test.start.annobin_zif_mcrypt_module_self_test.end.annobin_zif_mcrypt_module_is_block_algorithm_mode.start.annobin_zif_mcrypt_module_is_block_algorithm_mode.end.annobin_zif_mcrypt_module_is_block_algorithm.start.annobin_zif_mcrypt_module_is_block_algorithm.end.annobin_zif_mcrypt_module_is_block_mode.start.annobin_zif_mcrypt_module_is_block_mode.end.annobin_zif_mcrypt_module_get_algo_block_size.start.annobin_zif_mcrypt_module_get_algo_block_size.end.annobin_zif_mcrypt_module_get_algo_key_size.start.annobin_zif_mcrypt_module_get_algo_key_size.end.annobin_zif_mcrypt_module_get_supported_key_sizes.start.annobin_zif_mcrypt_module_get_supported_key_sizes.end.annobin_zif_mcrypt_list_algorithms.start.annobin_zif_mcrypt_list_algorithms.endzif_mcrypt_list_algorithms.cold.10.annobin_zif_mcrypt_list_modes.start.annobin_zif_mcrypt_list_modes.endzif_mcrypt_list_modes.cold.11.annobin_zif_mcrypt_create_iv.start.annobin_zif_mcrypt_create_iv.endzif_mcrypt_create_iv.cold.12.annobin_zif_mcrypt_generic_deinit.start.annobin_zif_mcrypt_generic_deinit.endzif_mcrypt_generic_deinit.cold.13.annobin_php_mcrypt_do_crypt.isra.1.start.annobin_php_mcrypt_do_crypt.isra.1.endphp_mcrypt_do_crypt.isra.1php_mcrypt_do_crypt.isra.1.cold.14.annobin_zif_mcrypt_encrypt.start.annobin_zif_mcrypt_encrypt.end.annobin_zif_mcrypt_decrypt.start.annobin_zif_mcrypt_decrypt.end.annobin_get_module.start.annobin_get_module.endarginfo_mcrypt_get_key_sizearginfo_mcrypt_get_block_sizearginfo_mcrypt_get_cipher_namearginfo_mcrypt_create_ivarginfo_mcrypt_list_algorithmsarginfo_mcrypt_list_modesarginfo_mcrypt_get_iv_sizearginfo_mcrypt_encryptarginfo_mcrypt_decryptarginfo_mcrypt_module_openarginfo_mcrypt_generic_initarginfo_mcrypt_genericarginfo_mdecrypt_genericarginfo_mcrypt_generic_deinitarginfo_mcrypt_enc_self_testarginfo_mcrypt_enc_is_block_algorithm_modearginfo_mcrypt_enc_is_block_algorithmarginfo_mcrypt_enc_is_block_modearginfo_mcrypt_enc_get_block_sizearginfo_mcrypt_enc_get_key_sizearginfo_mcrypt_enc_get_supported_key_sizesarginfo_mcrypt_enc_get_iv_sizearginfo_mcrypt_enc_get_algorithms_namearginfo_mcrypt_enc_get_modes_namearginfo_mcrypt_module_self_testarginfo_mcrypt_module_is_block_algorithm_modearginfo_mcrypt_module_is_block_algorithmarginfo_mcrypt_module_is_block_modearginfo_mcrypt_module_get_algo_block_sizearginfo_mcrypt_module_get_algo_key_sizearginfo_mcrypt_module_get_supported_key_sizesarginfo_mcrypt_module_close.annobin_mcrypt_filter.c.annobin_mcrypt_filter.c_end.annobin_mcrypt_filter.c.hot.annobin_mcrypt_filter.c_end.hot.annobin_mcrypt_filter.c.unlikely.annobin_mcrypt_filter.c_end.unlikely.annobin_mcrypt_filter.c.startup.annobin_mcrypt_filter.c_end.startup.annobin_mcrypt_filter.c.exit.annobin_mcrypt_filter.c_end.exit.annobin_php_mcrypt_filter_dtor.start.annobin_php_mcrypt_filter_dtor.endphp_mcrypt_filter_dtor.annobin_php_mcrypt_filter_create.start.annobin_php_mcrypt_filter_create.endphp_mcrypt_filter_createphp_mcrypt_filter_opsphp_mcrypt_filter_create.cold.0.annobin_php_mcrypt_filter.start.annobin_php_mcrypt_filter.endphp_mcrypt_filterderegister_tm_clones__do_global_dtors_auxcompleted.7303__do_global_dtors_aux_fini_array_entryframe_dummy__frame_dummy_init_array_entry__FRAME_END__zif_mcrypt_module_get_algo_block_sizezif_mcrypt_module_is_block_algorithm_modezif_mcrypt_get_cipher_namezif_mcrypt_enc_get_algorithms_namemcrypt_module_entryzif_mcrypt_module_is_block_algorithmzif_mcrypt_module_open_finizif_mdecrypt_genericzif_mcrypt_module_self_testzif_mcrypt_generic_initzif_mcrypt_enc_is_block_algorithmzif_mcrypt_get_block_sizezif_mcrypt_generic_deinitzif_mcrypt_enc_get_supported_key_sizeszif_mcrypt_module_get_supported_key_sizeszif_mcrypt_enc_get_modes_namezif_mcrypt_list_modes__dso_handlezif_mcrypt_encryptzif_mcrypt_enc_self_testmcrypt_globalszif_mcrypt_enc_is_block_modezif_mcrypt_genericzif_mcrypt_module_is_block_modezif_mcrypt_list_algorithmszif_mcrypt_decryptzif_mcrypt_module_closezif_mcrypt_get_iv_sizemcrypt_functions_DYNAMICzif_mcrypt_get_key_sizezif_mcrypt_create_ivzif_mcrypt_enc_get_key_size__GNU_EH_FRAME_HDR__TMC_END___GLOBAL_OFFSET_TABLE_php_mcrypt_filter_factoryzif_mcrypt_enc_get_iv_sizezif_mcrypt_enc_is_block_algorithm_modezif_mcrypt_module_get_algo_key_sizezif_mcrypt_enc_get_block_sizefree@@GLIBC_2.2.5add_index_longzend_parse_parametersmcrypt_enc_mode_has_iv_ITM_deregisterTMCloneTablezend_register_ini_entriesphp_stream_filter_unregister_factoryzend_list_closeap_php_snprintf_php_stream_filter_allocsmart_str_erealloc_edatazend_register_string_constantstrlen@@GLIBC_2.2.5mcrypt_module_get_algo_supported_key_sizes__stack_chk_fail@@GLIBC_2.4php_stream_bucket_appendzend_unregister_ini_entrieszend_fetch_resourcephp_info_print_table_rowphp_stream_bucket_newphp_rand_emalloc_32php_stream_bucket_make_writeablememset@@GLIBC_2.2.5OnUpdateStringclose@@GLIBC_2.2.5mcrypt_generic_endzend_register_resourceread@@GLIBC_2.2.5zend_register_long_constantphp_stream_bucket_delref__gmon_start__php_error_docref0php_info_print_table_endmemcpy@@GLIBC_2.14display_ini_entrieszend_register_list_destructors_ex_emalloc_16__zend_mallocstrncasecmp@@GLIBC_2.2.5php_info_print_table_headerzend_hash_str_findget_module_ecalloc__bss_start_array_init_efreeopen@@GLIBC_2.2.5mcrypt_free_estrndup_emallocphp_stream_bucket_unlinkzend_ini_string_ex_ITM_registerTMCloneTablephp_info_print_table_startphp_stream_filter_register_factory__cxa_finalize@@GLIBC_2.2.5mcrypt_free_pspprintfadd_index_string.symtab.strtab.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.comment.gnu.build.attributes88$.o``48 (@ PHoUo@dnB##PxH+H+sp+p+~`0`0@5@5v9nn nn {{}}d  P PX X` ` 8 8 X X  ؠ@ 0ؠ-  `lx PE #PK!OvRRbuild/acinclude.m4nu[dnl dnl $Id$ dnl dnl This file contains local autoconf functions. dnl dnl ------------------------------------------------------------------------- dnl Output stylize macros for configure (help/runtime) dnl ------------------------------------------------------------------------- dnl dnl PHP_HELP_SEPARATOR(title) dnl dnl Adds separator title into the configure --help display. dnl AC_DEFUN([PHP_HELP_SEPARATOR],[ AC_ARG_ENABLE([],[ $1 ],[]) ]) dnl dnl PHP_CONFIGURE_PART(title) dnl dnl Adds separator title configure output (idea borrowed from mm) dnl AC_DEFUN([PHP_CONFIGURE_PART],[ AC_MSG_RESULT() AC_MSG_RESULT([${T_MD}$1${T_ME}]) ]) dnl ------------------------------------------------------------------------- dnl Build system helper macros dnl ------------------------------------------------------------------------- dnl dnl PHP_DEF_HAVE(what) dnl dnl Generates 'AC_DEFINE(HAVE_WHAT, 1, [ ])' dnl AC_DEFUN([PHP_DEF_HAVE],[AC_DEFINE([HAVE_]translit($1,a-z_.-,A-Z___), 1, [ ])]) dnl dnl PHP_RUN_ONCE(namespace, variable, code) dnl dnl execute code, if variable is not set in namespace dnl AC_DEFUN([PHP_RUN_ONCE],[ changequote({,}) unique=`echo $2|$SED 's/[^a-zA-Z0-9]/_/g'` changequote([,]) cmd="echo $ac_n \"\$$1$unique$ac_c\"" if test -n "$unique" && test "`eval $cmd`" = "" ; then eval "$1$unique=set" $3 fi ]) dnl dnl PHP_EXPAND_PATH(path, variable) dnl dnl expands path to an absolute path and assigns it to variable dnl AC_DEFUN([PHP_EXPAND_PATH],[ if test -z "$1" || echo "$1" | grep '^/' >/dev/null ; then $2=$1 else changequote({,}) ep_dir=`echo $1|$SED 's%/*[^/][^/]*/*$%%'` changequote([,]) ep_realdir=`(cd "$ep_dir" && pwd)` $2="$ep_realdir"/`basename "$1"` fi ]) dnl dnl PHP_DEFINE(WHAT [, value[, directory]]) dnl dnl Creates builddir/include/what.h and in there #define WHAT value dnl AC_DEFUN([PHP_DEFINE],[ [echo "#define ]$1[]ifelse([$2],,[ 1],[ $2])[" > ]ifelse([$3],,[include],[$3])[/php_]translit($1,A-Z,a-z)[.h] ]) dnl dnl PHP_SUBST(varname) dnl dnl Adds variable with it's value into Makefile, e.g.: dnl CC = gcc dnl AC_DEFUN([PHP_SUBST],[ PHP_VAR_SUBST="$PHP_VAR_SUBST $1" ]) dnl dnl PHP_SUBST_OLD(varname) dnl dnl Same as PHP_SUBST() but also substitutes all @VARNAME@ dnl instances in every file passed to AC_OUTPUT() dnl AC_DEFUN([PHP_SUBST_OLD],[ PHP_SUBST($1) AC_SUBST($1) ]) dnl dnl PHP_OUTPUT(file) dnl dnl Adds "file" to the list of files generated by AC_OUTPUT dnl This macro can be used several times. dnl AC_DEFUN([PHP_OUTPUT],[ PHP_OUTPUT_FILES="$PHP_OUTPUT_FILES $1" ]) dnl ------------------------------------------------------------------------- dnl Build system base macros dnl ------------------------------------------------------------------------- dnl dnl PHP_CANONICAL_HOST_TARGET dnl AC_DEFUN([PHP_CANONICAL_HOST_TARGET],[ AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_TARGET])dnl dnl Make sure we do not continue if host_alias is empty. if test -z "$host_alias" && test -n "$host"; then host_alias=$host fi if test -z "$host_alias"; then AC_MSG_ERROR([host_alias is not set!]) fi ]) dnl dnl PHP_INIT_BUILD_SYSTEM dnl AC_DEFUN([PHP_INIT_BUILD_SYSTEM],[ AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl test -d include || $php_shtool mkdir include > Makefile.objects > Makefile.fragments dnl We need to play tricks here to avoid matching the grep line itself pattern=define $EGREP $pattern'.*include/php' $srcdir/configure|$SED 's/.*>//'|xargs touch 2>/dev/null ]) dnl dnl PHP_GEN_GLOBAL_MAKEFILE dnl dnl Generates the global makefile. dnl AC_DEFUN([PHP_GEN_GLOBAL_MAKEFILE],[ cat >Makefile <> Makefile done cat $abs_srcdir/Makefile.global Makefile.fragments Makefile.objects >> Makefile ]) dnl dnl PHP_ADD_MAKEFILE_FRAGMENT([srcfile [, ext_srcdir [, ext_builddir]]]) dnl dnl Processes a file called Makefile.frag in the source directory dnl of the most recently added extension. $(srcdir) and $(builddir) dnl are substituted with the proper paths. Can be used to supply dnl custom rules and/or additional targets. dnl AC_DEFUN([PHP_ADD_MAKEFILE_FRAGMENT],[ ifelse($1,,src=$ext_srcdir/Makefile.frag,src=$1) ifelse($2,,ac_srcdir=$ext_srcdir,ac_srcdir=$2) ifelse($3,,ac_builddir=$ext_builddir,ac_builddir=$3) test -f "$src" && $SED -e "s#\$(srcdir)#$ac_srcdir#g" -e "s#\$(builddir)#$ac_builddir#g" $src >> Makefile.fragments ]) dnl dnl PHP_ADD_SOURCES(source-path, sources [, special-flags [, type]]) dnl dnl Adds sources which are located relative to source-path to the dnl array of type type. Sources are processed with optional dnl special-flags which are passed to the compiler. Sources dnl can be either written in C or C++ (filenames shall end in .c dnl or .cpp, respectively). dnl dnl Note: If source-path begins with a "/", the "/" is removed and dnl the path is interpreted relative to the top build-directory. dnl dnl which array to append to? AC_DEFUN([PHP_ADD_SOURCES],[ PHP_ADD_SOURCES_X($1, $2, $3, ifelse($4,sapi,PHP_SAPI_OBJS,PHP_GLOBAL_OBJS)) ]) dnl dnl _PHP_ASSIGN_BUILD_VARS(type) dnl internal, don't use AC_DEFUN([_PHP_ASSIGN_BUILD_VARS],[ ifelse($1,shared,[ b_c_pre=$shared_c_pre b_cxx_pre=$shared_cxx_pre b_c_meta=$shared_c_meta b_cxx_meta=$shared_cxx_meta b_c_post=$shared_c_post b_cxx_post=$shared_cxx_post ],[ b_c_pre=$php_c_pre b_cxx_pre=$php_cxx_pre b_c_meta=$php_c_meta b_cxx_meta=$php_cxx_meta b_c_post=$php_c_post b_cxx_post=$php_cxx_post ])dnl b_lo=[$]$1_lo ]) dnl dnl PHP_ADD_SOURCES_X(source-path, sources[, special-flags[, target-var[, shared[, special-post-flags]]]]) dnl dnl Additional to PHP_ADD_SOURCES (see above), this lets you set the dnl name of the array target-var directly, as well as whether dnl shared objects will be built from the sources. dnl dnl Should not be used directly. dnl AC_DEFUN([PHP_ADD_SOURCES_X],[ dnl relative to source- or build-directory? dnl ac_srcdir/ac_bdir include trailing slash case $1 in ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir; ac_inc="-I. -I$abs_srcdir" ;; /*[)] ac_srcdir=`echo "$1"|cut -c 2-`"/"; ac_bdir=$ac_srcdir; ac_inc="-I$ac_bdir -I$abs_srcdir/$ac_bdir" ;; *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$1/"; ac_inc="-I$ac_bdir -I$ac_srcdir" ;; esac dnl how to build .. shared or static? ifelse($5,yes,_PHP_ASSIGN_BUILD_VARS(shared),_PHP_ASSIGN_BUILD_VARS(php)) dnl iterate over the sources old_IFS=[$]IFS for ac_src in $2; do dnl remove the suffix IFS=. set $ac_src ac_obj=[$]1 IFS=$old_IFS dnl append to the array which has been dynamically chosen at m4 time $4="[$]$4 [$]ac_bdir[$]ac_obj.lo" dnl choose the right compiler/flags/etc. for the source-file case $ac_src in *.c[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; *.s[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; *.S[)] ac_comp="$b_c_pre $3 $ac_inc $b_c_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_c_post" ;; *.cpp|*.cc|*.cxx[)] ac_comp="$b_cxx_pre $3 $ac_inc $b_cxx_meta -c $ac_srcdir$ac_src -o $ac_bdir$ac_obj.$b_lo $6$b_cxx_post" ;; esac dnl create a rule for the object/source combo cat >>Makefile.objects< conftest.c cmd='$CC $1 -c conftest.c' if eval $cmd 2>&1 | $EGREP -e $1 >/dev/null ; then ac_result=no else ac_result=yes fi eval $gcc_arg_name=$ac_result rm -f conftest.* ]) if eval test "\$$gcc_arg_name" = "yes"; then $2 else : $3 fi ]) dnl dnl PHP_LIBGCC_LIBPATH(gcc) dnl dnl Stores the location of libgcc in libgcc_libpath dnl AC_DEFUN([PHP_LIBGCC_LIBPATH],[ changequote({,}) libgcc_libpath=`$1 --print-libgcc-file-name|$SED 's%/*[^/][^/]*$%%'` changequote([,]) ]) dnl ------------------------------------------------------------------------- dnl Macros to modify LIBS, INCLUDES, etc. variables dnl ------------------------------------------------------------------------- dnl dnl PHP_REMOVE_USR_LIB(NAME) dnl dnl Removes all -L/usr/$PHP_LIBDIR entries from variable NAME dnl AC_DEFUN([PHP_REMOVE_USR_LIB],[ unset ac_new_flags for i in [$]$1; do case [$]i in -L/usr/$PHP_LIBDIR|-L/usr/$PHP_LIBDIR/[)] ;; *[)] ac_new_flags="[$]ac_new_flags [$]i" ;; esac done $1=[$]ac_new_flags ]) dnl dnl PHP_EVAL_LIBLINE(libline, SHARED-LIBADD) dnl dnl Use this macro, if you need to add libraries and or library search dnl paths to the PHP build system which are only given in compiler dnl notation. dnl AC_DEFUN([PHP_EVAL_LIBLINE],[ for ac_i in $1; do case $ac_i in -pthread[)] if test "$ext_shared" = "yes"; then $2="[$]$2 -pthread" else PHP_RUN_ONCE(EXTRA_LDFLAGS, [$ac_i], [EXTRA_LDFLAGS="$EXTRA_LDFLAGS $ac_i"]) PHP_RUN_ONCE(EXTRA_LDFLAGS_PROGRAM, [$ac_i], [EXTRA_LDFLAGS_PROGRAM="$EXTRA_LDFLAGS_PROGRAM $ac_i"]) fi ;; -l*[)] ac_ii=`echo $ac_i|cut -c 3-` PHP_ADD_LIBRARY($ac_ii,1,$2) ;; -L*[)] ac_ii=`echo $ac_i|cut -c 3-` PHP_ADD_LIBPATH($ac_ii,$2) ;; esac done ]) dnl dnl PHP_EVAL_INCLINE(headerline) dnl dnl Use this macro, if you need to add header search paths to the PHP dnl build system which are only given in compiler notation. dnl AC_DEFUN([PHP_EVAL_INCLINE],[ for ac_i in $1; do case $ac_i in -I*[)] ac_ii=`echo $ac_i|cut -c 3-` PHP_ADD_INCLUDE($ac_ii) ;; esac done ]) dnl internal, don't use AC_DEFUN([_PHP_ADD_LIBPATH_GLOBAL],[ PHP_RUN_ONCE(LIBPATH, $1, [ test -n "$ld_runpath_switch" && LDFLAGS="$LDFLAGS $ld_runpath_switch$1" LDFLAGS="$LDFLAGS -L$1" PHP_RPATHS="$PHP_RPATHS $1" ]) ])dnl dnl dnl dnl PHP_ADD_LIBPATH(path [, SHARED-LIBADD]) dnl dnl Adds a path to linkpath/runpath (LDFLAGS) dnl AC_DEFUN([PHP_ADD_LIBPATH],[ if test "$1" != "/usr/$PHP_LIBDIR" && test "$1" != "/usr/lib"; then PHP_EXPAND_PATH($1, ai_p) ifelse([$2],,[ _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) ],[ if test "$ext_shared" = "yes"; then $2="-L$ai_p [$]$2" test -n "$ld_runpath_switch" && $2="$ld_runpath_switch$ai_p [$]$2" else _PHP_ADD_LIBPATH_GLOBAL([$ai_p]) fi ]) fi ]) dnl dnl PHP_UTILIZE_RPATHS() dnl dnl builds RPATHS/LDFLAGS from PHP_RPATHS dnl AC_DEFUN([PHP_UTILIZE_RPATHS],[ OLD_RPATHS=$PHP_RPATHS unset PHP_RPATHS for i in $OLD_RPATHS; do dnl Can be passed to native cc/libtool PHP_LDFLAGS="$PHP_LDFLAGS -L$i" dnl Libtool-specific PHP_RPATHS="$PHP_RPATHS -R $i" dnl cc-specific NATIVE_RPATHS="$NATIVE_RPATHS $ld_runpath_switch$i" done if test "$PHP_RPATH" = "no"; then unset PHP_RPATHS unset NATIVE_RPATHS fi ]) dnl dnl PHP_ADD_INCLUDE(path [,before]) dnl dnl add an include path. dnl if before is 1, add in the beginning of INCLUDES. dnl AC_DEFUN([PHP_ADD_INCLUDE],[ if test "$1" != "/usr/include"; then PHP_EXPAND_PATH($1, ai_p) PHP_RUN_ONCE(INCLUDEPATH, $ai_p, [ if test "$2"; then INCLUDES="-I$ai_p $INCLUDES" else INCLUDES="$INCLUDES -I$ai_p" fi ]) fi ]) dnl internal, don't use AC_DEFUN([_PHP_X_ADD_LIBRARY],[dnl ifelse([$2],,$3="-l$1 [$]$3", $3="[$]$3 -l$1") dnl ])dnl dnl dnl internal, don't use AC_DEFUN([_PHP_ADD_LIBRARY_SKELETON],[ case $1 in c|c_r|pthread*[)] ;; *[)] ifelse($3,,[ _PHP_X_ADD_LIBRARY($1,$2,$5) ],[ if test "$ext_shared" = "yes"; then _PHP_X_ADD_LIBRARY($1,$2,$3) else $4($1,$2) fi ]) ;; esac ])dnl dnl dnl dnl PHP_ADD_LIBRARY(library[, append[, shared-libadd]]) dnl dnl add a library to the link line dnl AC_DEFUN([PHP_ADD_LIBRARY],[ _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY],[LIBS]) ]) dnl dnl PHP_ADD_LIBRARY_DEFER(library[, append[, shared-libadd]]) dnl dnl add a library to the link line (deferred, not used during configure) dnl AC_DEFUN([PHP_ADD_LIBRARY_DEFER],[ _PHP_ADD_LIBRARY_SKELETON([$1],[$2],[$3],[PHP_ADD_LIBRARY_DEFER],[DLIBS]) ]) dnl dnl PHP_ADD_LIBRARY_WITH_PATH(library, path[, shared-libadd]) dnl dnl add a library to the link line and path to linkpath/runpath. dnl if shared-libadd is not empty and $ext_shared is yes, dnl shared-libadd will be assigned the library information dnl AC_DEFUN([PHP_ADD_LIBRARY_WITH_PATH],[ ifelse($3,,[ if test -n "$2"; then PHP_ADD_LIBPATH($2) fi PHP_ADD_LIBRARY($1) ],[ if test "$ext_shared" = "yes"; then $3="-l$1 [$]$3" if test -n "$2"; then PHP_ADD_LIBPATH($2,$3) fi else PHP_ADD_LIBRARY_WITH_PATH($1,$2) fi ]) ]) dnl dnl PHP_ADD_LIBRARY_DEFER_WITH_PATH(library, path[, shared-libadd]) dnl dnl add a library to the link line (deferred) dnl and path to linkpath/runpath (not deferred) dnl if shared-libadd is not empty and $ext_shared is yes, dnl shared-libadd will be assigned the library information dnl AC_DEFUN([PHP_ADD_LIBRARY_DEFER_WITH_PATH],[ ifelse($3,,[ if test -n "$2"; then PHP_ADD_LIBPATH($2) fi PHP_ADD_LIBRARY_DEFER($1) ],[ if test "$ext_shared" = "yes"; then $3="-l$1 [$]$3" if test -n "$2"; then PHP_ADD_LIBPATH($2,$3) fi else PHP_ADD_LIBRARY_DEFER_WITH_PATH($1,$2) fi ]) ]) dnl dnl PHP_ADD_FRAMEWORK(framework [,before]) dnl dnl add a (Darwin / Mac OS X) framework to the link dnl line. if before is 1, the framework is added dnl to the beginning of the line. dnl AC_DEFUN([PHP_ADD_FRAMEWORK], [ PHP_RUN_ONCE(FRAMEWORKS, $1, [ if test "$2"; then PHP_FRAMEWORKS="-framework $1 $PHP_FRAMEWORKS" else PHP_FRAMEWORKS="$PHP_FRAMEWORKS -framework $1" fi ]) ]) dnl dnl PHP_ADD_FRAMEWORKPATH(path [,before]) dnl dnl add a (Darwin / Mac OS X) framework path to the link dnl and include lines. default paths include (but are dnl not limited to) /Local/Library/Frameworks and dnl /System/Library/Frameworks, so these don't need dnl to be specifically added. if before is 1, the dnl framework path is added to the beginning of the dnl relevant lines. dnl AC_DEFUN([PHP_ADD_FRAMEWORKPATH], [ PHP_EXPAND_PATH($1, ai_p) PHP_RUN_ONCE(FRAMEWORKPATH, $ai_p, [ if test "$2"; then PHP_FRAMEWORKPATH="-F$ai_p $PHP_FRAMEWORKPATH" else PHP_FRAMEWORKPATH="$PHP_FRAMEWORKPATH -F$ai_p" fi ]) ]) dnl dnl PHP_ADD_FRAMEWORK_WITH_PATH(framework, path) dnl dnl Adds a (Darwin / Mac OS X) framework path and the dnl framework itself to the link and include lines. dnl AC_DEFUN([PHP_ADD_FRAMEWORK_WITH_PATH], [ PHP_ADD_FRAMEWORKPATH($2) PHP_ADD_FRAMEWORK($1) ]) dnl dnl PHP_SET_LIBTOOL_VARIABLE(var) dnl dnl Set libtool variable dnl AC_DEFUN([PHP_SET_LIBTOOL_VARIABLE],[ if test -z "$LIBTOOL"; then LIBTOOL='$(SHELL) $(top_builddir)/libtool $1' else LIBTOOL="$LIBTOOL $1" fi ]) dnl ------------------------------------------------------------------------- dnl Wrapper macros for AC_ARG_WITH / AC_ARG_ENABLE dnl ------------------------------------------------------------------------- dnl PHP_ARG_ANALYZE_EX dnl internal AC_DEFUN([PHP_ARG_ANALYZE_EX],[ ext_output="yes, shared" ext_shared=yes case [$]$1 in shared,*[)] $1=`echo "[$]$1"|$SED 's/^shared,//'` ;; shared[)] $1=yes ;; no[)] ext_output=no ext_shared=no ;; *[)] ext_output=yes ext_shared=no ;; esac PHP_ALWAYS_SHARED([$1]) ]) dnl PHP_ARG_ANALYZE dnl internal AC_DEFUN([PHP_ARG_ANALYZE],[ ifelse([$3],yes,[PHP_ARG_ANALYZE_EX([$1])],[ext_output=ifelse([$]$1,,no,[$]$1)]) ifelse([$2],,,[AC_MSG_RESULT([$ext_output])]) ]) dnl dnl PHP_ARG_WITH(arg-name, check message, help text[, default-val[, extension-or-not]]) dnl Sets PHP_ARG_NAME either to the user value or to the default value. dnl default-val defaults to no. This will also set the variable ext_shared, dnl and will overwrite any previous variable of that name. dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run dnl the PHP_ARG_ANALYZE_EX. dnl AC_DEFUN([PHP_ARG_WITH],[ php_with_[]translit($1,A-Z0-9-,a-z0-9_)=ifelse($4,,no,$4) PHP_REAL_ARG_WITH([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_),[ifelse($5,,yes,$5)]) ]) dnl PHP_REAL_ARG_WITH dnl internal AC_DEFUN([PHP_REAL_ARG_WITH],[ ifelse([$2],,,[AC_MSG_CHECKING([$2])]) AC_ARG_WITH($1,[$3],$5=[$]withval, [ $5=ifelse($4,,no,$4) ifelse($6,yes,[test "$PHP_ENABLE_ALL" && $5=$PHP_ENABLE_ALL]) ]) PHP_ARG_ANALYZE($5,[$2],$6) ]) dnl dnl PHP_ARG_ENABLE(arg-name, check message, help text[, default-val[, extension-or-not]]) dnl Sets PHP_ARG_NAME either to the user value or to the default value. dnl default-val defaults to no. This will also set the variable ext_shared, dnl and will overwrite any previous variable of that name. dnl If extension-or-not is yes (default), then do the ENABLE_ALL check and run dnl the PHP_ARG_ANALYZE_EX. dnl AC_DEFUN([PHP_ARG_ENABLE],[ php_enable_[]translit($1,A-Z0-9-,a-z0-9_)=ifelse($4,,no,$4) PHP_REAL_ARG_ENABLE([$1],[$2],[$3],[$4],PHP_[]translit($1,a-z0-9-,A-Z0-9_),[ifelse($5,,yes,$5)]) ]) dnl PHP_REAL_ARG_ENABLE dnl internal AC_DEFUN([PHP_REAL_ARG_ENABLE],[ ifelse([$2],,,[AC_MSG_CHECKING([$2])]) AC_ARG_ENABLE($1,[$3],$5=[$]enableval, [ $5=ifelse($4,,no,$4) ifelse($6,yes,[test "$PHP_ENABLE_ALL" && $5=$PHP_ENABLE_ALL]) ]) PHP_ARG_ANALYZE($5,[$2],$6) ]) dnl ------------------------------------------------------------------------- dnl Build macros dnl ------------------------------------------------------------------------- dnl dnl PHP_BUILD_THREAD_SAFE dnl AC_DEFUN([PHP_BUILD_THREAD_SAFE],[ enable_maintainer_zts=yes if test "$pthreads_working" != "yes"; then AC_MSG_ERROR([ZTS currently requires working POSIX threads. We were unable to verify that your system supports Pthreads.]) fi ]) dnl dnl PHP_REQUIRE_CXX dnl AC_DEFUN([PHP_REQUIRE_CXX],[ if test -z "$php_cxx_done"; then AC_PROG_CXX AC_PROG_CXXCPP PHP_ADD_LIBRARY(stdc++) php_cxx_done=yes fi ]) dnl dnl PHP_BUILD_SHARED dnl AC_DEFUN([PHP_BUILD_SHARED],[ PHP_BUILD_PROGRAM OVERALL_TARGET=libphp[]$PHP_MAJOR_VERSION[.la] php_sapi_module=shared php_c_pre=$shared_c_pre php_c_meta=$shared_c_meta php_c_post=$shared_c_post php_cxx_pre=$shared_cxx_pre php_cxx_meta=$shared_cxx_meta php_cxx_post=$shared_cxx_post php_lo=$shared_lo ]) dnl dnl PHP_BUILD_STATIC dnl AC_DEFUN([PHP_BUILD_STATIC],[ PHP_BUILD_PROGRAM OVERALL_TARGET=libphp[]$PHP_MAJOR_VERSION[.la] php_sapi_module=static ]) dnl dnl PHP_BUILD_BUNDLE dnl AC_DEFUN([PHP_BUILD_BUNDLE],[ PHP_BUILD_PROGRAM OVERALL_TARGET=libs/libphp[]$PHP_MAJOR_VERSION[.bundle] php_sapi_module=static ]) dnl dnl PHP_BUILD_PROGRAM dnl AC_DEFUN([PHP_BUILD_PROGRAM],[ php_c_pre='$(LIBTOOL) --mode=compile $(CC)' php_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS)' php_c_post= php_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)' php_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS)' php_cxx_post= php_lo=lo case $with_pic in yes) pic_setting='-prefer-pic';; no) pic_setting='-prefer-non-pic';; esac shared_c_pre='$(LIBTOOL) --mode=compile $(CC)' shared_c_meta='$(COMMON_FLAGS) $(CFLAGS_CLEAN) $(EXTRA_CFLAGS) '$pic_setting shared_c_post= shared_cxx_pre='$(LIBTOOL) --mode=compile $(CXX)' shared_cxx_meta='$(COMMON_FLAGS) $(CXXFLAGS_CLEAN) $(EXTRA_CXXFLAGS) '$pic_setting shared_cxx_post= shared_lo=lo ]) dnl dnl PHP_SHARED_MODULE(module-name, object-var, build-dir, cxx, zend_ext) dnl dnl Basically sets up the link-stage for building module-name dnl from object_var in build-dir. dnl AC_DEFUN([PHP_SHARED_MODULE],[ install_modules="install-modules" suffix=la case $host_alias in *aix*[)] additional_flags="-Wl,-G" ;; esac if test "x$5" = "xyes"; then PHP_ZEND_EX="$PHP_ZEND_EX \$(phplibdir)/$1.$suffix" else PHP_MODULES="$PHP_MODULES \$(phplibdir)/$1.$suffix" fi PHP_SUBST($2) cat >>Makefile.objects<> $2 ]) dnl dnl _PHP_CHECK_SIZEOF(type, cross-value, extra-headers [, found-action [, not-found-action]]) dnl AC_DEFUN([_PHP_CHECK_SIZEOF], [ php_cache_value=php_cv_sizeof_[]$1 AC_CACHE_VAL(php_cv_sizeof_[]$1, [ old_LIBS=$LIBS LIBS= old_LDFLAGS=$LDFLAGS LDFLAGS= AC_TRY_RUN([#include #if STDC_HEADERS #include #include #endif #ifdef HAVE_INTTYPES_H #include #endif #ifdef HAVE_UNISTD_H #include #endif $3 int main() { FILE *fp = fopen("conftestval", "w"); if (!fp) return(1); fprintf(fp, "%d\n", sizeof($1)); return(0); } ], [ eval $php_cache_value=`cat conftestval` ], [ eval $php_cache_value=0 ], [ ifelse([$2],,[eval $php_cache_value=0], [eval $php_cache_value=$2]) ]) LDFLAGS=$old_LDFLAGS LIBS=$old_LIBS ]) if eval test "\$$php_cache_value" != "0"; then ifelse([$4],[],:,[$4]) ifelse([$5],[],,[else $5]) fi ]) dnl dnl PHP_CHECK_SIZEOF(type, cross-value, extra-headers) dnl AC_DEFUN([PHP_CHECK_SIZEOF], [ AC_MSG_CHECKING([size of $1]) _PHP_CHECK_SIZEOF($1, $2, $3, [ AC_DEFINE_UNQUOTED([SIZEOF_]translit($1,a-z,A-Z_), [$]php_cv_sizeof_[]$1, [Size of $1]) AC_DEFINE_UNQUOTED([HAVE_]translit($1,a-z,A-Z_), 1, [Whether $1 is available]) ]) AC_MSG_RESULT([[$][php_cv_sizeof_]translit($1, ,_)]) ]) dnl dnl PHP_CHECK_TYPES(type-list, include-file [, extra-headers]) dnl AC_DEFUN([PHP_CHECK_TYPES], [ for php_typename in $1; do AC_MSG_CHECKING([whether $php_typename exists]) _PHP_CHECK_SIZEOF($php_typename, 0, $3, [ _PHP_DEF_HAVE_FILE($php_typename, $2) AC_MSG_RESULT([yes]) ], [ AC_MSG_RESULT([no]) ]) done ]) dnl dnl PHP_CHECK_IN_ADDR_T dnl AC_DEFUN([PHP_CHECK_IN_ADDR_T], [ dnl AIX keeps in_addr_t in /usr/include/netinet/in.h AC_MSG_CHECKING([for in_addr_t]) AC_CACHE_VAL(ac_cv_type_in_addr_t, [AC_EGREP_CPP(dnl changequote(<<,>>)dnl <>dnl changequote([,]), [#include #if STDC_HEADERS #include #include #endif #ifdef HAVE_NETINET_IN_H #include #endif], ac_cv_type_in_addr_t=yes, ac_cv_type_in_addr_t=no)])dnl AC_MSG_RESULT([$ac_cv_type_in_addr_t]) if test $ac_cv_type_in_addr_t = no; then AC_DEFINE(in_addr_t, u_int, [ ]) fi ]) dnl dnl PHP_TIME_R_TYPE dnl dnl Check type of reentrant time-related functions dnl Type can be: irix, hpux or POSIX dnl AC_DEFUN([PHP_TIME_R_TYPE],[ AC_CACHE_CHECK(for type of reentrant time-related functions, ac_cv_time_r_type,[ AC_TRY_RUN([ #include main() { char buf[27]; struct tm t; time_t old = 0; int r, s; s = gmtime_r(&old, &t); r = (int) asctime_r(&t, buf, 26); if (r == s && s == 0) return (0); return (1); } ],[ ac_cv_time_r_type=hpux ],[ AC_TRY_RUN([ #include main() { struct tm t, *s; time_t old = 0; char buf[27], *p; s = gmtime_r(&old, &t); p = asctime_r(&t, buf, 26); if (p == buf && s == &t) return (0); return (1); } ],[ ac_cv_time_r_type=irix ],[ ac_cv_time_r_type=POSIX ],[ ac_cv_time_r_type=POSIX ]) ],[ ac_cv_time_r_type=POSIX ]) ]) case $ac_cv_time_r_type in hpux[)] AC_DEFINE(PHP_HPUX_TIME_R,1,[Whether you have HP-UX 10.x]) ;; irix[)] AC_DEFINE(PHP_IRIX_TIME_R,1,[Whether you have IRIX-style functions]) ;; esac ]) dnl dnl PHP_DOES_PWRITE_WORK dnl internal AC_DEFUN([PHP_DOES_PWRITE_WORK],[ AC_TRY_RUN([ #include #include #include #include #include $1 main() { int fd = open("conftest_in", O_WRONLY|O_CREAT, 0600); if (fd < 0) exit(1); if (pwrite(fd, "text", 4, 0) != 4) exit(1); /* Linux glibc breakage until 2.2.5 */ if (pwrite(fd, "text", 4, -1) != -1 || errno != EINVAL) exit(1); exit(0); } ],[ ac_cv_pwrite=yes ],[ ac_cv_pwrite=no ],[ ac_cv_pwrite=no ]) ]) dnl PHP_DOES_PREAD_WORK dnl internal AC_DEFUN([PHP_DOES_PREAD_WORK],[ echo test > conftest_in AC_TRY_RUN([ #include #include #include #include #include $1 main() { char buf[3]; int fd = open("conftest_in", O_RDONLY); if (fd < 0) exit(1); if (pread(fd, buf, 2, 0) != 2) exit(1); /* Linux glibc breakage until 2.2.5 */ if (pread(fd, buf, 2, -1) != -1 || errno != EINVAL) exit(1); exit(0); } ],[ ac_cv_pread=yes ],[ ac_cv_pread=no ],[ ac_cv_pread=no ]) rm -f conftest_in ]) dnl dnl PHP_PWRITE_TEST dnl AC_DEFUN([PHP_PWRITE_TEST],[ AC_CACHE_CHECK(whether pwrite works,ac_cv_pwrite,[ PHP_DOES_PWRITE_WORK if test "$ac_cv_pwrite" = "no"; then PHP_DOES_PWRITE_WORK([ssize_t pwrite(int, void *, size_t, off64_t);]) if test "$ac_cv_pwrite" = "yes"; then ac_cv_pwrite=64 fi fi ]) if test "$ac_cv_pwrite" != "no"; then AC_DEFINE(HAVE_PWRITE, 1, [ ]) if test "$ac_cv_pwrite" = "64"; then AC_DEFINE(PHP_PWRITE_64, 1, [whether pwrite64 is default]) fi fi ]) dnl dnl PHP_PREAD_TEST dnl AC_DEFUN([PHP_PREAD_TEST],[ AC_CACHE_CHECK(whether pread works,ac_cv_pread,[ PHP_DOES_PREAD_WORK if test "$ac_cv_pread" = "no"; then PHP_DOES_PREAD_WORK([ssize_t pread(int, void *, size_t, off64_t);]) if test "$ac_cv_pread" = "yes"; then ac_cv_pread=64 fi fi ]) if test "$ac_cv_pread" != "no"; then AC_DEFINE(HAVE_PREAD, 1, [ ]) if test "$ac_cv_pread" = "64"; then AC_DEFINE(PHP_PREAD_64, 1, [whether pread64 is default]) fi fi ]) dnl dnl PHP_MISSING_TIME_R_DECL dnl AC_DEFUN([PHP_MISSING_TIME_R_DECL],[ AC_MSG_CHECKING([for missing declarations of reentrant functions]) AC_TRY_COMPILE([#include ],[struct tm *(*func)() = localtime_r],[ : ],[ AC_DEFINE(MISSING_LOCALTIME_R_DECL,1,[Whether localtime_r is declared]) ]) AC_TRY_COMPILE([#include ],[struct tm *(*func)() = gmtime_r],[ : ],[ AC_DEFINE(MISSING_GMTIME_R_DECL,1,[Whether gmtime_r is declared]) ]) AC_TRY_COMPILE([#include ],[char *(*func)() = asctime_r],[ : ],[ AC_DEFINE(MISSING_ASCTIME_R_DECL,1,[Whether asctime_r is declared]) ]) AC_TRY_COMPILE([#include ],[char *(*func)() = ctime_r],[ : ],[ AC_DEFINE(MISSING_CTIME_R_DECL,1,[Whether ctime_r is declared]) ]) AC_TRY_COMPILE([#include ],[char *(*func)() = strtok_r],[ : ],[ AC_DEFINE(MISSING_STRTOK_R_DECL,1,[Whether strtok_r is declared]) ]) AC_MSG_RESULT([done]) ]) dnl dnl PHP_READDIR_R_TYPE dnl AC_DEFUN([PHP_READDIR_R_TYPE],[ dnl HAVE_READDIR_R is also defined by libmysql AC_CHECK_FUNC(readdir_r,ac_cv_func_readdir_r=yes,ac_cv_func_readdir=no) if test "$ac_cv_func_readdir_r" = "yes"; then AC_CACHE_CHECK(for type of readdir_r, ac_cv_what_readdir_r,[ AC_TRY_RUN([ #define _REENTRANT #include #include #ifndef PATH_MAX #define PATH_MAX 1024 #endif main() { DIR *dir; char entry[sizeof(struct dirent)+PATH_MAX]; struct dirent *pentry = (struct dirent *) &entry; dir = opendir("/"); if (!dir) exit(1); if (readdir_r(dir, (struct dirent *) entry, &pentry) == 0) { close(dir); exit(0); } close(dir); exit(1); } ],[ ac_cv_what_readdir_r=POSIX ],[ AC_TRY_CPP([ #define _REENTRANT #include #include int readdir_r(DIR *, struct dirent *); ],[ ac_cv_what_readdir_r=old-style ],[ ac_cv_what_readdir_r=none ]) ],[ ac_cv_what_readdir_r=none ]) ]) case $ac_cv_what_readdir_r in POSIX) AC_DEFINE(HAVE_POSIX_READDIR_R,1,[whether you have POSIX readdir_r]);; old-style) AC_DEFINE(HAVE_OLD_READDIR_R,1,[whether you have old-style readdir_r]);; esac fi ]) dnl dnl PHP_TM_GMTOFF dnl AC_DEFUN([PHP_TM_GMTOFF],[ AC_CACHE_CHECK([for tm_gmtoff in struct tm], ac_cv_struct_tm_gmtoff, [AC_TRY_COMPILE([#include #include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_gmtoff;], ac_cv_struct_tm_gmtoff=yes, ac_cv_struct_tm_gmtoff=no)]) if test "$ac_cv_struct_tm_gmtoff" = yes; then AC_DEFINE(HAVE_TM_GMTOFF,1,[whether you have tm_gmtoff in struct tm]) fi ]) dnl dnl PHP_STRUCT_FLOCK dnl AC_DEFUN([PHP_STRUCT_FLOCK],[ AC_CACHE_CHECK(for struct flock,ac_cv_struct_flock, AC_TRY_COMPILE([ #include #include ], [struct flock x;], [ ac_cv_struct_flock=yes ],[ ac_cv_struct_flock=no ]) ) if test "$ac_cv_struct_flock" = "yes" ; then AC_DEFINE(HAVE_STRUCT_FLOCK, 1,[whether you have struct flock]) fi ]) dnl dnl PHP_SOCKLEN_T dnl AC_DEFUN([PHP_SOCKLEN_T],[ AC_CACHE_CHECK(for socklen_t,ac_cv_socklen_t, AC_TRY_COMPILE([ #include #include ],[ socklen_t x; ],[ ac_cv_socklen_t=yes ],[ ac_cv_socklen_t=no ])) if test "$ac_cv_socklen_t" = "yes"; then AC_DEFINE(HAVE_SOCKLEN_T, 1, [Whether you have socklen_t]) fi ]) dnl dnl PHP_MISSING_FCLOSE_DECL dnl dnl See if we have broken header files like SunOS has. dnl AC_DEFUN([PHP_MISSING_FCLOSE_DECL],[ AC_MSG_CHECKING([for fclose declaration]) AC_TRY_COMPILE([#include ],[int (*func)() = fclose],[ AC_DEFINE(MISSING_FCLOSE_DECL,0,[ ]) AC_MSG_RESULT([ok]) ],[ AC_DEFINE(MISSING_FCLOSE_DECL,1,[ ]) AC_MSG_RESULT([missing]) ]) ]) dnl dnl PHP_AC_BROKEN_SPRINTF dnl dnl Check for broken sprintf(), C99 conformance dnl AC_DEFUN([PHP_AC_BROKEN_SPRINTF],[ AC_CACHE_CHECK(whether sprintf is broken, ac_cv_broken_sprintf,[ AC_TRY_RUN([main() {char buf[20];exit(sprintf(buf,"testing 123")!=11); }],[ ac_cv_broken_sprintf=no ],[ ac_cv_broken_sprintf=yes ],[ ac_cv_broken_sprintf=no ]) ]) if test "$ac_cv_broken_sprintf" = "yes"; then AC_DEFINE(PHP_BROKEN_SPRINTF, 1, [Whether sprintf is C99 conform]) else AC_DEFINE(PHP_BROKEN_SPRINTF, 0, [Whether sprintf is C99 conform]) fi ]) dnl dnl PHP_AC_BROKEN_SNPRINTF dnl dnl Check for broken snprintf(), C99 conformance dnl AC_DEFUN([PHP_AC_BROKEN_SNPRINTF],[ AC_CACHE_CHECK(whether snprintf is broken, ac_cv_broken_snprintf,[ AC_TRY_RUN([ #define NULL (0L) main() { char buf[20]; int res = 0; res = res || (snprintf(buf, 2, "marcus") != 6); res = res || (buf[1] != '\0'); /* Implementations may consider this as an encoding error */ snprintf(buf, 0, "boerger"); /* However, they MUST ignore the pointer */ res = res || (buf[0] != 'm'); res = res || (snprintf(NULL, 0, "boerger") != 7); res = res || (snprintf(buf, sizeof(buf), "%f", 0.12345678) != 8); exit(res); } ],[ ac_cv_broken_snprintf=no ],[ ac_cv_broken_snprintf=yes ],[ ac_cv_broken_snprintf=no ]) ]) if test "$ac_cv_broken_snprintf" = "yes"; then AC_DEFINE(PHP_BROKEN_SNPRINTF, 1, [Whether snprintf is C99 conform]) else AC_DEFINE(PHP_BROKEN_SNPRINTF, 0, [Whether snprintf is C99 conform]) fi ]) dnl dnl PHP_SOLARIS_PIC_WEIRDNESS dnl dnl Solaris requires main code to be position independent in order dnl to let shared objects find symbols. Weird. Ugly. dnl dnl Must be run after all --with-NN options that let the user dnl choose dynamic extensions, and after the gcc test. dnl AC_DEFUN([PHP_SOLARIS_PIC_WEIRDNESS],[ AC_MSG_CHECKING([whether -fPIC is required]) if test -n "$EXT_SHARED"; then os=`uname -sr 2>/dev/null` case $os in "SunOS 5.6"|"SunOS 5.7"[)] case $CC in gcc*|egcs*) CFLAGS="$CFLAGS -fPIC";; *[)] CFLAGS="$CFLAGS -fpic";; esac AC_MSG_RESULT([yes]);; *[)] AC_MSG_RESULT([no]);; esac else AC_MSG_RESULT([no]) fi ]) dnl dnl PHP_SYS_LFS dnl dnl The problem is that the default compilation flags in Solaris 2.6 won't dnl let programs access large files; you need to tell the compiler that dnl you actually want your programs to work on large files. For more dnl details about this brain damage please see: dnl http://www.sas.com/standards/large.file/x_open.20Mar96.html dnl dnl Written by Paul Eggert . dnl AC_DEFUN([PHP_SYS_LFS], [dnl # If available, prefer support for large files unless the user specified # one of the CPPFLAGS, LDFLAGS, or LIBS variables. AC_MSG_CHECKING([whether large file support needs explicit enabling]) ac_getconfs='' ac_result=yes ac_set='' ac_shellvars='CPPFLAGS LDFLAGS LIBS' for ac_shellvar in $ac_shellvars; do case $ac_shellvar in CPPFLAGS[)] ac_lfsvar=LFS_CFLAGS ;; *[)] ac_lfsvar=LFS_$ac_shellvar ;; esac eval test '"${'$ac_shellvar'+set}"' = set && ac_set=$ac_shellvar (getconf $ac_lfsvar) >/dev/null 2>&1 || { ac_result=no; break; } ac_getconf=`getconf $ac_lfsvar` ac_getconfs=$ac_getconfs$ac_getconf eval ac_test_$ac_shellvar=\$ac_getconf done case "$ac_result$ac_getconfs" in yes[)] ac_result=no ;; esac case "$ac_result$ac_set" in yes?*[)] ac_result="yes, but $ac_set is already set, so use its settings" esac AC_MSG_RESULT([$ac_result]) case $ac_result in yes[)] for ac_shellvar in $ac_shellvars; do eval $ac_shellvar=\$ac_test_$ac_shellvar done ;; esac ]) dnl dnl PHP_SOCKADDR_CHECKS dnl AC_DEFUN([PHP_SOCKADDR_CHECKS], [ dnl Check for struct sockaddr_storage exists AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_sockaddr_storage, [AC_TRY_COMPILE([#include #include ], [struct sockaddr_storage s; s], [ac_cv_sockaddr_storage=yes], [ac_cv_sockaddr_storage=no]) ]) if test "$ac_cv_sockaddr_storage" = "yes"; then AC_DEFINE(HAVE_SOCKADDR_STORAGE, 1, [Whether you have struct sockaddr_storage]) fi dnl Check if field sa_len exists in struct sockaddr AC_CACHE_CHECK([for field sa_len in struct sockaddr],ac_cv_sockaddr_sa_len,[ AC_TRY_COMPILE([#include #include ], [static struct sockaddr sa; int n = (int) sa.sa_len; return n;], [ac_cv_sockaddr_sa_len=yes], [ac_cv_sockaddr_sa_len=no]) ]) if test "$ac_cv_sockaddr_sa_len" = "yes"; then AC_DEFINE(HAVE_SOCKADDR_SA_LEN, 1, [Whether struct sockaddr has field sa_len]) fi ]) dnl dnl PHP_DECLARED_TIMEZONE dnl AC_DEFUN([PHP_DECLARED_TIMEZONE],[ AC_CACHE_CHECK(for declared timezone, ac_cv_declared_timezone,[ AC_TRY_COMPILE([ #include #include #ifdef HAVE_SYS_TIME_H #include #endif ],[ time_t foo = (time_t) timezone; ],[ ac_cv_declared_timezone=yes ],[ ac_cv_declared_timezone=no ])]) if test "$ac_cv_declared_timezone" = "yes"; then AC_DEFINE(HAVE_DECLARED_TIMEZONE, 1, [Whether system headers declare timezone]) fi ]) dnl dnl PHP_EBCDIC dnl AC_DEFUN([PHP_EBCDIC], [ AC_CACHE_CHECK([whether system uses EBCDIC],ac_cv_ebcdic,[ AC_TRY_RUN( [ int main(void) { return (unsigned char)'A' != (unsigned char)0xC1; } ],[ ac_cv_ebcdic=yes ],[ ac_cv_ebcdic=no ],[ ac_cv_ebcdic=no ])]) if test "$ac_cv_ebcdic" = "yes"; then AC_DEFINE(CHARSET_EBCDIC,1, [Define if system uses EBCDIC]) fi ]) dnl dnl PHP_BROKEN_GETCWD dnl dnl Some systems, notably Solaris, cause getcwd() or realpath to fail if a dnl component of the path has execute but not read permissions dnl AC_DEFUN([PHP_BROKEN_GETCWD],[ AC_MSG_CHECKING([for broken getcwd]) os=`uname -sr 2>/dev/null` case $os in SunOS*[)] AC_DEFINE(HAVE_BROKEN_GETCWD,1, [Define if system has broken getcwd]) AC_MSG_RESULT([yes]);; *[)] AC_MSG_RESULT([no]);; esac ]) dnl dnl PHP_BROKEN_GLIBC_FOPEN_APPEND dnl AC_DEFUN([PHP_BROKEN_GLIBC_FOPEN_APPEND], [ AC_MSG_CHECKING([for broken libc stdio]) AC_CACHE_VAL(_cv_have_broken_glibc_fopen_append,[ AC_TRY_RUN([ #include int main(int argc, char *argv[]) { FILE *fp; long position; char *filename = tmpnam(NULL); fp = fopen(filename, "w"); if (fp == NULL) { perror("fopen"); exit(2); } fputs("foobar", fp); fclose(fp); fp = fopen(filename, "a+"); position = ftell(fp); fclose(fp); unlink(filename); if (position == 0) return 1; return 0; } ], [_cv_have_broken_glibc_fopen_append=no], [_cv_have_broken_glibc_fopen_append=yes ], AC_TRY_COMPILE([ #include ],[ #if !__GLIBC_PREREQ(2,2) choke me #endif ], [_cv_have_broken_glibc_fopen_append=yes], [_cv_have_broken_glibc_fopen_append=no ]) )]) if test "$_cv_have_broken_glibc_fopen_append" = "yes"; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_BROKEN_GLIBC_FOPEN_APPEND,1, [Define if your glibc borks on fopen with mode a+]) else AC_MSG_RESULT(no) fi ]) dnl dnl PHP_FOPENCOOKIE dnl AC_DEFUN([PHP_FOPENCOOKIE], [ AC_CHECK_FUNC(fopencookie, [have_glibc_fopencookie=yes]) if test "$have_glibc_fopencookie" = "yes"; then dnl this comes in two flavors: dnl newer glibcs (since 2.1.2 ? ) dnl have a type called cookie_io_functions_t AC_TRY_COMPILE([ #define _GNU_SOURCE #include ], [cookie_io_functions_t cookie;], [have_cookie_io_functions_t=yes], []) if test "$have_cookie_io_functions_t" = "yes"; then cookie_io_functions_t=cookie_io_functions_t have_fopen_cookie=yes dnl even newer glibcs have a different seeker definition... AC_TRY_RUN([ #define _GNU_SOURCE #include struct cookiedata { __off64_t pos; }; __ssize_t reader(void *cookie, char *buffer, size_t size) { return size; } __ssize_t writer(void *cookie, const char *buffer, size_t size) { return size; } int closer(void *cookie) { return 0; } int seeker(void *cookie, __off64_t *position, int whence) { ((struct cookiedata*)cookie)->pos = *position; return 0; } cookie_io_functions_t funcs = {reader, writer, seeker, closer}; main() { struct cookiedata g = { 0 }; FILE *fp = fopencookie(&g, "r", funcs); if (fp && fseek(fp, 8192, SEEK_SET) == 0 && g.pos == 8192) exit(0); exit(1); } ], [ cookie_io_functions_use_off64_t=yes ], [ cookie_io_functions_use_off64_t=no ], [ cookie_io_functions_use_off64_t=no ]) else dnl older glibc versions (up to 2.1.2 ?) dnl call it _IO_cookie_io_functions_t AC_TRY_COMPILE([ #define _GNU_SOURCE #include ], [ _IO_cookie_io_functions_t cookie; ], [have_IO_cookie_io_functions_t=yes], []) if test "$have_cookie_io_functions_t" = "yes" ; then cookie_io_functions_t=_IO_cookie_io_functions_t have_fopen_cookie=yes fi fi if test "$have_fopen_cookie" = "yes" ; then AC_DEFINE(HAVE_FOPENCOOKIE, 1, [ ]) AC_DEFINE_UNQUOTED(COOKIE_IO_FUNCTIONS_T, $cookie_io_functions_t, [ ]) if test "$cookie_io_functions_use_off64_t" = "yes" ; then AC_DEFINE(COOKIE_SEEKER_USES_OFF64_T, 1, [ ]) fi fi fi ]) dnl ------------------------------------------------------------------------- dnl Library/function existence and build sanity checks dnl ------------------------------------------------------------------------- dnl dnl PHP_CHECK_LIBRARY(library, function [, action-found [, action-not-found [, extra-libs]]]) dnl dnl Wrapper for AC_CHECK_LIB dnl AC_DEFUN([PHP_CHECK_LIBRARY], [ save_old_LDFLAGS=$LDFLAGS ac_stuff="$5" save_ext_shared=$ext_shared ext_shared=yes PHP_EVAL_LIBLINE([$]ac_stuff, LDFLAGS) AC_CHECK_LIB([$1],[$2],[ LDFLAGS=$save_old_LDFLAGS ext_shared=$save_ext_shared $3 ],[ LDFLAGS=$save_old_LDFLAGS ext_shared=$save_ext_shared unset ac_cv_lib_$1[]_$2 $4 ])dnl ]) dnl dnl PHP_CHECK_FRAMEWORK(framework, function [, action-found [, action-not-found ]]) dnl dnl El cheapo wrapper for AC_CHECK_LIB dnl AC_DEFUN([PHP_CHECK_FRAMEWORK], [ save_old_LDFLAGS=$LDFLAGS LDFLAGS="-framework $1 $LDFLAGS" dnl supplying "c" to AC_CHECK_LIB is technically cheating, but dnl rewriting AC_CHECK_LIB is overkill and this only affects dnl the "checking.." output anyway. AC_CHECK_LIB(c,[$2],[ LDFLAGS=$save_old_LDFLAGS $3 ],[ LDFLAGS=$save_old_LDFLAGS $4 ]) ]) dnl dnl PHP_CHECK_FUNC_LIB(func, libs) dnl dnl This macro checks whether 'func' or '__func' exists dnl in the specified library. dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS. dnl This should be called in the ACTION-IF-NOT-FOUND part of PHP_CHECK_FUNC dnl dnl dnl autoconf undefines the builtin "shift" :-( dnl If possible, we use the builtin shift anyway, otherwise we use dnl the ubercool definition I have tested so far with FreeBSD/GNU m4 ifdef([builtin],[builtin(define, phpshift, [builtin(shift, $@)])],[ define([phpshift],[ifelse(index([$@],[,]),-1,,[substr([$@],incr(index([$@],[,])))])]) ]) dnl AC_DEFUN([PHP_CHECK_FUNC_LIB],[ ifelse($2,,:,[ unset ac_cv_lib_$2[]_$1 unset ac_cv_lib_$2[]___$1 unset found AC_CHECK_LIB($2, $1, [found=yes], [ AC_CHECK_LIB($2, __$1, [found=yes], [found=no]) ]) if test "$found" = "yes"; then ac_libs=$LIBS LIBS="$LIBS -l$2" AC_TRY_RUN([main() { return (0); }],[found=yes],[found=no],[found=no]) LIBS=$ac_libs fi if test "$found" = "yes"; then PHP_ADD_LIBRARY($2) PHP_DEF_HAVE($1) PHP_DEF_HAVE(lib$2) ac_cv_func_$1=yes else PHP_CHECK_FUNC_LIB($1,phpshift(phpshift($@))) fi ]) ]) dnl dnl PHP_CHECK_FUNC(func, ...) dnl dnl This macro checks whether 'func' or '__func' exists dnl in the default libraries and as a fall back in the specified library. dnl Defines HAVE_func and HAVE_library if found and adds the library to LIBS. dnl AC_DEFUN([PHP_CHECK_FUNC],[ unset ac_cv_func_$1 unset ac_cv_func___$1 unset found AC_CHECK_FUNC($1, [found=yes],[ AC_CHECK_FUNC(__$1,[found=yes],[found=no]) ]) case $found in yes[)] PHP_DEF_HAVE($1) ac_cv_func_$1=yes ;; ifelse($#,1,,[ *[)] PHP_CHECK_FUNC_LIB($@) ;; ]) esac ]) dnl dnl PHP_TEST_BUILD(function, action-if-ok, action-if-not-ok [, extra-libs [, extra-source]]) dnl dnl This macro checks whether build works and given function exists. dnl AC_DEFUN([PHP_TEST_BUILD], [ old_LIBS=$LIBS LIBS="$4 $LIBS" AC_TRY_RUN([ $5 char $1(); int main() { $1(); return 0; } ], [ LIBS=$old_LIBS $2 ],[ LIBS=$old_LIBS $3 ],[ LIBS=$old_LIBS ]) ]) dnl ------------------------------------------------------------------------- dnl Platform characteristics checks dnl ------------------------------------------------------------------------- dnl dnl PHP_SHLIB_SUFFIX_NAMES dnl dnl Determines link library suffix SHLIB_SUFFIX_NAME dnl which can be: .so, .sl or .dylib dnl dnl Determines shared library suffix SHLIB_DL_SUFFIX_NAME dnl suffix can be: .so or .sl dnl AC_DEFUN([PHP_SHLIB_SUFFIX_NAMES],[ AC_REQUIRE([PHP_CANONICAL_HOST_TARGET])dnl PHP_SUBST_OLD(SHLIB_SUFFIX_NAME) PHP_SUBST_OLD(SHLIB_DL_SUFFIX_NAME) SHLIB_SUFFIX_NAME=so SHLIB_DL_SUFFIX_NAME=$SHLIB_SUFFIX_NAME case $host_alias in *hpux*[)] SHLIB_SUFFIX_NAME=sl SHLIB_DL_SUFFIX_NAME=sl ;; *darwin*[)] SHLIB_SUFFIX_NAME=dylib SHLIB_DL_SUFFIX_NAME=so ;; esac ]) dnl dnl PHP_CHECK_64BIT([do if 32], [do if 64]) dnl dnl This macro is used to detect if we're at 64-bit platform or not. dnl It could be useful for those external libs, that have different precompiled dnl versions in different directories. dnl AC_DEFUN([PHP_CHECK_64BIT],[ AC_CHECK_SIZEOF(long int, 4) AC_MSG_CHECKING([checking if we're at 64-bit platform]) if test "$ac_cv_sizeof_long_int" = "4" ; then AC_MSG_RESULT([no]) $1 else AC_MSG_RESULT([yes]) $2 fi ]) dnl dnl PHP_C_BIGENDIAN dnl dnl Replacement macro for AC_C_BIGENDIAN dnl AC_DEFUN([PHP_C_BIGENDIAN], [AC_CACHE_CHECK([whether byte ordering is bigendian], ac_cv_c_bigendian_php, [ ac_cv_c_bigendian_php=unknown AC_TRY_RUN( [ int main(void) { short one = 1; char *cp = (char *)&one; if (*cp == 0) { return(0); } else { return(1); } } ], [ac_cv_c_bigendian_php=yes], [ac_cv_c_bigendian_php=no], [ac_cv_c_bigendian_php=unknown]) ]) if test $ac_cv_c_bigendian_php = yes; then AC_DEFINE(WORDS_BIGENDIAN, [], [Define if processor uses big-endian word]) fi ]) dnl ------------------------------------------------------------------------- dnl Checks for programs: PHP_PROG_ dnl ------------------------------------------------------------------------- dnl dnl PHP_PROG_SENDMAIL dnl dnl Search for the sendmail binary dnl AC_DEFUN([PHP_PROG_SENDMAIL], [ PHP_ALT_PATH=/usr/bin:/usr/sbin:/usr/etc:/etc:/usr/ucblib:/usr/lib AC_PATH_PROG(PROG_SENDMAIL, sendmail,[], $PATH:$PHP_ALT_PATH) PHP_SUBST(PROG_SENDMAIL) ]) dnl dnl PHP_PROG_AWK dnl dnl Some vendors force mawk before gawk; mawk is broken so we don't like that dnl AC_DEFUN([PHP_PROG_AWK], [ AC_CHECK_PROGS(AWK, gawk nawk awk mawk, bork, /usr/xpg4/bin/:$PATH) case "$AWK" in *mawk) AC_MSG_WARN([mawk is known to have problems on some systems. You should install GNU awk]) ;; *gawk) ;; bork) AC_MSG_ERROR([Could not find awk; Install GNU awk]) ;; *) AC_MSG_CHECKING([if $AWK is broken]) if ! $AWK 'function foo() {}' >/dev/null 2>&1 ; then AC_MSG_RESULT([yes]) AC_MSG_ERROR([You should install GNU awk]) else AC_MSG_RESULT([no]) fi ;; esac PHP_SUBST(AWK) ]) dnl dnl PHP_PROG_BISON dnl dnl Search for bison and check it's version dnl AC_DEFUN([PHP_PROG_BISON], [ AC_PROG_YACC LIBZEND_BISON_CHECK PHP_SUBST(YACC) ]) dnl dnl PHP_PROG_LEX dnl dnl Search for (f)lex and check it's version dnl AC_DEFUN([PHP_PROG_LEX], [ dnl we only support certain flex versions flex_version_list="2.5.4" AC_PROG_LEX if test "$LEX" = "flex"; then dnl AC_DECL_YYTEXT is obsolete since autoconf 2.50 and merged into AC_PROG_LEX dnl this is what causes that annoying "PHP_PROG_LEX is expanded from" warning with autoconf 2.50+ dnl it should be removed once we drop support of autoconf 2.13 (if ever) AC_DECL_YYTEXT : fi dnl ## Make flex scanners use const if they can, even if __STDC__ is not dnl ## true, for compilers like Sun's that only set __STDC__ true in dnl ## "limit-to-ANSI-standard" mode, not in "ANSI-compatible" mode AC_C_CONST if test "$ac_cv_c_const" = "yes" ; then LEX_CFLAGS="-DYY_USE_CONST" fi if test "$LEX" = "flex"; then AC_CACHE_CHECK([for flex version], php_cv_flex_version, [ flex_version=`$LEX -V -v --version 2>/dev/null | $SED -e 's/^.* //'` php_cv_flex_version=invalid for flex_check_version in $flex_version_list; do if test "$flex_version" = "$flex_check_version"; then php_cv_flex_version="$flex_check_version (ok)" fi done ]) else flex_version=none fi case $php_cv_flex_version in ""|invalid[)] if test -f "$abs_srcdir/Zend/zend_language_scanner.c" && test -f "$abs_srcdir/Zend/zend_ini_scanner.c"; then AC_MSG_WARN([flex versions supported for regeneration of the Zend/PHP parsers: $flex_version_list (found: $flex_version)]) else flex_msg="Supported flex versions are: $flex_version_list" if test "$flex_version" = "none"; then flex_msg="flex not found. flex is required to generate the Zend/PHP parsers! $flex_msg" else flex_msg="Found invalid flex version: $flex_version. $flex_msg" fi AC_MSG_ERROR([$flex_msg]) fi LEX="exit 0;" ;; esac PHP_SUBST(LEX) ]) dnl dnl PHP_PROG_RE2C dnl dnl Search for the re2c binary and check the version dnl AC_DEFUN([PHP_PROG_RE2C],[ AC_CHECK_PROG(RE2C, re2c, re2c) if test -n "$RE2C"; then AC_CACHE_CHECK([for re2c version], php_cv_re2c_version, [ re2c_vernum=`$RE2C --vernum 2>/dev/null` if test -z "$re2c_vernum" || test "$re2c_vernum" -lt "1304"; then php_cv_re2c_version=invalid else php_cv_re2c_version="`$RE2C --version | cut -d ' ' -f 2 2>/dev/null` (ok)" fi ]) fi case $php_cv_re2c_version in ""|invalid[)] AC_MSG_WARN([You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.]) RE2C="exit 0;" ;; esac PHP_SUBST(RE2C) ]) dnl ------------------------------------------------------------------------- dnl Common setup macros: PHP_SETUP_ dnl ------------------------------------------------------------------------- dnl dnl PHP_SETUP_ICU([shared-add]) dnl dnl Common setup macro for ICU dnl AC_DEFUN([PHP_SETUP_ICU],[ PHP_ARG_WITH(icu-dir,, [ --with-icu-dir=DIR Specify where ICU libraries and headers can be found], DEFAULT, no) if test "$PHP_ICU_DIR" = "no"; then PHP_ICU_DIR=DEFAULT fi AC_MSG_CHECKING([for location of ICU headers and libraries]) found_icu=no dnl First try to find pkg-config if test -z "$PKG_CONFIG"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi dnl If pkg-config is found try using it if test "$PHP_ICU_DIR" = "DEFAULT" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists icu-uc icu-io icu-i18n; then if $PKG_CONFIG --atleast-version=4.0 icu-uc; then found_icu=yes icu_version_full=`$PKG_CONFIG --modversion icu-uc` ac_IFS=$IFS IFS="." set $icu_version_full IFS=$ac_IFS icu_version=`expr [$]1 \* 1000 + [$]2` AC_MSG_RESULT([found $icu_version_full]) ICU_LIBS=`$PKG_CONFIG --libs icu-uc icu-io icu-i18n` ICU_INCS=`$PKG_CONFIG --cflags-only-I icu-uc icu-io icu-i18n` ICU_CXXFLAGS=`$PKG_CONFIG --variable=CXXFLAGS icu-uc` ICU_CXXFLAGS="$ICU_CXXFLAGS -DU_USING_ICU_NAMESPACE=1" AC_MSG_RESULT([found $ICU_VERSION]) PHP_EVAL_LIBLINE($ICU_LIBS, $1) PHP_EVAL_INCLINE($ICU_INCS) else AC_MSG_ERROR([ICU version 4.0 or later required.]) fi fi dnl If pkg-config fails for some reason, revert to the old method if test "$found_icu" = "no"; then if test "$PHP_ICU_DIR" = "DEFAULT"; then dnl Try to find icu-config AC_PATH_PROG(ICU_CONFIG, icu-config, no, [$PATH:/usr/local/bin]) else ICU_CONFIG="$PHP_ICU_DIR/bin/icu-config" fi dnl Trust icu-config to know better what the install prefix is.. icu_install_prefix=`$ICU_CONFIG --prefix 2> /dev/null` if test "$?" != "0" || test -z "$icu_install_prefix"; then AC_MSG_RESULT([not found]) AC_MSG_ERROR([Unable to detect ICU prefix or $ICU_CONFIG failed. Please verify ICU install prefix and make sure icu-config works.]) else AC_MSG_RESULT([$icu_install_prefix]) dnl Check ICU version AC_MSG_CHECKING([for ICU 4.0 or greater]) icu_version_full=`$ICU_CONFIG --version` ac_IFS=$IFS IFS="." set $icu_version_full IFS=$ac_IFS icu_version=`expr [$]1 \* 1000 + [$]2` AC_MSG_RESULT([found $icu_version_full]) if test "$icu_version" -lt "4000"; then AC_MSG_ERROR([ICU version 4.0 or later is required]) fi ICU_VERSION=$icu_version ICU_INCS=`$ICU_CONFIG --cppflags-searchpath` ICU_LIBS=`$ICU_CONFIG --ldflags --ldflags-icuio` PHP_EVAL_INCLINE($ICU_INCS) PHP_EVAL_LIBLINE($ICU_LIBS, $1) ICU_CXXFLAGS=`$ICU_CONFIG --cxxflags` ICU_CXXFLAGS="$ICU_CXXFLAGS -DU_USING_ICU_NAMESPACE=1" fi fi ]) dnl dnl PHP_SETUP_KERBEROS(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for kerberos dnl AC_DEFUN([PHP_SETUP_KERBEROS],[ found_kerberos=no unset KERBEROS_CFLAGS unset KERBEROS_LIBS dnl First try to find krb5-config if test -z "$KRB5_CONFIG"; then AC_PATH_PROG(KRB5_CONFIG, krb5-config, no, [$PATH:/usr/kerberos/bin:/usr/local/bin]) fi dnl If krb5-config is found try using it if test "$PHP_KERBEROS" != "no" && test -x "$KRB5_CONFIG"; then KERBEROS_LIBS=`$KRB5_CONFIG --libs gssapi` KERBEROS_CFLAGS=`$KRB5_CONFIG --cflags gssapi` if test -n "$KERBEROS_LIBS"; then found_kerberos=yes PHP_EVAL_LIBLINE($KERBEROS_LIBS, $1) PHP_EVAL_INCLINE($KERBEROS_CFLAGS) fi fi dnl If still not found use old skool method if test "$found_kerberos" = "no"; then if test "$PHP_KERBEROS" = "yes"; then PHP_KERBEROS="/usr/kerberos /usr/local /usr" fi for i in $PHP_KERBEROS; do if test -f $i/$PHP_LIBDIR/libkrb5.a || test -f $i/$PHP_LIBDIR/libkrb5.$SHLIB_SUFFIX_NAME; then PHP_KERBEROS_DIR=$i break fi done if test "$PHP_KERBEROS_DIR"; then found_kerberos=yes PHP_ADD_LIBPATH($PHP_KERBEROS_DIR/$PHP_LIBDIR, $1) PHP_ADD_LIBRARY(gssapi_krb5, 1, $1) PHP_ADD_LIBRARY(krb5, 1, $1) PHP_ADD_LIBRARY(k5crypto, 1, $1) PHP_ADD_LIBRARY(com_err, 1, $1) PHP_ADD_INCLUDE($PHP_KERBEROS_DIR/include) fi fi if test "$found_kerberos" = "yes"; then ifelse([$2],[],:,[$2]) ifelse([$3],[],,[else $3]) fi ]) dnl dnl PHP_SETUP_OPENSSL(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for openssl dnl AC_DEFUN([PHP_SETUP_OPENSSL],[ found_openssl=no unset OPENSSL_INCDIR unset OPENSSL_LIBDIR dnl Empty variable means 'no' test -z "$PHP_OPENSSL" && PHP_OPENSSL=no test -z "$PHP_IMAP_SSL" && PHP_IMAP_SSL=no dnl Fallbacks for different configure options if test "$PHP_OPENSSL" != "no"; then PHP_OPENSSL_DIR=$PHP_OPENSSL elif test "$PHP_IMAP_SSL" != "no"; then PHP_OPENSSL_DIR=$PHP_IMAP_SSL fi dnl First try to find pkg-config if test -z "$PKG_CONFIG"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi dnl If pkg-config is found try using it if test "$PHP_OPENSSL_DIR" = "yes" && test -x "$PKG_CONFIG" && $PKG_CONFIG --exists openssl; then if $PKG_CONFIG --atleast-version=1.0.1 openssl; then found_openssl=yes OPENSSL_LIBS=`$PKG_CONFIG --libs openssl` OPENSSL_INCS=`$PKG_CONFIG --cflags-only-I openssl` OPENSSL_INCDIR=`$PKG_CONFIG --variable=includedir openssl` else AC_MSG_ERROR([OpenSSL version 1.0.1 or greater required.]) fi if test -n "$OPENSSL_LIBS"; then PHP_EVAL_LIBLINE($OPENSSL_LIBS, $1) fi if test -n "$OPENSSL_INCS"; then PHP_EVAL_INCLINE($OPENSSL_INCS) fi fi dnl If pkg-config fails for some reason, revert to the old method if test "$found_openssl" = "no"; then if test "$PHP_OPENSSL_DIR" = "yes"; then PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl" fi for i in $PHP_OPENSSL_DIR; do if test -r $i/include/openssl/evp.h; then OPENSSL_INCDIR=$i/include fi if test -r $i/$PHP_LIBDIR/libssl.a -o -r $i/$PHP_LIBDIR/libssl.$SHLIB_SUFFIX_NAME; then OPENSSL_LIBDIR=$i/$PHP_LIBDIR fi test -n "$OPENSSL_INCDIR" && test -n "$OPENSSL_LIBDIR" && break done if test -z "$OPENSSL_INCDIR"; then AC_MSG_ERROR([Cannot find OpenSSL's ]) fi if test -z "$OPENSSL_LIBDIR"; then AC_MSG_ERROR([Cannot find OpenSSL's libraries]) fi old_CPPFLAGS=$CPPFLAGS CPPFLAGS=-I$OPENSSL_INCDIR AC_MSG_CHECKING([for OpenSSL version]) AC_EGREP_CPP(yes,[ #include #if OPENSSL_VERSION_NUMBER >= 0x10001001L yes #endif ],[ AC_MSG_RESULT([>= 1.0.1]) ],[ AC_MSG_ERROR([OpenSSL version 1.0.1 or greater required.]) ]) CPPFLAGS=$old_CPPFLAGS PHP_ADD_INCLUDE($OPENSSL_INCDIR) PHP_CHECK_LIBRARY(crypto, CRYPTO_free, [ PHP_ADD_LIBRARY(crypto,,$1) ],[ AC_MSG_ERROR([libcrypto not found!]) ],[ -L$OPENSSL_LIBDIR ]) old_LIBS=$LIBS LIBS="$LIBS -lcrypto" PHP_CHECK_LIBRARY(ssl, SSL_CTX_set_ssl_version, [ found_openssl=yes ],[ AC_MSG_ERROR([libssl not found!]) ],[ -L$OPENSSL_LIBDIR ]) LIBS=$old_LIBS PHP_ADD_LIBRARY(ssl,,$1) PHP_ADD_LIBRARY(crypto,,$1) PHP_ADD_LIBPATH($OPENSSL_LIBDIR, $1) fi if test "$found_openssl" = "yes"; then dnl For apache 1.3.x static build OPENSSL_INCDIR_OPT=-I$OPENSSL_INCDIR AC_SUBST(OPENSSL_INCDIR_OPT) ifelse([$2],[],:,[$2]) ifelse([$3],[],,[else $3]) fi ]) dnl dnl PHP_SETUP_ICONV(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for iconv dnl AC_DEFUN([PHP_SETUP_ICONV], [ found_iconv=no unset ICONV_DIR # Create the directories for a VPATH build: $php_shtool mkdir -p ext/iconv echo > ext/iconv/php_have_bsd_iconv.h echo > ext/iconv/php_have_ibm_iconv.h echo > ext/iconv/php_have_glibc_iconv.h echo > ext/iconv/php_have_libiconv.h echo > ext/iconv/php_have_iconv.h echo > ext/iconv/php_php_iconv_impl.h echo > ext/iconv/php_iconv_aliased_libiconv.h echo > ext/iconv/php_php_iconv_h_path.h echo > ext/iconv/php_iconv_supports_errno.h dnl dnl Check libc first if no path is provided in --with-iconv dnl if test "$PHP_ICONV" = "yes"; then dnl Reset LIBS temporarily as it may have already been included dnl -liconv in. LIBS_save="$LIBS" LIBS= AC_CHECK_FUNC(iconv, [ found_iconv=yes ],[ AC_CHECK_FUNC(libiconv,[ PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv]) AC_DEFINE(HAVE_LIBICONV, 1, [ ]) found_iconv=yes ]) ]) LIBS="$LIBS_save" fi dnl dnl Check external libs for iconv funcs dnl if test "$found_iconv" = "no"; then for i in $PHP_ICONV /usr/local /usr; do if test -r $i/include/giconv.h; then AC_DEFINE(HAVE_GICONV_H, 1, [ ]) ICONV_DIR=$i iconv_lib_name=giconv break elif test -r $i/include/iconv.h; then ICONV_DIR=$i iconv_lib_name=iconv break fi done if test -z "$ICONV_DIR"; then AC_MSG_ERROR([Please specify the install prefix of iconv with --with-iconv=]) fi if test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.a || test -f $ICONV_DIR/$PHP_LIBDIR/lib$iconv_lib_name.$SHLIB_SUFFIX_NAME then PHP_CHECK_LIBRARY($iconv_lib_name, libiconv, [ found_iconv=yes PHP_DEFINE(HAVE_LIBICONV,1,[ext/iconv]) AC_DEFINE(HAVE_LIBICONV,1,[ ]) PHP_DEFINE([ICONV_ALIASED_LIBICONV],1,[ext/iconv]) AC_DEFINE([ICONV_ALIASED_LIBICONV],1,[iconv() is aliased to libiconv() in -liconv]) ], [ PHP_CHECK_LIBRARY($iconv_lib_name, iconv, [ found_iconv=yes ], [], [ -L$ICONV_DIR/$PHP_LIBDIR ]) ], [ -L$ICONV_DIR/$PHP_LIBDIR ]) fi fi if test "$found_iconv" = "yes"; then PHP_DEFINE(HAVE_ICONV,1,[ext/iconv]) AC_DEFINE(HAVE_ICONV,1,[ ]) if test -n "$ICONV_DIR"; then PHP_ADD_LIBRARY_WITH_PATH($iconv_lib_name, $ICONV_DIR/$PHP_LIBDIR, $1) PHP_ADD_INCLUDE($ICONV_DIR/include) fi $2 ifelse([$3],[],,[else $3]) fi ]) dnl dnl PHP_SETUP_LIBXML(shared-add [, action-found [, action-not-found]]) dnl dnl Common setup macro for libxml dnl AC_DEFUN([PHP_SETUP_LIBXML], [ found_libxml=no dnl First try to find xml2-config AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path, [ for i in $PHP_LIBXML_DIR /usr/local /usr; do if test -x "$i/bin/xml2-config"; then ac_cv_php_xml2_config_path="$i/bin/xml2-config" break fi done ]) if test -x "$ac_cv_php_xml2_config_path"; then XML2_CONFIG="$ac_cv_php_xml2_config_path" libxml_full_version=`$XML2_CONFIG --version` ac_IFS=$IFS IFS="." set $libxml_full_version IFS=$ac_IFS LIBXML_VERSION=`expr [$]1 \* 1000000 + [$]2 \* 1000 + [$]3` if test "$LIBXML_VERSION" -ge "2006011"; then found_libxml=yes LIBXML_LIBS=`$XML2_CONFIG --libs` LIBXML_INCS=`$XML2_CONFIG --cflags` else AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.]) fi fi dnl If xml2-config fails, try pkg-config if test "$found_libxml" = "no"; then if test -z "$PKG_CONFIG"; then AC_PATH_PROG(PKG_CONFIG, pkg-config, no) fi dnl If pkg-config is found try using it if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists libxml-2.0; then if $PKG_CONFIG --atleast-version=2.6.11 libxml-2.0; then found_libxml=yes LIBXML_LIBS=`$PKG_CONFIG --libs libxml-2.0` LIBXML_INCS=`$PKG_CONFIG --cflags-only-I libxml-2.0` else AC_MSG_ERROR([libxml2 version 2.6.11 or greater required.]) fi fi fi if test "$found_libxml" = "yes"; then PHP_EVAL_LIBLINE($LIBXML_LIBS, $1) PHP_EVAL_INCLINE($LIBXML_INCS) dnl Check that build works with given libs AC_CACHE_CHECK(whether libxml build works, php_cv_libxml_build_works, [ PHP_TEST_BUILD(xmlInitParser, [ php_cv_libxml_build_works=yes ], [ AC_MSG_RESULT(no) AC_MSG_ERROR([build test failed. Please check the config.log for details.]) ], [ [$]$1 ]) ]) if test "$php_cv_libxml_build_works" = "yes"; then AC_DEFINE(HAVE_LIBXML, 1, [ ]) fi $2 ifelse([$3],[],,[else $3]) fi ]) dnl ------------------------------------------------------------------------- dnl Misc. macros dnl ------------------------------------------------------------------------- dnl dnl PHP_INSTALL_HEADERS(path [, file ...]) dnl dnl PHP header files to be installed dnl AC_DEFUN([PHP_INSTALL_HEADERS],[ ifelse([$2],[],[ for header_file in $1; do PHP_RUN_ONCE(INSTALLHEADERS, $header_file, [ INSTALL_HEADERS="$INSTALL_HEADERS $header_file" ]) done ], [ header_path=$1 for header_file in $2; do hp_hf="$header_path/$header_file" PHP_RUN_ONCE(INSTALLHEADERS, $hp_hf, [ INSTALL_HEADERS="$INSTALL_HEADERS $hp_hf" ]) done ]) ]) dnl dnl PHP_AP_EXTRACT_VERSION(/path/httpd) dnl dnl This macro is used to get a comparable dnl version for apache1/2. dnl AC_DEFUN([PHP_AP_EXTRACT_VERSION],[ ac_output=`$1 -v 2>&1 | grep version | $SED -e 's/Oracle-HTTP-//'` ac_IFS=$IFS IFS="- /. " set $ac_output IFS=$ac_IFS APACHE_VERSION=`expr [$]4 \* 1000000 + [$]5 \* 1000 + [$]6` ]) dnl dnl PHP_DEBUG_MACRO(filename) dnl AC_DEFUN([PHP_DEBUG_MACRO],[ DEBUG_LOG=$1 cat >$1 <conftest.$ac_ext <>$1 2>&1 rm -fr conftest* ]) dnl dnl PHP_CONFIG_NICE(filename) dnl dnl Generates the config.nice file dnl AC_DEFUN([PHP_CONFIG_NICE],[ AC_REQUIRE([AC_PROG_EGREP]) AC_REQUIRE([LT_AC_PROG_SED]) PHP_SUBST_OLD(EGREP) PHP_SUBST_OLD(SED) test -f $1 && mv $1 $1.old rm -f $1.old cat >$1<> $1 if test `expr "X$ac_configure_args" : ".*${var}.*"` != 0; then clean_configure_args=$(echo $clean_configure_args | sed -e "s#'$var=$val'##") fi fi done echo "'[$]0' \\" >> $1 if test `expr " [$]0" : " '.*"` = 0; then CONFIGURE_COMMAND="$CONFIGURE_COMMAND '[$]0'" else CONFIGURE_COMMAND="$CONFIGURE_COMMAND [$]0" fi CONFIGURE_ARGS="$clean_configure_args" while test "X$CONFIGURE_ARGS" != "X"; do if CURRENT_ARG=`expr "X$CONFIGURE_ARGS" : "X *\('[[^']]*'\)"` then CONFIGURE_ARGS=`expr "X$CONFIGURE_ARGS" : "X *'[[^']]*' \(.*\)"` elif CURRENT_ARG=`expr "X$CONFIGURE_ARGS" : "X *\([[^ ]]*\)"` then CONFIGURE_ARGS=`expr "X$CONFIGURE_ARGS" : "X *[[^ ]]* \(.*\)"` CURRENT_ARG="'$CURRENT_ARG'" else break fi $as_echo "$CURRENT_ARG \\" >>$1 CONFIGURE_OPTIONS="$CONFIGURE_OPTIONS $CURRENT_ARG" done echo '"[$]@"' >> $1 chmod +x $1 CONFIGURE_COMMAND="$CONFIGURE_COMMAND $CONFIGURE_OPTIONS" PHP_SUBST_OLD(CONFIGURE_COMMAND) PHP_SUBST_OLD(CONFIGURE_OPTIONS) ]) dnl dnl PHP_CHECK_CONFIGURE_OPTIONS dnl AC_DEFUN([PHP_CHECK_CONFIGURE_OPTIONS],[ for arg in $ac_configure_args; do case $arg in --with-*[)] arg_name="`echo [$]arg | $SED -e 's/--with-/with-/g' -e 's/=.*//g'`" ;; --without-*[)] arg_name="`echo [$]arg | $SED -e 's/--without-/with-/g' -e 's/=.*//g'`" ;; --enable-*[)] arg_name="`echo [$]arg | $SED -e 's/--enable-/enable-/g' -e 's/=.*//g'`" ;; --disable-*[)] arg_name="`echo [$]arg | $SED -e 's/--disable-/enable-/g' -e 's/=.*//g'`" ;; *[)] continue ;; esac case $arg_name in # Allow --disable-all / --enable-all enable-all[)];; # Allow certain libtool options enable-libtool-lock | with-pic | with-tags | enable-shared | enable-static | enable-fast-install | with-gnu-ld[)];; # Allow certain TSRM options with-tsrm-pth | with-tsrm-st | with-tsrm-pthreads [)];; # Allow certain Zend options with-zend-vm | enable-maintainer-zts | enable-inline-optimization[)];; # All the rest must be set using the PHP_ARG_* macros # PHP_ARG_* macros set php_enable_ or php_with_ *[)] # Options that exist before PHP 6 if test "$PHP_MAJOR_VERSION" -lt "6"; then case $arg_name in enable-zend-multibyte[)] continue;; esac fi is_arg_set=php_[]`echo [$]arg_name | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ-' 'abcdefghijklmnopqrstuvwxyz_'` if eval test "x\$$is_arg_set" = "x"; then PHP_UNKNOWN_CONFIGURE_OPTIONS="$PHP_UNKNOWN_CONFIGURE_OPTIONS [$]arg" fi ;; esac done ]) dnl dnl PHP_CHECK_PDO_INCLUDES([found [, not-found]]) dnl AC_DEFUN([PHP_CHECK_PDO_INCLUDES],[ AC_CACHE_CHECK([for PDO includes], pdo_cv_inc_path, [ AC_MSG_CHECKING([for PDO includes]) if test -f $abs_srcdir/include/php/ext/pdo/php_pdo_driver.h; then pdo_cv_inc_path=$abs_srcdir/ext elif test -f $abs_srcdir/ext/pdo/php_pdo_driver.h; then pdo_cv_inc_path=$abs_srcdir/ext elif test -f $phpincludedir/ext/pdo/php_pdo_driver.h; then pdo_cv_inc_path=$phpincludedir/ext fi ]) if test -n "$pdo_cv_inc_path"; then ifelse([$1],[],:,[$1]) else ifelse([$2],[],[AC_MSG_ERROR([Cannot find php_pdo_driver.h.])],[$2]) fi ]) dnl dnl PHP_DETECT_ICC dnl Detect Intel C++ Compiler and unset $GCC if ICC found AC_DEFUN([PHP_DETECT_ICC], [ ICC="no" AC_MSG_CHECKING([for icc]) AC_EGREP_CPP([^__INTEL_COMPILER], [__INTEL_COMPILER], ICC="no" AC_MSG_RESULT([no]), ICC="yes" GCC="no" AC_MSG_RESULT([yes]) ) ]) dnl PHP_DETECT_SUNCC dnl Detect if the systems default compiler is suncc. dnl We also set some useful CFLAGS if the user didn't set any AC_DEFUN([PHP_DETECT_SUNCC],[ SUNCC="no" AC_MSG_CHECKING([for suncc]) AC_EGREP_CPP([^__SUNPRO_C], [__SUNPRO_C], SUNCC="no" AC_MSG_RESULT([no]), SUNCC="yes" GCC="no" test -n "$auto_cflags" && CFLAGS="-O -xs -xstrconst -zlazyload" GCC="" AC_MSG_RESULT([yes]) ) ]) dnl dnl PHP_CRYPT_R_STYLE dnl detect the style of crypt_r() is any is available dnl see APR_CHECK_CRYPT_R_STYLE() for original version dnl AC_DEFUN([PHP_CRYPT_R_STYLE], [ AC_CACHE_CHECK([which data struct is used by crypt_r], php_cv_crypt_r_style,[ php_cv_crypt_r_style=none AC_TRY_COMPILE([ #define _REENTRANT 1 #include ],[ CRYPTD buffer; crypt_r("passwd", "hash", &buffer); ], php_cv_crypt_r_style=cryptd) if test "$php_cv_crypt_r_style" = "none"; then AC_TRY_COMPILE([ #define _REENTRANT 1 #include ],[ struct crypt_data buffer; crypt_r("passwd", "hash", &buffer); ], php_cv_crypt_r_style=struct_crypt_data) fi if test "$php_cv_crypt_r_style" = "none"; then AC_TRY_COMPILE([ #define _REENTRANT 1 #define _GNU_SOURCE #include ],[ struct crypt_data buffer; crypt_r("passwd", "hash", &buffer); ], php_cv_crypt_r_style=struct_crypt_data_gnu_source) fi ]) if test "$php_cv_crypt_r_style" = "cryptd"; then AC_DEFINE(CRYPT_R_CRYPTD, 1, [Define if crypt_r has uses CRYPTD]) fi if test "$php_cv_crypt_r_style" = "struct_crypt_data" -o "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then AC_DEFINE(CRYPT_R_STRUCT_CRYPT_DATA, 1, [Define if crypt_r uses struct crypt_data]) fi if test "$php_cv_crypt_r_style" = "struct_crypt_data_gnu_source"; then AC_DEFINE(CRYPT_R_GNU_SOURCE, 1, [Define if struct crypt_data requires _GNU_SOURCE]) fi if test "$php_cv_crypt_r_style" = "none"; then AC_MSG_ERROR([Unable to detect data struct used by crypt_r]) fi ]) dnl dnl PHP_TEST_WRITE_STDOUT dnl AC_DEFUN([PHP_TEST_WRITE_STDOUT],[ AC_CACHE_CHECK(whether writing to stdout works,ac_cv_write_stdout,[ AC_TRY_RUN([ #ifdef HAVE_UNISTD_H #include #endif #define TEXT "This is the test message -- " main() { int n; n = write(1, TEXT, sizeof(TEXT)-1); return (!(n == sizeof(TEXT)-1)); } ],[ ac_cv_write_stdout=yes ],[ ac_cv_write_stdout=no ],[ ac_cv_write_stdout=no ]) ]) if test "$ac_cv_write_stdout" = "yes"; then AC_DEFINE(PHP_WRITE_STDOUT, 1, [whether write(2) works]) fi ]) dnl dnl PHP_INIT_DTRACE(providerdesc, header-file, sources [, module]) dnl AC_DEFUN([PHP_INIT_DTRACE],[ dnl Set paths properly when called from extension case "$4" in ""[)] ac_srcdir="$abs_srcdir/"; unset ac_bdir;; /*[)] ac_srcdir=`echo "$4"|cut -c 2-`"/"; ac_bdir=$ac_srcdir;; *[)] ac_srcdir="$abs_srcdir/$1/"; ac_bdir="$4/";; esac dnl providerdesc ac_provsrc=$1 old_IFS=[$]IFS IFS=. set $ac_provsrc ac_provobj=[$]1 IFS=$old_IFS dnl header-file ac_hdrobj=$2 dnl Add providerdesc.o or .lo into global objects when needed case $host_alias in *freebsd*) PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.o" PHP_LDFLAGS="$PHP_LDFLAGS -lelf" ;; *solaris*) PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" ;; *linux*) PHP_GLOBAL_OBJS="[$]PHP_GLOBAL_OBJS [$]ac_bdir[$]ac_provsrc.lo" ;; esac dnl DTrace objects old_IFS=[$]IFS for ac_src in $3; do IFS=. set $ac_src ac_obj=[$]1 IFS=$old_IFS PHP_DTRACE_OBJS="[$]PHP_DTRACE_OBJS [$]ac_bdir[$]ac_obj.lo" done; case [$]php_sapi_module in shared[)] for ac_lo in $PHP_DTRACE_OBJS; do dtrace_objs="[$]dtrace_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`" done; ;; *[)] dtrace_objs='$(PHP_DTRACE_OBJS:.lo=.o)' ;; esac dnl Generate Makefile.objects entries dnl The empty $ac_provsrc command stops an implicit circular dependency dnl in GNU Make which causes the .d file to be overwritten (Bug 61268) cat>>Makefile.objects< \$[]@ \$(PHP_DTRACE_OBJS): $ac_bdir[$]ac_hdrobj EOF case $host_alias in *solaris*|*linux*) dtrace_prov_name="`echo $ac_provsrc | $SED -e 's#\(.*\)\/##'`.o" dtrace_lib_dir="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/[^/]*#\1#'`/.libs" dtrace_d_obj="`echo $ac_bdir[$]ac_provsrc | $SED -e 's#\(.*\)/\([^/]*\)#\1/.libs/\2#'`.o" dtrace_nolib_objs='$(PHP_DTRACE_OBJS:.lo=.o)' for ac_lo in $PHP_DTRACE_OBJS; do dtrace_lib_objs="[$]dtrace_lib_objs `echo $ac_lo | $SED -e 's,\.lo$,.o,' -e 's#\(.*\)\/#\1\/.libs\/#'`" done; dnl Always attempt to create both PIC and non-PIC DTrace objects (Bug 63692) cat>>Makefile.objects< \$[]@ @test -d "$dtrace_lib_dir" || mkdir $dtrace_lib_dir if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $dtrace_d_obj -s $abs_srcdir/$ac_provsrc $dtrace_lib_objs 2> /dev/null && test -f "$dtrace_d_obj"; then [\\] echo "pic_object=['].libs/$dtrace_prov_name[']" >> \$[]@ [;\\] else [\\] echo "pic_object='none'" >> \$[]@ [;\\] fi if CFLAGS="\$(CFLAGS_CLEAN)" dtrace -G -o $ac_bdir[$]ac_provsrc.o -s $abs_srcdir/$ac_provsrc $dtrace_nolib_objs 2> /dev/null && test -f "$ac_bdir[$]ac_provsrc.o"; then [\\] echo "non_pic_object=[']$dtrace_prov_name[']" >> \$[]@ [;\\] else [\\] echo "non_pic_object='none'" >> \$[]@ [;\\] fi EOF ;; *) cat>>Makefile.objects< #endif #if HAVE_SYS_TYPES_H # include #endif ]) AC_DEFINE([PHP_HAVE_STDINT_TYPES], [1], [Checked for stdint types]) ]) dnl PHP_CHECK_BUILTIN_EXPECT AC_DEFUN([PHP_CHECK_BUILTIN_EXPECT], [ AC_MSG_CHECKING([for __builtin_expect]) AC_TRY_LINK(, [ return __builtin_expect(1,1) ? 1 : 0; ], [ have_builtin_expect=1 AC_MSG_RESULT([yes]) ], [ have_builtin_expect=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_EXPECT], [$have_builtin_expect], [Whether the compiler supports __builtin_expect]) ]) dnl PHP_CHECK_BUILTIN_CLZ AC_DEFUN([PHP_CHECK_BUILTIN_CLZ], [ AC_MSG_CHECKING([for __builtin_clz]) AC_TRY_LINK(, [ return __builtin_clz(1) ? 1 : 0; ], [ have_builtin_clz=1 AC_MSG_RESULT([yes]) ], [ have_builtin_clz=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CLZ], [$have_builtin_clz], [Whether the compiler supports __builtin_clz]) ]) dnl PHP_CHECK_BUILTIN_CTZL AC_DEFUN([PHP_CHECK_BUILTIN_CTZL], [ AC_MSG_CHECKING([for __builtin_ctzl]) AC_TRY_LINK(, [ return __builtin_ctzl(2L) ? 1 : 0; ], [ have_builtin_ctzl=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ctzl=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZL], [$have_builtin_ctzl], [Whether the compiler supports __builtin_ctzl]) ]) dnl PHP_CHECK_BUILTIN_CTZLL AC_DEFUN([PHP_CHECK_BUILTIN_CTZLL], [ AC_MSG_CHECKING([for __builtin_ctzll]) AC_TRY_LINK(, [ return __builtin_ctzll(2LL) ? 1 : 0; ], [ have_builtin_ctzll=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ctzll=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_CTZLL], [$have_builtin_ctzll], [Whether the compiler supports __builtin_ctzll]) ]) dnl PHP_CHECK_BUILTIN_SMULL_OVERFLOW AC_DEFUN([PHP_CHECK_BUILTIN_SMULL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_smull_overflow]) AC_TRY_LINK(, [ long tmpvar; return __builtin_smull_overflow(3, 7, &tmpvar); ], [ have_builtin_smull_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_smull_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULL_OVERFLOW], [$have_builtin_smull_overflow], [Whether the compiler supports __builtin_smull_overflow]) ]) dnl PHP_CHECK_BUILTIN_SMULLL_OVERFLOW AC_DEFUN([PHP_CHECK_BUILTIN_SMULLL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_smulll_overflow]) AC_TRY_LINK(, [ long long tmpvar; return __builtin_smulll_overflow(3, 7, &tmpvar); ], [ have_builtin_smulll_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_smulll_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SMULLL_OVERFLOW], [$have_builtin_smulll_overflow], [Whether the compiler supports __builtin_smulll_overflow]) ]) dnl PHP_CHECK_BUILTIN_SADDL_OVERFLOW AC_DEFUN([PHP_CHECK_BUILTIN_SADDL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_saddl_overflow]) AC_TRY_LINK(, [ long tmpvar; return __builtin_saddl_overflow(3, 7, &tmpvar); ], [ have_builtin_saddl_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_saddl_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDL_OVERFLOW], [$have_builtin_saddl_overflow], [Whether the compiler supports __builtin_saddl_overflow]) ]) dnl PHP_CHECK_BUILTIN_SADDLL_OVERFLOW AC_DEFUN([PHP_CHECK_BUILTIN_SADDLL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_saddll_overflow]) AC_TRY_LINK(, [ long long tmpvar; return __builtin_saddll_overflow(3, 7, &tmpvar); ], [ have_builtin_saddll_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_saddll_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SADDLL_OVERFLOW], [$have_builtin_saddll_overflow], [Whether the compiler supports __builtin_saddll_overflow]) ]) dnl PHP_CHECK_BUILTIN_SSUBL_OVERFLOW AC_DEFUN([PHP_CHECK_BUILTIN_SSUBL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_ssubl_overflow]) AC_TRY_LINK(, [ long tmpvar; return __builtin_ssubl_overflow(3, 7, &tmpvar); ], [ have_builtin_ssubl_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ssubl_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBL_OVERFLOW], [$have_builtin_ssubl_overflow], [Whether the compiler supports __builtin_ssubl_overflow]) ]) dnl PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW AC_DEFUN([PHP_CHECK_BUILTIN_SSUBLL_OVERFLOW], [ AC_MSG_CHECKING([for __builtin_ssubll_overflow]) AC_TRY_LINK(, [ long long tmpvar; return __builtin_ssubll_overflow(3, 7, &tmpvar); ], [ have_builtin_ssubll_overflow=1 AC_MSG_RESULT([yes]) ], [ have_builtin_ssubll_overflow=0 AC_MSG_RESULT([no]) ]) AC_DEFINE_UNQUOTED([PHP_HAVE_BUILTIN_SSUBLL_OVERFLOW], [$have_builtin_ssubll_overflow], [Whether the compiler supports __builtin_ssubll_overflow]) ]) dnl Load the AX_CHECK_COMPILE_FLAG macro from the autoconf archive. m4_include([build/ax_check_compile_flag.m4]) PK!dpbuild/scan_makefile_in.awknu[BEGIN { mode=0 sources="" } mode == 0 && /^LTLIBRARY_SOURCES.*\\$/ { if (match($0, "[^=]*$")) { sources=substr($0, RSTART, RLENGTH-1) } mode=1 next } mode == 0 && /^LTLIBRARY_SOURCES.*/ { if (match($0, "[^=]*$")) { sources=substr($0, RSTART, RLENGTH) } } mode == 1 && /.*\\$/ { sources=sources substr($0, 0, length - 1) next } mode == 1 { sources=sources $0 mode=0 } END { print sources } PK! \build/mkdep.awknu[# +----------------------------------------------------------------------+ # | PHP Version 7 | # +----------------------------------------------------------------------+ # | Copyright (c) 2000-2006 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 3.01 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | # | available through the world-wide-web at the following url: | # | http://www.php.net/license/3_01.txt | # | If you did not receive a copy of the PHP license and are unable to | # | obtain it through the world-wide-web, please send a note to | # | license@php.net so we can mail you a copy immediately. | # +----------------------------------------------------------------------+ # | Author: Sascha Schumann | # +----------------------------------------------------------------------+ # # $Id$ # # Usage: # # echo top_srcdir top_builddir srcdir CPP [CPP-ARGS] filenames | \ # awk -f mkdep.awk > dependencies { top_srcdir=$1 top_builddir=$2 srcdir=$3 cmd=$4 for (i = 5; i <= NF; i++) { if (match($i, "^-[A-Z]") == 0) break; cmd=cmd " " $i } dif=i-1 for (; i <= NF; i++) filenames[i-dif]=$i no_files=NF-dif for(i = 1; i <= no_files; i++) { if (system("test -r " filenames[i]) != 0) continue target=filenames[i] sub(srcdir "/", "", target) target2=target sub("\.(c|cpp)$", ".lo", target); sub("\.(c|cpp)$", ".slo", target2); for (e in used) delete used[e] cmdx=cmd " " filenames[i] done=0 while ((cmdx | getline) > 0) { if (match($0, "^# [0-9]* \".*\.h\"") != 0) { if (sub(top_srcdir, "$(top_srcdir)", $3) == 0) sub(top_builddir, "$(top_builddir)", $3) if (substr($3,2,1) != "/" && used[$3] != 1) { if (done == 0) printf(target " " target2 ":") done=1 printf(" \\\n\t" substr($3,2,length($3)-2)) used[$3] = 1; } } } if (done == 1) print "\n" } } PK!coc^ ^ Zend/zend_vm_trace_map.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #include "zend_vm_handlers.h" #include "zend_sort.h" #define GEN_MAP(n, name) do { \ ZVAL_LONG(&tmp, (zend_long)(uintptr_t)zend_opcode_handlers[n]); \ zend_hash_str_add(&vm_trace_ht, #name, sizeof(#name) - 1, &tmp); \ } while (0); #define VM_TRACE_START() do { \ zval tmp; \ zend_hash_init(&vm_trace_ht, 0, NULL, NULL, 1); \ VM_HANDLERS(GEN_MAP) \ zend_vm_trace_init(); \ } while (0) #ifdef _WIN64 # define ADDR_FMT "%016I64x" #elif SIZEOF_SIZE_T == 4 # define ADDR_FMT "%08zx" #elif SIZEOF_SIZE_T == 8 # define ADDR_FMT "%016zx" #else # error "Unknown SIZEOF_SIZE_T" #endif static HashTable vm_trace_ht; static int zend_vm_trace_compare(const Bucket *p1, const Bucket *p2) { if (Z_LVAL(p1->val) > Z_LVAL(p2->val)) { return 1; } else if (Z_LVAL(p1->val) < Z_LVAL(p2->val)) { return -1; } else { return 0; } } static void zend_vm_trace_init(void) { FILE *f; zend_string *key, *prev_key; zval *val; zend_long prev_addr; f = fopen("zend_vm.map", "w+"); if (f) { zend_hash_sort(&vm_trace_ht, (compare_func_t)zend_vm_trace_compare, 0); prev_key = NULL; ZEND_HASH_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) { if (prev_key) { fprintf(f, ADDR_FMT" "ADDR_FMT" t %s\n", prev_addr, Z_LVAL_P(val) - prev_addr, ZSTR_VAL(prev_key)); } prev_key = key; prev_addr = Z_LVAL_P(val); } ZEND_HASH_FOREACH_END(); if (prev_key) { fprintf(f, ADDR_FMT" "ADDR_FMT" t %s\n", prev_addr, 0, ZSTR_VAL(prev_key)); } fclose(f); } zend_hash_destroy(&vm_trace_ht); } PK!rŌ Zend/zend_vm_trace_handlers.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 1998-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Dmitry Stogov | +----------------------------------------------------------------------+ */ #include "zend_sort.h" #define VM_TRACE(op) zend_vm_trace(#op, sizeof(#op)-1); #define VM_TRACE_START() zend_vm_trace_init(); #define VM_TRACE_END() zend_vm_trace_finish(); static HashTable vm_trace_ht; static void zend_vm_trace(const char *op, size_t op_len) { static const char *last = NULL; static size_t last_len = 0; char buf[256]; size_t len; zval tmp, *zv; if (EXPECTED(last)) { len = last_len + 1 + op_len; memcpy(buf, last, last_len); buf[last_len] = ' '; memcpy(buf + last_len + 1, op, op_len + 1); zv = zend_hash_str_find(&vm_trace_ht, buf, len); if (EXPECTED(zv)) { if (EXPECTED(Z_LVAL_P(zv) < ZEND_LONG_MAX)) { Z_LVAL_P(zv)++; } } else { ZVAL_LONG(&tmp, 1); zend_hash_str_add_new(&vm_trace_ht, buf, len, &tmp); } } last = op; last_len = op_len; } static int zend_vm_trace_compare(const Bucket *p1, const Bucket *p2) { if (Z_LVAL(p1->val) < Z_LVAL(p2->val)) { return 1; } else if (Z_LVAL(p1->val) > Z_LVAL(p2->val)) { return -1; } else { return 0; } } static void zend_vm_trace_finish(void) { zend_string *key; zval *val; FILE *f; f = fopen("zend_vm_trace.log", "w+"); if (f) { zend_hash_sort(&vm_trace_ht, (compare_func_t)zend_vm_trace_compare, 0); ZEND_HASH_FOREACH_STR_KEY_VAL(&vm_trace_ht, key, val) { fprintf(f, "%s "ZEND_LONG_FMT"\n", ZSTR_VAL(key), Z_LVAL_P(val)); } ZEND_HASH_FOREACH_END(); fclose(f); } zend_hash_destroy(&vm_trace_ht); } static void zend_vm_trace_init(void) { FILE *f; zend_hash_init(&vm_trace_ht, 0, NULL, NULL, 1); f = fopen("zend_vm_trace.log", "r"); if (f) { char buf[256]; size_t len; zval tmp; while (!feof(f)) { if (fgets(buf, sizeof(buf)-1, f)) { len = strlen(buf); while (len > 0 && buf[len-1] <= ' ') { len--; buf[len] = 0; } while (len > 0 && buf[len-1] >= '0' && buf[len-1] <= '9') { len--; } if (len > 1) { buf[len-1] = 0; ZVAL_LONG(&tmp, ZEND_STRTOL(buf + len, NULL, 10)); zend_hash_str_add(&vm_trace_ht, buf, len - 1, &tmp); } } } fclose(f); } } PK!XXZend/zend_cpuinfo.hnu[/* +----------------------------------------------------------------------+ | Zend Engine | +----------------------------------------------------------------------+ | Copyright (c) 2018-2018 Zend Technologies Ltd. (http://www.zend.com) | +----------------------------------------------------------------------+ | This source file is subject to version 2.00 of the Zend license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.zend.com/license/2_00.txt. | | If you did not receive a copy of the Zend license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@zend.com so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Xinchen Hui | +----------------------------------------------------------------------+ */ #ifndef ZEND_CPU_INFO_H #define ZEND_CPU_INFO_H #include "zend.h" #define ZEND_CPU_EBX_MASK (1<<30) #define ZEND_CPU_EDX_MASK (1<<31) typedef enum _zend_cpu_feature { /* ECX */ ZEND_CPU_FEATURE_SSE3 = (1<<0), ZEND_CPU_FEATURE_PCLMULQDQ = (1<<1), ZEND_CPU_FEATURE_DTES64 = (1<<2), ZEND_CPU_FEATURE_MONITOR = (1<<3), ZEND_CPU_FEATURE_DSCPL = (1<<4), ZEND_CPU_FEATURE_VMX = (1<<5), ZEND_CPU_FEATURE_SMX = (1<<6), ZEND_CPU_FEATURE_EST = (1<<7), ZEND_CPU_FEATURE_TM2 = (1<<8), ZEND_CPU_FEATURE_SSSE3 = (1<<9), ZEND_CPU_FEATURE_CID = (1<<10), ZEND_CPU_FEATURE_SDBG = (1<<11), ZEND_CPU_FEATURE_FMA = (1<<12), ZEND_CPU_FEATURE_CX16 = (1<<13), ZEND_CPU_FEATURE_XTPR = (1<<14), ZEND_CPU_FEATURE_PDCM = (1<<15), /* reserved = (1<<16),*/ ZEND_CPU_FEATURE_PCID = (1<<17), ZEND_CPU_FEATURE_DCA = (1<<18), ZEND_CPU_FEATURE_SSE41 = (1<<19), ZEND_CPU_FEATURE_SSE42 = (1<<20), ZEND_CPU_FEATURE_X2APIC = (1<<21), ZEND_CPU_FEATURE_MOVBE = (1<<22), ZEND_CPU_FEATURE_POPCNT = (1<<23), ZEND_CPU_FEATURE_TSC_DEADLINE = (1<<24), ZEND_CPU_FEATURE_AES = (1<<25), ZEND_CPU_FEATURE_XSAVE = (1<<26), ZEND_CPU_FEATURE_OSXSAVE = (1<<27) , ZEND_CPU_FEATURE_AVX = (1<<28), ZEND_CPU_FEATURE_F16C = (1<<29), /* intentionally don't support = (1<<30) */ /* intentionally don't support = (1<<31) */ /* EBX */ ZEND_CPU_FEATURE_AVX2 = (1<<5 | ZEND_CPU_EBX_MASK), /* EDX */ ZEND_CPU_FEATURE_FPU = (1<<0 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_VME = (1<<1 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_DE = (1<<2 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_PSE = (1<<3 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_TSC = (1<<4 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_MSR = (1<<5 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_PAE = (1<<6 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_MCE = (1<<7 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_CX8 = (1<<8 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_APIC = (1<<9 | ZEND_CPU_EDX_MASK), /* reserved = (1<<10 | ZEND_CPU_EDX_MASK),*/ ZEND_CPU_FEATURE_SEP = (1<<11 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_MTRR = (1<<12 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_PGE = (1<<13 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_MCA = (1<<14 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_CMOV = (1<<15 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_PAT = (1<<16 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_PSE36 = (1<<17 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_PN = (1<<18 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_CLFLUSH = (1<<19 | ZEND_CPU_EDX_MASK), /* reserved = (1<<20 | ZEND_CPU_EDX_MASK),*/ ZEND_CPU_FEATURE_DS = (1<<21 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_ACPI = (1<<22 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_MMX = (1<<23 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_FXSR = (1<<24 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_SSE = (1<<25 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_SSE2 = (1<<26 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_SS = (1<<27 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_HT = (1<<28 | ZEND_CPU_EDX_MASK), ZEND_CPU_FEATURE_TM = (1<<29 | ZEND_CPU_EDX_MASK) /*intentionally don't support = (1<<30 | ZEND_CPU_EDX_MASK)*/ /*intentionally don't support = (1<<31 | ZEND_CPU_EDX_MASK)*/ } zend_cpu_feature; void zend_cpu_startup(); ZEND_API int zend_cpu_supports(zend_cpu_feature feature); /* Address sanitizer is incompatible with ifunc resolvers, so exclude the * CPU support helpers from asan. * See also https://github.com/google/sanitizers/issues/342. */ #if __has_attribute(no_sanitize_address) # define ZEND_NO_SANITIZE_ADDRESS __attribute__((no_sanitize_address)) #else # define ZEND_NO_SANITIZE_ADDRESS #endif #if PHP_HAVE_BUILTIN_CPU_SUPPORTS /* NOTE: you should use following inline function in * resolver functions (ifunc), as it could be called * before all PLT symbols are resloved. in other words, * resolver functions should not depends any external * functions */ ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse2() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse2"); } ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse3() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse3"); } ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_ssse3() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("ssse3"); } ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse41() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse4.1"); } ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_sse42() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("sse4.2"); } ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_avx() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("avx"); } ZEND_NO_SANITIZE_ADDRESS static zend_always_inline int zend_cpu_supports_avx2() { #if PHP_HAVE_BUILTIN_CPU_INIT __builtin_cpu_init(); #endif return __builtin_cpu_supports("avx2"); } #else static zend_always_inline int zend_cpu_supports_sse2() { return zend_cpu_supports(ZEND_CPU_FEATURE_SSE2); } static zend_always_inline int zend_cpu_supports_sse3() { return zend_cpu_supports(ZEND_CPU_FEATURE_SSE3); } static zend_always_inline int zend_cpu_supports_ssse3() { return zend_cpu_supports(ZEND_CPU_FEATURE_SSSE3); } static zend_always_inline int zend_cpu_supports_sse41() { return zend_cpu_supports(ZEND_CPU_FEATURE_SSE41); } static zend_always_inline int zend_cpu_supports_sse42() { return zend_cpu_supports(ZEND_CPU_FEATURE_SSE42); } static zend_always_inline int zend_cpu_supports_avx() { return zend_cpu_supports(ZEND_CPU_FEATURE_AVX); } static zend_always_inline int zend_cpu_supports_avx2() { return zend_cpu_supports(ZEND_CPU_FEATURE_AVX2); } #endif #endif /* * Local variables: * tab-width: 4 * c-basic-offset: 4 * indent-tabs-mode: t * End: */ PK!ctZend/zend_vm_handlers.hnu[#define VM_HANDLERS(_) \ _(0, ZEND_NOP_SPEC) \ _(1, ZEND_ADD_SPEC_CONST_CONST) \ _(2, ZEND_ADD_SPEC_CONST_TMPVAR) \ _(3, ZEND_ADD_SPEC_CONST_TMPVAR) \ _(5, ZEND_ADD_SPEC_CONST_CV) \ _(6, ZEND_ADD_SPEC_TMPVAR_CONST) \ _(7, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \ _(8, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \ _(10, ZEND_ADD_SPEC_TMPVAR_CV) \ _(11, ZEND_ADD_SPEC_TMPVAR_CONST) \ _(12, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \ _(13, ZEND_ADD_SPEC_TMPVAR_TMPVAR) \ _(15, ZEND_ADD_SPEC_TMPVAR_CV) \ _(21, ZEND_ADD_SPEC_CV_CONST) \ _(22, ZEND_ADD_SPEC_CV_TMPVAR) \ _(23, ZEND_ADD_SPEC_CV_TMPVAR) \ _(25, ZEND_ADD_SPEC_CV_CV) \ _(26, ZEND_SUB_SPEC_CONST_CONST) \ _(27, ZEND_SUB_SPEC_CONST_TMPVAR) \ _(28, ZEND_SUB_SPEC_CONST_TMPVAR) \ _(30, ZEND_SUB_SPEC_CONST_CV) \ _(31, ZEND_SUB_SPEC_TMPVAR_CONST) \ _(32, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \ _(33, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \ _(35, ZEND_SUB_SPEC_TMPVAR_CV) \ _(36, ZEND_SUB_SPEC_TMPVAR_CONST) \ _(37, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \ _(38, ZEND_SUB_SPEC_TMPVAR_TMPVAR) \ _(40, ZEND_SUB_SPEC_TMPVAR_CV) \ _(46, ZEND_SUB_SPEC_CV_CONST) \ _(47, ZEND_SUB_SPEC_CV_TMPVAR) \ _(48, ZEND_SUB_SPEC_CV_TMPVAR) \ _(50, ZEND_SUB_SPEC_CV_CV) \ _(51, ZEND_MUL_SPEC_CONST_CONST) \ _(56, ZEND_MUL_SPEC_TMPVAR_CONST) \ _(57, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \ _(58, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \ _(61, ZEND_MUL_SPEC_TMPVAR_CONST) \ _(62, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \ _(63, ZEND_MUL_SPEC_TMPVAR_TMPVAR) \ _(71, ZEND_MUL_SPEC_CV_CONST) \ _(72, ZEND_MUL_SPEC_CV_TMPVAR) \ _(73, ZEND_MUL_SPEC_CV_TMPVAR) \ _(75, ZEND_MUL_SPEC_CV_CV) \ _(76, ZEND_DIV_SPEC_CONST_CONST) \ _(77, ZEND_DIV_SPEC_CONST_TMPVAR) \ _(78, ZEND_DIV_SPEC_CONST_TMPVAR) \ _(80, ZEND_DIV_SPEC_CONST_CV) \ _(81, ZEND_DIV_SPEC_TMPVAR_CONST) \ _(82, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \ _(83, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \ _(85, ZEND_DIV_SPEC_TMPVAR_CV) \ _(86, ZEND_DIV_SPEC_TMPVAR_CONST) \ _(87, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \ _(88, ZEND_DIV_SPEC_TMPVAR_TMPVAR) \ _(90, ZEND_DIV_SPEC_TMPVAR_CV) \ _(96, ZEND_DIV_SPEC_CV_CONST) \ _(97, ZEND_DIV_SPEC_CV_TMPVAR) \ _(98, ZEND_DIV_SPEC_CV_TMPVAR) \ _(100, ZEND_DIV_SPEC_CV_CV) \ _(101, ZEND_MOD_SPEC_CONST_CONST) \ _(102, ZEND_MOD_SPEC_CONST_TMPVAR) \ _(103, ZEND_MOD_SPEC_CONST_TMPVAR) \ _(105, ZEND_MOD_SPEC_CONST_CV) \ _(106, ZEND_MOD_SPEC_TMPVAR_CONST) \ _(107, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \ _(108, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \ _(110, ZEND_MOD_SPEC_TMPVAR_CV) \ _(111, ZEND_MOD_SPEC_TMPVAR_CONST) \ _(112, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \ _(113, ZEND_MOD_SPEC_TMPVAR_TMPVAR) \ _(115, ZEND_MOD_SPEC_TMPVAR_CV) \ _(121, ZEND_MOD_SPEC_CV_CONST) \ _(122, ZEND_MOD_SPEC_CV_TMPVAR) \ _(123, ZEND_MOD_SPEC_CV_TMPVAR) \ _(125, ZEND_MOD_SPEC_CV_CV) \ _(126, ZEND_SL_SPEC_CONST_CONST) \ _(127, ZEND_SL_SPEC_CONST_TMPVAR) \ _(128, ZEND_SL_SPEC_CONST_TMPVAR) \ _(130, ZEND_SL_SPEC_CONST_CV) \ _(131, ZEND_SL_SPEC_TMPVAR_CONST) \ _(132, ZEND_SL_SPEC_TMPVAR_TMPVAR) \ _(133, ZEND_SL_SPEC_TMPVAR_TMPVAR) \ _(135, ZEND_SL_SPEC_TMPVAR_CV) \ _(136, ZEND_SL_SPEC_TMPVAR_CONST) \ _(137, ZEND_SL_SPEC_TMPVAR_TMPVAR) \ _(138, ZEND_SL_SPEC_TMPVAR_TMPVAR) \ _(140, ZEND_SL_SPEC_TMPVAR_CV) \ _(146, ZEND_SL_SPEC_CV_CONST) \ _(147, ZEND_SL_SPEC_CV_TMPVAR) \ _(148, ZEND_SL_SPEC_CV_TMPVAR) \ _(150, ZEND_SL_SPEC_CV_CV) \ _(151, ZEND_SR_SPEC_CONST_CONST) \ _(152, ZEND_SR_SPEC_CONST_TMPVAR) \ _(153, ZEND_SR_SPEC_CONST_TMPVAR) \ _(155, ZEND_SR_SPEC_CONST_CV) \ _(156, ZEND_SR_SPEC_TMPVAR_CONST) \ _(157, ZEND_SR_SPEC_TMPVAR_TMPVAR) \ _(158, ZEND_SR_SPEC_TMPVAR_TMPVAR) \ _(160, ZEND_SR_SPEC_TMPVAR_CV) \ _(161, ZEND_SR_SPEC_TMPVAR_CONST) \ _(162, ZEND_SR_SPEC_TMPVAR_TMPVAR) \ _(163, ZEND_SR_SPEC_TMPVAR_TMPVAR) \ _(165, ZEND_SR_SPEC_TMPVAR_CV) \ _(171, ZEND_SR_SPEC_CV_CONST) \ _(172, ZEND_SR_SPEC_CV_TMPVAR) \ _(173, ZEND_SR_SPEC_CV_TMPVAR) \ _(175, ZEND_SR_SPEC_CV_CV) \ _(177, ZEND_CONCAT_SPEC_CONST_TMPVAR) \ _(178, ZEND_CONCAT_SPEC_CONST_TMPVAR) \ _(180, ZEND_CONCAT_SPEC_CONST_CV) \ _(181, ZEND_CONCAT_SPEC_TMPVAR_CONST) \ _(182, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(183, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(185, ZEND_CONCAT_SPEC_TMPVAR_CV) \ _(186, ZEND_CONCAT_SPEC_TMPVAR_CONST) \ _(187, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(188, ZEND_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(190, ZEND_CONCAT_SPEC_TMPVAR_CV) \ _(196, ZEND_CONCAT_SPEC_CV_CONST) \ _(197, ZEND_CONCAT_SPEC_CV_TMPVAR) \ _(198, ZEND_CONCAT_SPEC_CV_TMPVAR) \ _(200, ZEND_CONCAT_SPEC_CV_CV) \ _(201, ZEND_BW_OR_SPEC_CONST_CONST) \ _(206, ZEND_BW_OR_SPEC_TMPVAR_CONST) \ _(207, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \ _(208, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \ _(211, ZEND_BW_OR_SPEC_TMPVAR_CONST) \ _(212, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \ _(213, ZEND_BW_OR_SPEC_TMPVAR_TMPVAR) \ _(221, ZEND_BW_OR_SPEC_CV_CONST) \ _(222, ZEND_BW_OR_SPEC_CV_TMPVAR) \ _(223, ZEND_BW_OR_SPEC_CV_TMPVAR) \ _(225, ZEND_BW_OR_SPEC_CV_CV) \ _(226, ZEND_BW_AND_SPEC_CONST_CONST) \ _(231, ZEND_BW_AND_SPEC_TMPVAR_CONST) \ _(232, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \ _(233, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \ _(236, ZEND_BW_AND_SPEC_TMPVAR_CONST) \ _(237, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \ _(238, ZEND_BW_AND_SPEC_TMPVAR_TMPVAR) \ _(246, ZEND_BW_AND_SPEC_CV_CONST) \ _(247, ZEND_BW_AND_SPEC_CV_TMPVAR) \ _(248, ZEND_BW_AND_SPEC_CV_TMPVAR) \ _(250, ZEND_BW_AND_SPEC_CV_CV) \ _(251, ZEND_BW_XOR_SPEC_CONST_CONST) \ _(256, ZEND_BW_XOR_SPEC_TMPVAR_CONST) \ _(257, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \ _(258, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \ _(261, ZEND_BW_XOR_SPEC_TMPVAR_CONST) \ _(262, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \ _(263, ZEND_BW_XOR_SPEC_TMPVAR_TMPVAR) \ _(271, ZEND_BW_XOR_SPEC_CV_CONST) \ _(272, ZEND_BW_XOR_SPEC_CV_TMPVAR) \ _(273, ZEND_BW_XOR_SPEC_CV_TMPVAR) \ _(275, ZEND_BW_XOR_SPEC_CV_CV) \ _(276, ZEND_BW_NOT_SPEC_CONST) \ _(277, ZEND_BW_NOT_SPEC_TMPVAR) \ _(278, ZEND_BW_NOT_SPEC_TMPVAR) \ _(280, ZEND_BW_NOT_SPEC_CV) \ _(281, ZEND_BOOL_NOT_SPEC_CONST) \ _(282, ZEND_BOOL_NOT_SPEC_TMPVAR) \ _(283, ZEND_BOOL_NOT_SPEC_TMPVAR) \ _(285, ZEND_BOOL_NOT_SPEC_CV) \ _(286, ZEND_BOOL_XOR_SPEC_CONST_CONST) \ _(291, ZEND_BOOL_XOR_SPEC_TMPVAR_CONST) \ _(292, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \ _(293, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \ _(296, ZEND_BOOL_XOR_SPEC_TMPVAR_CONST) \ _(297, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \ _(298, ZEND_BOOL_XOR_SPEC_TMPVAR_TMPVAR) \ _(306, ZEND_BOOL_XOR_SPEC_CV_CONST) \ _(307, ZEND_BOOL_XOR_SPEC_CV_TMPVAR) \ _(308, ZEND_BOOL_XOR_SPEC_CV_TMPVAR) \ _(310, ZEND_BOOL_XOR_SPEC_CV_CV) \ _(311, ZEND_IS_IDENTICAL_SPEC_CONST_CONST) \ _(316, ZEND_IS_IDENTICAL_SPEC_TMP_CONST) \ _(317, ZEND_IS_IDENTICAL_SPEC_TMP_TMP) \ _(321, ZEND_IS_IDENTICAL_SPEC_VAR_CONST) \ _(322, ZEND_IS_IDENTICAL_SPEC_VAR_TMP) \ _(323, ZEND_IS_IDENTICAL_SPEC_VAR_VAR) \ _(331, ZEND_IS_IDENTICAL_SPEC_CV_CONST) \ _(332, ZEND_IS_IDENTICAL_SPEC_CV_TMP) \ _(333, ZEND_IS_IDENTICAL_SPEC_CV_VAR) \ _(335, ZEND_IS_IDENTICAL_SPEC_CV_CV) \ _(336, ZEND_IS_NOT_IDENTICAL_SPEC_CONST_CONST) \ _(341, ZEND_IS_NOT_IDENTICAL_SPEC_TMP_CONST) \ _(342, ZEND_IS_NOT_IDENTICAL_SPEC_TMP_TMP) \ _(346, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_CONST) \ _(347, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_TMP) \ _(348, ZEND_IS_NOT_IDENTICAL_SPEC_VAR_VAR) \ _(356, ZEND_IS_NOT_IDENTICAL_SPEC_CV_CONST) \ _(357, ZEND_IS_NOT_IDENTICAL_SPEC_CV_TMP) \ _(358, ZEND_IS_NOT_IDENTICAL_SPEC_CV_VAR) \ _(360, ZEND_IS_NOT_IDENTICAL_SPEC_CV_CV) \ _(361, ZEND_IS_EQUAL_SPEC_CONST_CONST) \ _(366, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST) \ _(367, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(368, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(371, ZEND_IS_EQUAL_SPEC_TMPVAR_CONST) \ _(372, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(373, ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(381, ZEND_IS_EQUAL_SPEC_CV_CONST) \ _(382, ZEND_IS_EQUAL_SPEC_CV_TMPVAR) \ _(383, ZEND_IS_EQUAL_SPEC_CV_TMPVAR) \ _(385, ZEND_IS_EQUAL_SPEC_CV_CV) \ _(386, ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST) \ _(391, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST) \ _(392, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(393, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(396, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST) \ _(397, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(398, ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(406, ZEND_IS_NOT_EQUAL_SPEC_CV_CONST) \ _(407, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR) \ _(408, ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR) \ _(410, ZEND_IS_NOT_EQUAL_SPEC_CV_CV) \ _(411, ZEND_IS_SMALLER_SPEC_CONST_CONST) \ _(412, ZEND_IS_SMALLER_SPEC_CONST_TMPVAR) \ _(413, ZEND_IS_SMALLER_SPEC_CONST_TMPVAR) \ _(415, ZEND_IS_SMALLER_SPEC_CONST_CV) \ _(416, ZEND_IS_SMALLER_SPEC_TMPVAR_CONST) \ _(417, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR) \ _(418, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR) \ _(420, ZEND_IS_SMALLER_SPEC_TMPVAR_CV) \ _(421, ZEND_IS_SMALLER_SPEC_TMPVAR_CONST) \ _(422, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR) \ _(423, ZEND_IS_SMALLER_SPEC_TMPVAR_TMPVAR) \ _(425, ZEND_IS_SMALLER_SPEC_TMPVAR_CV) \ _(431, ZEND_IS_SMALLER_SPEC_CV_CONST) \ _(432, ZEND_IS_SMALLER_SPEC_CV_TMPVAR) \ _(433, ZEND_IS_SMALLER_SPEC_CV_TMPVAR) \ _(435, ZEND_IS_SMALLER_SPEC_CV_CV) \ _(436, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CONST) \ _(437, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR) \ _(438, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_TMPVAR) \ _(440, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CONST_CV) \ _(441, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST) \ _(442, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(443, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(445, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV) \ _(446, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CONST) \ _(447, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(448, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_TMPVAR) \ _(450, ZEND_IS_SMALLER_OR_EQUAL_SPEC_TMPVAR_CV) \ _(456, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CONST) \ _(457, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR) \ _(458, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_TMPVAR) \ _(460, ZEND_IS_SMALLER_OR_EQUAL_SPEC_CV_CV) \ _(461, ZEND_CAST_SPEC_CONST) \ _(462, ZEND_CAST_SPEC_TMP) \ _(463, ZEND_CAST_SPEC_VAR) \ _(465, ZEND_CAST_SPEC_CV) \ _(466, ZEND_QM_ASSIGN_SPEC_CONST) \ _(467, ZEND_QM_ASSIGN_SPEC_TMP) \ _(468, ZEND_QM_ASSIGN_SPEC_VAR) \ _(470, ZEND_QM_ASSIGN_SPEC_CV) \ _(501, ZEND_ASSIGN_ADD_SPEC_VAR_CONST) \ _(502, ZEND_ASSIGN_ADD_SPEC_VAR_CONST_DIM) \ _(503, ZEND_ASSIGN_ADD_SPEC_VAR_CONST_OBJ) \ _(504, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR) \ _(505, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM) \ _(506, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ) \ _(507, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR) \ _(508, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_DIM) \ _(509, ZEND_ASSIGN_ADD_SPEC_VAR_TMPVAR_OBJ) \ _(511, ZEND_ASSIGN_ADD_SPEC_VAR_UNUSED_DIM) \ _(513, ZEND_ASSIGN_ADD_SPEC_VAR_CV) \ _(514, ZEND_ASSIGN_ADD_SPEC_VAR_CV_DIM) \ _(515, ZEND_ASSIGN_ADD_SPEC_VAR_CV_OBJ) \ _(518, ZEND_ASSIGN_ADD_SPEC_UNUSED_CONST_OBJ) \ _(521, ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ) \ _(524, ZEND_ASSIGN_ADD_SPEC_UNUSED_TMPVAR_OBJ) \ _(530, ZEND_ASSIGN_ADD_SPEC_UNUSED_CV_OBJ) \ _(531, ZEND_ASSIGN_ADD_SPEC_CV_CONST) \ _(532, ZEND_ASSIGN_ADD_SPEC_CV_CONST_DIM) \ _(533, ZEND_ASSIGN_ADD_SPEC_CV_CONST_OBJ) \ _(534, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR) \ _(535, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM) \ _(536, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ) \ _(537, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR) \ _(538, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_DIM) \ _(539, ZEND_ASSIGN_ADD_SPEC_CV_TMPVAR_OBJ) \ _(541, ZEND_ASSIGN_ADD_SPEC_CV_UNUSED_DIM) \ _(543, ZEND_ASSIGN_ADD_SPEC_CV_CV) \ _(544, ZEND_ASSIGN_ADD_SPEC_CV_CV_DIM) \ _(545, ZEND_ASSIGN_ADD_SPEC_CV_CV_OBJ) \ _(576, ZEND_ASSIGN_SUB_SPEC_VAR_CONST) \ _(577, ZEND_ASSIGN_SUB_SPEC_VAR_CONST_DIM) \ _(578, ZEND_ASSIGN_SUB_SPEC_VAR_CONST_OBJ) \ _(579, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR) \ _(580, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM) \ _(581, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ) \ _(582, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR) \ _(583, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_DIM) \ _(584, ZEND_ASSIGN_SUB_SPEC_VAR_TMPVAR_OBJ) \ _(586, ZEND_ASSIGN_SUB_SPEC_VAR_UNUSED_DIM) \ _(588, ZEND_ASSIGN_SUB_SPEC_VAR_CV) \ _(589, ZEND_ASSIGN_SUB_SPEC_VAR_CV_DIM) \ _(590, ZEND_ASSIGN_SUB_SPEC_VAR_CV_OBJ) \ _(593, ZEND_ASSIGN_SUB_SPEC_UNUSED_CONST_OBJ) \ _(596, ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ) \ _(599, ZEND_ASSIGN_SUB_SPEC_UNUSED_TMPVAR_OBJ) \ _(605, ZEND_ASSIGN_SUB_SPEC_UNUSED_CV_OBJ) \ _(606, ZEND_ASSIGN_SUB_SPEC_CV_CONST) \ _(607, ZEND_ASSIGN_SUB_SPEC_CV_CONST_DIM) \ _(608, ZEND_ASSIGN_SUB_SPEC_CV_CONST_OBJ) \ _(609, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR) \ _(610, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM) \ _(611, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ) \ _(612, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR) \ _(613, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_DIM) \ _(614, ZEND_ASSIGN_SUB_SPEC_CV_TMPVAR_OBJ) \ _(616, ZEND_ASSIGN_SUB_SPEC_CV_UNUSED_DIM) \ _(618, ZEND_ASSIGN_SUB_SPEC_CV_CV) \ _(619, ZEND_ASSIGN_SUB_SPEC_CV_CV_DIM) \ _(620, ZEND_ASSIGN_SUB_SPEC_CV_CV_OBJ) \ _(651, ZEND_ASSIGN_MUL_SPEC_VAR_CONST) \ _(652, ZEND_ASSIGN_MUL_SPEC_VAR_CONST_DIM) \ _(653, ZEND_ASSIGN_MUL_SPEC_VAR_CONST_OBJ) \ _(654, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR) \ _(655, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM) \ _(656, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ) \ _(657, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR) \ _(658, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_DIM) \ _(659, ZEND_ASSIGN_MUL_SPEC_VAR_TMPVAR_OBJ) \ _(661, ZEND_ASSIGN_MUL_SPEC_VAR_UNUSED_DIM) \ _(663, ZEND_ASSIGN_MUL_SPEC_VAR_CV) \ _(664, ZEND_ASSIGN_MUL_SPEC_VAR_CV_DIM) \ _(665, ZEND_ASSIGN_MUL_SPEC_VAR_CV_OBJ) \ _(668, ZEND_ASSIGN_MUL_SPEC_UNUSED_CONST_OBJ) \ _(671, ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ) \ _(674, ZEND_ASSIGN_MUL_SPEC_UNUSED_TMPVAR_OBJ) \ _(680, ZEND_ASSIGN_MUL_SPEC_UNUSED_CV_OBJ) \ _(681, ZEND_ASSIGN_MUL_SPEC_CV_CONST) \ _(682, ZEND_ASSIGN_MUL_SPEC_CV_CONST_DIM) \ _(683, ZEND_ASSIGN_MUL_SPEC_CV_CONST_OBJ) \ _(684, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR) \ _(685, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM) \ _(686, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ) \ _(687, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR) \ _(688, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_DIM) \ _(689, ZEND_ASSIGN_MUL_SPEC_CV_TMPVAR_OBJ) \ _(691, ZEND_ASSIGN_MUL_SPEC_CV_UNUSED_DIM) \ _(693, ZEND_ASSIGN_MUL_SPEC_CV_CV) \ _(694, ZEND_ASSIGN_MUL_SPEC_CV_CV_DIM) \ _(695, ZEND_ASSIGN_MUL_SPEC_CV_CV_OBJ) \ _(726, ZEND_ASSIGN_DIV_SPEC_VAR_CONST) \ _(727, ZEND_ASSIGN_DIV_SPEC_VAR_CONST_DIM) \ _(728, ZEND_ASSIGN_DIV_SPEC_VAR_CONST_OBJ) \ _(729, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR) \ _(730, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM) \ _(731, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ) \ _(732, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR) \ _(733, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_DIM) \ _(734, ZEND_ASSIGN_DIV_SPEC_VAR_TMPVAR_OBJ) \ _(736, ZEND_ASSIGN_DIV_SPEC_VAR_UNUSED_DIM) \ _(738, ZEND_ASSIGN_DIV_SPEC_VAR_CV) \ _(739, ZEND_ASSIGN_DIV_SPEC_VAR_CV_DIM) \ _(740, ZEND_ASSIGN_DIV_SPEC_VAR_CV_OBJ) \ _(743, ZEND_ASSIGN_DIV_SPEC_UNUSED_CONST_OBJ) \ _(746, ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ) \ _(749, ZEND_ASSIGN_DIV_SPEC_UNUSED_TMPVAR_OBJ) \ _(755, ZEND_ASSIGN_DIV_SPEC_UNUSED_CV_OBJ) \ _(756, ZEND_ASSIGN_DIV_SPEC_CV_CONST) \ _(757, ZEND_ASSIGN_DIV_SPEC_CV_CONST_DIM) \ _(758, ZEND_ASSIGN_DIV_SPEC_CV_CONST_OBJ) \ _(759, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR) \ _(760, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM) \ _(761, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ) \ _(762, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR) \ _(763, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_DIM) \ _(764, ZEND_ASSIGN_DIV_SPEC_CV_TMPVAR_OBJ) \ _(766, ZEND_ASSIGN_DIV_SPEC_CV_UNUSED_DIM) \ _(768, ZEND_ASSIGN_DIV_SPEC_CV_CV) \ _(769, ZEND_ASSIGN_DIV_SPEC_CV_CV_DIM) \ _(770, ZEND_ASSIGN_DIV_SPEC_CV_CV_OBJ) \ _(801, ZEND_ASSIGN_MOD_SPEC_VAR_CONST) \ _(802, ZEND_ASSIGN_MOD_SPEC_VAR_CONST_DIM) \ _(803, ZEND_ASSIGN_MOD_SPEC_VAR_CONST_OBJ) \ _(804, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR) \ _(805, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM) \ _(806, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ) \ _(807, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR) \ _(808, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_DIM) \ _(809, ZEND_ASSIGN_MOD_SPEC_VAR_TMPVAR_OBJ) \ _(811, ZEND_ASSIGN_MOD_SPEC_VAR_UNUSED_DIM) \ _(813, ZEND_ASSIGN_MOD_SPEC_VAR_CV) \ _(814, ZEND_ASSIGN_MOD_SPEC_VAR_CV_DIM) \ _(815, ZEND_ASSIGN_MOD_SPEC_VAR_CV_OBJ) \ _(818, ZEND_ASSIGN_MOD_SPEC_UNUSED_CONST_OBJ) \ _(821, ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ) \ _(824, ZEND_ASSIGN_MOD_SPEC_UNUSED_TMPVAR_OBJ) \ _(830, ZEND_ASSIGN_MOD_SPEC_UNUSED_CV_OBJ) \ _(831, ZEND_ASSIGN_MOD_SPEC_CV_CONST) \ _(832, ZEND_ASSIGN_MOD_SPEC_CV_CONST_DIM) \ _(833, ZEND_ASSIGN_MOD_SPEC_CV_CONST_OBJ) \ _(834, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR) \ _(835, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM) \ _(836, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ) \ _(837, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR) \ _(838, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_DIM) \ _(839, ZEND_ASSIGN_MOD_SPEC_CV_TMPVAR_OBJ) \ _(841, ZEND_ASSIGN_MOD_SPEC_CV_UNUSED_DIM) \ _(843, ZEND_ASSIGN_MOD_SPEC_CV_CV) \ _(844, ZEND_ASSIGN_MOD_SPEC_CV_CV_DIM) \ _(845, ZEND_ASSIGN_MOD_SPEC_CV_CV_OBJ) \ _(876, ZEND_ASSIGN_SL_SPEC_VAR_CONST) \ _(877, ZEND_ASSIGN_SL_SPEC_VAR_CONST_DIM) \ _(878, ZEND_ASSIGN_SL_SPEC_VAR_CONST_OBJ) \ _(879, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR) \ _(880, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM) \ _(881, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ) \ _(882, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR) \ _(883, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_DIM) \ _(884, ZEND_ASSIGN_SL_SPEC_VAR_TMPVAR_OBJ) \ _(886, ZEND_ASSIGN_SL_SPEC_VAR_UNUSED_DIM) \ _(888, ZEND_ASSIGN_SL_SPEC_VAR_CV) \ _(889, ZEND_ASSIGN_SL_SPEC_VAR_CV_DIM) \ _(890, ZEND_ASSIGN_SL_SPEC_VAR_CV_OBJ) \ _(893, ZEND_ASSIGN_SL_SPEC_UNUSED_CONST_OBJ) \ _(896, ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ) \ _(899, ZEND_ASSIGN_SL_SPEC_UNUSED_TMPVAR_OBJ) \ _(905, ZEND_ASSIGN_SL_SPEC_UNUSED_CV_OBJ) \ _(906, ZEND_ASSIGN_SL_SPEC_CV_CONST) \ _(907, ZEND_ASSIGN_SL_SPEC_CV_CONST_DIM) \ _(908, ZEND_ASSIGN_SL_SPEC_CV_CONST_OBJ) \ _(909, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR) \ _(910, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM) \ _(911, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ) \ _(912, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR) \ _(913, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_DIM) \ _(914, ZEND_ASSIGN_SL_SPEC_CV_TMPVAR_OBJ) \ _(916, ZEND_ASSIGN_SL_SPEC_CV_UNUSED_DIM) \ _(918, ZEND_ASSIGN_SL_SPEC_CV_CV) \ _(919, ZEND_ASSIGN_SL_SPEC_CV_CV_DIM) \ _(920, ZEND_ASSIGN_SL_SPEC_CV_CV_OBJ) \ _(951, ZEND_ASSIGN_SR_SPEC_VAR_CONST) \ _(952, ZEND_ASSIGN_SR_SPEC_VAR_CONST_DIM) \ _(953, ZEND_ASSIGN_SR_SPEC_VAR_CONST_OBJ) \ _(954, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR) \ _(955, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM) \ _(956, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ) \ _(957, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR) \ _(958, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_DIM) \ _(959, ZEND_ASSIGN_SR_SPEC_VAR_TMPVAR_OBJ) \ _(961, ZEND_ASSIGN_SR_SPEC_VAR_UNUSED_DIM) \ _(963, ZEND_ASSIGN_SR_SPEC_VAR_CV) \ _(964, ZEND_ASSIGN_SR_SPEC_VAR_CV_DIM) \ _(965, ZEND_ASSIGN_SR_SPEC_VAR_CV_OBJ) \ _(968, ZEND_ASSIGN_SR_SPEC_UNUSED_CONST_OBJ) \ _(971, ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ) \ _(974, ZEND_ASSIGN_SR_SPEC_UNUSED_TMPVAR_OBJ) \ _(980, ZEND_ASSIGN_SR_SPEC_UNUSED_CV_OBJ) \ _(981, ZEND_ASSIGN_SR_SPEC_CV_CONST) \ _(982, ZEND_ASSIGN_SR_SPEC_CV_CONST_DIM) \ _(983, ZEND_ASSIGN_SR_SPEC_CV_CONST_OBJ) \ _(984, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR) \ _(985, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM) \ _(986, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ) \ _(987, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR) \ _(988, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_DIM) \ _(989, ZEND_ASSIGN_SR_SPEC_CV_TMPVAR_OBJ) \ _(991, ZEND_ASSIGN_SR_SPEC_CV_UNUSED_DIM) \ _(993, ZEND_ASSIGN_SR_SPEC_CV_CV) \ _(994, ZEND_ASSIGN_SR_SPEC_CV_CV_DIM) \ _(995, ZEND_ASSIGN_SR_SPEC_CV_CV_OBJ) \ _(1026, ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST) \ _(1027, ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_DIM) \ _(1028, ZEND_ASSIGN_CONCAT_SPEC_VAR_CONST_OBJ) \ _(1029, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR) \ _(1030, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM) \ _(1031, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ) \ _(1032, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR) \ _(1033, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_DIM) \ _(1034, ZEND_ASSIGN_CONCAT_SPEC_VAR_TMPVAR_OBJ) \ _(1036, ZEND_ASSIGN_CONCAT_SPEC_VAR_UNUSED_DIM) \ _(1038, ZEND_ASSIGN_CONCAT_SPEC_VAR_CV) \ _(1039, ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_DIM) \ _(1040, ZEND_ASSIGN_CONCAT_SPEC_VAR_CV_OBJ) \ _(1043, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CONST_OBJ) \ _(1046, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ) \ _(1049, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_TMPVAR_OBJ) \ _(1055, ZEND_ASSIGN_CONCAT_SPEC_UNUSED_CV_OBJ) \ _(1056, ZEND_ASSIGN_CONCAT_SPEC_CV_CONST) \ _(1057, ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_DIM) \ _(1058, ZEND_ASSIGN_CONCAT_SPEC_CV_CONST_OBJ) \ _(1059, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR) \ _(1060, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM) \ _(1061, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ) \ _(1062, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR) \ _(1063, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_DIM) \ _(1064, ZEND_ASSIGN_CONCAT_SPEC_CV_TMPVAR_OBJ) \ _(1066, ZEND_ASSIGN_CONCAT_SPEC_CV_UNUSED_DIM) \ _(1068, ZEND_ASSIGN_CONCAT_SPEC_CV_CV) \ _(1069, ZEND_ASSIGN_CONCAT_SPEC_CV_CV_DIM) \ _(1070, ZEND_ASSIGN_CONCAT_SPEC_CV_CV_OBJ) \ _(1101, ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST) \ _(1102, ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_DIM) \ _(1103, ZEND_ASSIGN_BW_OR_SPEC_VAR_CONST_OBJ) \ _(1104, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR) \ _(1105, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM) \ _(1106, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ) \ _(1107, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR) \ _(1108, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_DIM) \ _(1109, ZEND_ASSIGN_BW_OR_SPEC_VAR_TMPVAR_OBJ) \ _(1111, ZEND_ASSIGN_BW_OR_SPEC_VAR_UNUSED_DIM) \ _(1113, ZEND_ASSIGN_BW_OR_SPEC_VAR_CV) \ _(1114, ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_DIM) \ _(1115, ZEND_ASSIGN_BW_OR_SPEC_VAR_CV_OBJ) \ _(1118, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CONST_OBJ) \ _(1121, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ) \ _(1124, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_TMPVAR_OBJ) \ _(1130, ZEND_ASSIGN_BW_OR_SPEC_UNUSED_CV_OBJ) \ _(1131, ZEND_ASSIGN_BW_OR_SPEC_CV_CONST) \ _(1132, ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_DIM) \ _(1133, ZEND_ASSIGN_BW_OR_SPEC_CV_CONST_OBJ) \ _(1134, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR) \ _(1135, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM) \ _(1136, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ) \ _(1137, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR) \ _(1138, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_DIM) \ _(1139, ZEND_ASSIGN_BW_OR_SPEC_CV_TMPVAR_OBJ) \ _(1141, ZEND_ASSIGN_BW_OR_SPEC_CV_UNUSED_DIM) \ _(1143, ZEND_ASSIGN_BW_OR_SPEC_CV_CV) \ _(1144, ZEND_ASSIGN_BW_OR_SPEC_CV_CV_DIM) \ _(1145, ZEND_ASSIGN_BW_OR_SPEC_CV_CV_OBJ) \ _(1176, ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST) \ _(1177, ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_DIM) \ _(1178, ZEND_ASSIGN_BW_AND_SPEC_VAR_CONST_OBJ) \ _(1179, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR) \ _(1180, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM) \ _(1181, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ) \ _(1182, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR) \ _(1183, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_DIM) \ _(1184, ZEND_ASSIGN_BW_AND_SPEC_VAR_TMPVAR_OBJ) \ _(1186, ZEND_ASSIGN_BW_AND_SPEC_VAR_UNUSED_DIM) \ _(1188, ZEND_ASSIGN_BW_AND_SPEC_VAR_CV) \ _(1189, ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_DIM) \ _(1190, ZEND_ASSIGN_BW_AND_SPEC_VAR_CV_OBJ) \ _(1193, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CONST_OBJ) \ _(1196, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ) \ _(1199, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_TMPVAR_OBJ) \ _(1205, ZEND_ASSIGN_BW_AND_SPEC_UNUSED_CV_OBJ) \ _(1206, ZEND_ASSIGN_BW_AND_SPEC_CV_CONST) \ _(1207, ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_DIM) \ _(1208, ZEND_ASSIGN_BW_AND_SPEC_CV_CONST_OBJ) \ _(1209, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR) \ _(1210, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM) \ _(1211, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ) \ _(1212, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR) \ _(1213, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_DIM) \ _(1214, ZEND_ASSIGN_BW_AND_SPEC_CV_TMPVAR_OBJ) \ _(1216, ZEND_ASSIGN_BW_AND_SPEC_CV_UNUSED_DIM) \ _(1218, ZEND_ASSIGN_BW_AND_SPEC_CV_CV) \ _(1219, ZEND_ASSIGN_BW_AND_SPEC_CV_CV_DIM) \ _(1220, ZEND_ASSIGN_BW_AND_SPEC_CV_CV_OBJ) \ _(1251, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST) \ _(1252, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_DIM) \ _(1253, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CONST_OBJ) \ _(1254, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR) \ _(1255, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM) \ _(1256, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ) \ _(1257, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR) \ _(1258, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_DIM) \ _(1259, ZEND_ASSIGN_BW_XOR_SPEC_VAR_TMPVAR_OBJ) \ _(1261, ZEND_ASSIGN_BW_XOR_SPEC_VAR_UNUSED_DIM) \ _(1263, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV) \ _(1264, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_DIM) \ _(1265, ZEND_ASSIGN_BW_XOR_SPEC_VAR_CV_OBJ) \ _(1268, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CONST_OBJ) \ _(1271, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ) \ _(1274, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_TMPVAR_OBJ) \ _(1280, ZEND_ASSIGN_BW_XOR_SPEC_UNUSED_CV_OBJ) \ _(1281, ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST) \ _(1282, ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_DIM) \ _(1283, ZEND_ASSIGN_BW_XOR_SPEC_CV_CONST_OBJ) \ _(1284, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR) \ _(1285, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM) \ _(1286, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ) \ _(1287, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR) \ _(1288, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_DIM) \ _(1289, ZEND_ASSIGN_BW_XOR_SPEC_CV_TMPVAR_OBJ) \ _(1291, ZEND_ASSIGN_BW_XOR_SPEC_CV_UNUSED_DIM) \ _(1293, ZEND_ASSIGN_BW_XOR_SPEC_CV_CV) \ _(1294, ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_DIM) \ _(1295, ZEND_ASSIGN_BW_XOR_SPEC_CV_CV_OBJ) \ _(1300, ZEND_PRE_INC_SPEC_VAR_RETVAL_UNUSED) \ _(1301, ZEND_PRE_INC_SPEC_VAR_RETVAL_USED) \ _(1304, ZEND_PRE_INC_SPEC_CV_RETVAL_UNUSED) \ _(1305, ZEND_PRE_INC_SPEC_CV_RETVAL_USED) \ _(1310, ZEND_PRE_DEC_SPEC_VAR_RETVAL_UNUSED) \ _(1311, ZEND_PRE_DEC_SPEC_VAR_RETVAL_USED) \ _(1314, ZEND_PRE_DEC_SPEC_CV_RETVAL_UNUSED) \ _(1315, ZEND_PRE_DEC_SPEC_CV_RETVAL_USED) \ _(1318, ZEND_POST_INC_SPEC_VAR) \ _(1320, ZEND_POST_INC_SPEC_CV) \ _(1323, ZEND_POST_DEC_SPEC_VAR) \ _(1325, ZEND_POST_DEC_SPEC_CV) \ _(1346, ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_UNUSED) \ _(1347, ZEND_ASSIGN_SPEC_VAR_CONST_RETVAL_USED) \ _(1348, ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_UNUSED) \ _(1349, ZEND_ASSIGN_SPEC_VAR_TMP_RETVAL_USED) \ _(1350, ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_UNUSED) \ _(1351, ZEND_ASSIGN_SPEC_VAR_VAR_RETVAL_USED) \ _(1354, ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_UNUSED) \ _(1355, ZEND_ASSIGN_SPEC_VAR_CV_RETVAL_USED) \ _(1366, ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_UNUSED) \ _(1367, ZEND_ASSIGN_SPEC_CV_CONST_RETVAL_USED) \ _(1368, ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_UNUSED) \ _(1369, ZEND_ASSIGN_SPEC_CV_TMP_RETVAL_USED) \ _(1370, ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_UNUSED) \ _(1371, ZEND_ASSIGN_SPEC_CV_VAR_RETVAL_USED) \ _(1374, ZEND_ASSIGN_SPEC_CV_CV_RETVAL_UNUSED) \ _(1375, ZEND_ASSIGN_SPEC_CV_CV_RETVAL_USED) \ _(1388, ZEND_ASSIGN_REF_SPEC_VAR_VAR) \ _(1390, ZEND_ASSIGN_REF_SPEC_VAR_CV) \ _(1398, ZEND_ASSIGN_REF_SPEC_CV_VAR) \ _(1400, ZEND_ASSIGN_REF_SPEC_CV_CV) \ _(1401, ZEND_ECHO_SPEC_CONST) \ _(1402, ZEND_ECHO_SPEC_TMPVAR) \ _(1403, ZEND_ECHO_SPEC_TMPVAR) \ _(1405, ZEND_ECHO_SPEC_CV) \ _(1406, ZEND_GENERATOR_CREATE_SPEC) \ _(1407, ZEND_JMP_SPEC) \ _(1408, ZEND_JMPZ_SPEC_CONST) \ _(1409, ZEND_JMPZ_SPEC_TMPVAR) \ _(1410, ZEND_JMPZ_SPEC_TMPVAR) \ _(1412, ZEND_JMPZ_SPEC_CV) \ _(1413, ZEND_JMPNZ_SPEC_CONST) \ _(1414, ZEND_JMPNZ_SPEC_TMPVAR) \ _(1415, ZEND_JMPNZ_SPEC_TMPVAR) \ _(1417, ZEND_JMPNZ_SPEC_CV) \ _(1418, ZEND_JMPZNZ_SPEC_CONST) \ _(1419, ZEND_JMPZNZ_SPEC_TMPVAR) \ _(1420, ZEND_JMPZNZ_SPEC_TMPVAR) \ _(1422, ZEND_JMPZNZ_SPEC_CV) \ _(1423, ZEND_JMPZ_EX_SPEC_CONST) \ _(1424, ZEND_JMPZ_EX_SPEC_TMPVAR) \ _(1425, ZEND_JMPZ_EX_SPEC_TMPVAR) \ _(1427, ZEND_JMPZ_EX_SPEC_CV) \ _(1428, ZEND_JMPNZ_EX_SPEC_CONST) \ _(1429, ZEND_JMPNZ_EX_SPEC_TMPVAR) \ _(1430, ZEND_JMPNZ_EX_SPEC_TMPVAR) \ _(1432, ZEND_JMPNZ_EX_SPEC_CV) \ _(1433, ZEND_CASE_SPEC_TMPVAR_CONST) \ _(1434, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \ _(1435, ZEND_CASE_SPEC_TMPVAR_TMPVAR) \ _(1437, ZEND_CASE_SPEC_TMPVAR_CV) \ _(1438, ZEND_CHECK_VAR_SPEC_CV_UNUSED) \ _(1439, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR) \ _(1440, ZEND_SEND_VAR_NO_REF_EX_SPEC_VAR_QUICK) \ _(1443, ZEND_MAKE_REF_SPEC_VAR_UNUSED) \ _(1445, ZEND_MAKE_REF_SPEC_CV_UNUSED) \ _(1446, ZEND_BOOL_SPEC_CONST) \ _(1447, ZEND_BOOL_SPEC_TMPVAR) \ _(1448, ZEND_BOOL_SPEC_TMPVAR) \ _(1450, ZEND_BOOL_SPEC_CV) \ _(1451, ZEND_FAST_CONCAT_SPEC_CONST_CONST) \ _(1452, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \ _(1453, ZEND_FAST_CONCAT_SPEC_CONST_TMPVAR) \ _(1455, ZEND_FAST_CONCAT_SPEC_CONST_CV) \ _(1456, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \ _(1457, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(1458, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(1460, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \ _(1461, ZEND_FAST_CONCAT_SPEC_TMPVAR_CONST) \ _(1462, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(1463, ZEND_FAST_CONCAT_SPEC_TMPVAR_TMPVAR) \ _(1465, ZEND_FAST_CONCAT_SPEC_TMPVAR_CV) \ _(1471, ZEND_FAST_CONCAT_SPEC_CV_CONST) \ _(1472, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \ _(1473, ZEND_FAST_CONCAT_SPEC_CV_TMPVAR) \ _(1475, ZEND_FAST_CONCAT_SPEC_CV_CV) \ _(1476, ZEND_ROPE_INIT_SPEC_UNUSED_CONST) \ _(1477, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \ _(1478, ZEND_ROPE_INIT_SPEC_UNUSED_TMPVAR) \ _(1480, ZEND_ROPE_INIT_SPEC_UNUSED_CV) \ _(1481, ZEND_ROPE_ADD_SPEC_TMP_CONST) \ _(1482, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \ _(1483, ZEND_ROPE_ADD_SPEC_TMP_TMPVAR) \ _(1485, ZEND_ROPE_ADD_SPEC_TMP_CV) \ _(1486, ZEND_ROPE_END_SPEC_TMP_CONST) \ _(1487, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \ _(1488, ZEND_ROPE_END_SPEC_TMP_TMPVAR) \ _(1490, ZEND_ROPE_END_SPEC_TMP_CV) \ _(1491, ZEND_BEGIN_SILENCE_SPEC) \ _(1492, ZEND_END_SILENCE_SPEC_TMP) \ _(1493, ZEND_INIT_FCALL_BY_NAME_SPEC_CONST) \ _(1494, ZEND_DO_FCALL_SPEC_RETVAL_UNUSED) \ _(1495, ZEND_DO_FCALL_SPEC_RETVAL_USED) \ _(1496, ZEND_INIT_FCALL_SPEC_CONST) \ _(1497, ZEND_RETURN_SPEC_CONST) \ _(1498, ZEND_RETURN_SPEC_TMP) \ _(1499, ZEND_RETURN_SPEC_VAR) \ _(1501, ZEND_RETURN_SPEC_CV) \ _(1502, ZEND_RECV_SPEC_UNUSED) \ _(1503, ZEND_RECV_INIT_SPEC_CONST) \ _(1504, ZEND_SEND_VAL_SPEC_CONST) \ _(1505, ZEND_SEND_VAL_SPEC_TMPVAR) \ _(1506, ZEND_SEND_VAL_SPEC_TMPVAR) \ _(1513, ZEND_SEND_VAR_EX_SPEC_VAR) \ _(1514, ZEND_SEND_VAR_EX_SPEC_VAR_QUICK) \ _(1517, ZEND_SEND_VAR_EX_SPEC_CV) \ _(1518, ZEND_SEND_VAR_EX_SPEC_CV_QUICK) \ _(1521, ZEND_SEND_REF_SPEC_VAR) \ _(1523, ZEND_SEND_REF_SPEC_CV) \ _(1524, ZEND_NEW_SPEC_CONST_UNUSED) \ _(1526, ZEND_NEW_SPEC_VAR_UNUSED) \ _(1527, ZEND_NEW_SPEC_UNUSED_UNUSED) \ _(1529, ZEND_INIT_NS_FCALL_BY_NAME_SPEC_CONST) \ _(1530, ZEND_FREE_SPEC_TMPVAR) \ _(1531, ZEND_INIT_ARRAY_SPEC_CONST_CONST) \ _(1532, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \ _(1533, ZEND_INIT_ARRAY_SPEC_CONST_TMPVAR) \ _(1534, ZEND_INIT_ARRAY_SPEC_CONST_UNUSED) \ _(1535, ZEND_INIT_ARRAY_SPEC_CONST_CV) \ _(1536, ZEND_INIT_ARRAY_SPEC_TMP_CONST) \ _(1537, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \ _(1538, ZEND_INIT_ARRAY_SPEC_TMP_TMPVAR) \ _(1539, ZEND_INIT_ARRAY_SPEC_TMP_UNUSED) \ _(1540, ZEND_INIT_ARRAY_SPEC_TMP_CV) \ _(1541, ZEND_INIT_ARRAY_SPEC_VAR_CONST) \ _(1542, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \ _(1543, ZEND_INIT_ARRAY_SPEC_VAR_TMPVAR) \ _(1544, ZEND_INIT_ARRAY_SPEC_VAR_UNUSED) \ _(1545, ZEND_INIT_ARRAY_SPEC_VAR_CV) \ _(1551, ZEND_INIT_ARRAY_SPEC_CV_CONST) \ _(1552, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \ _(1553, ZEND_INIT_ARRAY_SPEC_CV_TMPVAR) \ _(1554, ZEND_INIT_ARRAY_SPEC_CV_UNUSED) \ _(1555, ZEND_INIT_ARRAY_SPEC_CV_CV) \ _(1556, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CONST) \ _(1557, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \ _(1558, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_TMPVAR) \ _(1559, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_UNUSED) \ _(1560, ZEND_ADD_ARRAY_ELEMENT_SPEC_CONST_CV) \ _(1561, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CONST) \ _(1562, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \ _(1563, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_TMPVAR) \ _(1564, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_UNUSED) \ _(1565, ZEND_ADD_ARRAY_ELEMENT_SPEC_TMP_CV) \ _(1566, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CONST) \ _(1567, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \ _(1568, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_TMPVAR) \ _(1569, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_UNUSED) \ _(1570, ZEND_ADD_ARRAY_ELEMENT_SPEC_VAR_CV) \ _(1576, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CONST) \ _(1577, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \ _(1578, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_TMPVAR) \ _(1579, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_UNUSED) \ _(1580, ZEND_ADD_ARRAY_ELEMENT_SPEC_CV_CV) \ _(1581, ZEND_INCLUDE_OR_EVAL_SPEC_CONST) \ _(1582, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \ _(1583, ZEND_INCLUDE_OR_EVAL_SPEC_TMPVAR) \ _(1585, ZEND_INCLUDE_OR_EVAL_SPEC_CV) \ _(1586, ZEND_UNSET_VAR_SPEC_CONST_UNUSED) \ _(1587, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \ _(1588, ZEND_UNSET_VAR_SPEC_TMPVAR_UNUSED) \ _(1590, ZEND_UNSET_VAR_SPEC_CV_UNUSED) \ _(1601, ZEND_UNSET_DIM_SPEC_VAR_CONST) \ _(1602, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \ _(1603, ZEND_UNSET_DIM_SPEC_VAR_TMPVAR) \ _(1605, ZEND_UNSET_DIM_SPEC_VAR_CV) \ _(1611, ZEND_UNSET_DIM_SPEC_CV_CONST) \ _(1612, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \ _(1613, ZEND_UNSET_DIM_SPEC_CV_TMPVAR) \ _(1615, ZEND_UNSET_DIM_SPEC_CV_CV) \ _(1626, ZEND_UNSET_OBJ_SPEC_VAR_CONST) \ _(1627, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \ _(1628, ZEND_UNSET_OBJ_SPEC_VAR_TMPVAR) \ _(1630, ZEND_UNSET_OBJ_SPEC_VAR_CV) \ _(1631, ZEND_UNSET_OBJ_SPEC_UNUSED_CONST) \ _(1632, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \ _(1633, ZEND_UNSET_OBJ_SPEC_UNUSED_TMPVAR) \ _(1635, ZEND_UNSET_OBJ_SPEC_UNUSED_CV) \ _(1636, ZEND_UNSET_OBJ_SPEC_CV_CONST) \ _(1637, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \ _(1638, ZEND_UNSET_OBJ_SPEC_CV_TMPVAR) \ _(1640, ZEND_UNSET_OBJ_SPEC_CV_CV) \ _(1641, ZEND_FE_RESET_R_SPEC_CONST) \ _(1642, ZEND_FE_RESET_R_SPEC_TMP) \ _(1643, ZEND_FE_RESET_R_SPEC_VAR) \ _(1645, ZEND_FE_RESET_R_SPEC_CV) \ _(1646, ZEND_FE_FETCH_R_SPEC_VAR) \ _(1647, ZEND_EXIT_SPEC_CONST) \ _(1648, ZEND_EXIT_SPEC_TMPVAR) \ _(1649, ZEND_EXIT_SPEC_TMPVAR) \ _(1650, ZEND_EXIT_SPEC_UNUSED) \ _(1651, ZEND_EXIT_SPEC_CV) \ _(1652, ZEND_FETCH_R_SPEC_CONST_UNUSED) \ _(1653, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \ _(1654, ZEND_FETCH_R_SPEC_TMPVAR_UNUSED) \ _(1656, ZEND_FETCH_R_SPEC_CV_UNUSED) \ _(1657, ZEND_FETCH_DIM_R_SPEC_CONST_CONST) \ _(1658, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \ _(1659, ZEND_FETCH_DIM_R_SPEC_CONST_TMPVAR) \ _(1661, ZEND_FETCH_DIM_R_SPEC_CONST_CV) \ _(1662, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \ _(1663, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \ _(1664, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \ _(1666, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \ _(1667, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CONST) \ _(1668, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \ _(1669, ZEND_FETCH_DIM_R_SPEC_TMPVAR_TMPVAR) \ _(1671, ZEND_FETCH_DIM_R_SPEC_TMPVAR_CV) \ _(1677, ZEND_FETCH_DIM_R_SPEC_CV_CONST) \ _(1678, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \ _(1679, ZEND_FETCH_DIM_R_SPEC_CV_TMPVAR) \ _(1681, ZEND_FETCH_DIM_R_SPEC_CV_CV) \ _(1682, ZEND_FETCH_OBJ_R_SPEC_CONST_CONST) \ _(1683, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \ _(1684, ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR) \ _(1686, ZEND_FETCH_OBJ_R_SPEC_CONST_CV) \ _(1687, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \ _(1688, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \ _(1689, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \ _(1691, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \ _(1692, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CONST) \ _(1693, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \ _(1694, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_TMPVAR) \ _(1696, ZEND_FETCH_OBJ_R_SPEC_TMPVAR_CV) \ _(1697, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST) \ _(1698, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \ _(1699, ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR) \ _(1701, ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV) \ _(1702, ZEND_FETCH_OBJ_R_SPEC_CV_CONST) \ _(1703, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \ _(1704, ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR) \ _(1706, ZEND_FETCH_OBJ_R_SPEC_CV_CV) \ _(1707, ZEND_FETCH_W_SPEC_CONST_UNUSED) \ _(1708, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \ _(1709, ZEND_FETCH_W_SPEC_TMPVAR_UNUSED) \ _(1711, ZEND_FETCH_W_SPEC_CV_UNUSED) \ _(1722, ZEND_FETCH_DIM_W_SPEC_VAR_CONST) \ _(1723, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \ _(1724, ZEND_FETCH_DIM_W_SPEC_VAR_TMPVAR) \ _(1725, ZEND_FETCH_DIM_W_SPEC_VAR_UNUSED) \ _(1726, ZEND_FETCH_DIM_W_SPEC_VAR_CV) \ _(1732, ZEND_FETCH_DIM_W_SPEC_CV_CONST) \ _(1733, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \ _(1734, ZEND_FETCH_DIM_W_SPEC_CV_TMPVAR) \ _(1735, ZEND_FETCH_DIM_W_SPEC_CV_UNUSED) \ _(1736, ZEND_FETCH_DIM_W_SPEC_CV_CV) \ _(1747, ZEND_FETCH_OBJ_W_SPEC_VAR_CONST) \ _(1748, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \ _(1749, ZEND_FETCH_OBJ_W_SPEC_VAR_TMPVAR) \ _(1751, ZEND_FETCH_OBJ_W_SPEC_VAR_CV) \ _(1752, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CONST) \ _(1753, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \ _(1754, ZEND_FETCH_OBJ_W_SPEC_UNUSED_TMPVAR) \ _(1756, ZEND_FETCH_OBJ_W_SPEC_UNUSED_CV) \ _(1757, ZEND_FETCH_OBJ_W_SPEC_CV_CONST) \ _(1758, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \ _(1759, ZEND_FETCH_OBJ_W_SPEC_CV_TMPVAR) \ _(1761, ZEND_FETCH_OBJ_W_SPEC_CV_CV) \ _(1762, ZEND_FETCH_RW_SPEC_CONST_UNUSED) \ _(1763, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \ _(1764, ZEND_FETCH_RW_SPEC_TMPVAR_UNUSED) \ _(1766, ZEND_FETCH_RW_SPEC_CV_UNUSED) \ _(1777, ZEND_FETCH_DIM_RW_SPEC_VAR_CONST) \ _(1778, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \ _(1779, ZEND_FETCH_DIM_RW_SPEC_VAR_TMPVAR) \ _(1780, ZEND_FETCH_DIM_RW_SPEC_VAR_UNUSED) \ _(1781, ZEND_FETCH_DIM_RW_SPEC_VAR_CV) \ _(1787, ZEND_FETCH_DIM_RW_SPEC_CV_CONST) \ _(1788, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \ _(1789, ZEND_FETCH_DIM_RW_SPEC_CV_TMPVAR) \ _(1790, ZEND_FETCH_DIM_RW_SPEC_CV_UNUSED) \ _(1791, ZEND_FETCH_DIM_RW_SPEC_CV_CV) \ _(1802, ZEND_FETCH_OBJ_RW_SPEC_VAR_CONST) \ _(1803, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \ _(1804, ZEND_FETCH_OBJ_RW_SPEC_VAR_TMPVAR) \ _(1806, ZEND_FETCH_OBJ_RW_SPEC_VAR_CV) \ _(1807, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CONST) \ _(1808, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \ _(1809, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_TMPVAR) \ _(1811, ZEND_FETCH_OBJ_RW_SPEC_UNUSED_CV) \ _(1812, ZEND_FETCH_OBJ_RW_SPEC_CV_CONST) \ _(1813, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \ _(1814, ZEND_FETCH_OBJ_RW_SPEC_CV_TMPVAR) \ _(1816, ZEND_FETCH_OBJ_RW_SPEC_CV_CV) \ _(1817, ZEND_FETCH_IS_SPEC_CONST_UNUSED) \ _(1818, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \ _(1819, ZEND_FETCH_IS_SPEC_TMPVAR_UNUSED) \ _(1821, ZEND_FETCH_IS_SPEC_CV_UNUSED) \ _(1822, ZEND_FETCH_DIM_IS_SPEC_CONST_CONST) \ _(1823, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \ _(1824, ZEND_FETCH_DIM_IS_SPEC_CONST_TMPVAR) \ _(1826, ZEND_FETCH_DIM_IS_SPEC_CONST_CV) \ _(1827, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \ _(1828, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \ _(1829, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \ _(1831, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \ _(1832, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CONST) \ _(1833, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \ _(1834, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_TMPVAR) \ _(1836, ZEND_FETCH_DIM_IS_SPEC_TMPVAR_CV) \ _(1842, ZEND_FETCH_DIM_IS_SPEC_CV_CONST) \ _(1843, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \ _(1844, ZEND_FETCH_DIM_IS_SPEC_CV_TMPVAR) \ _(1846, ZEND_FETCH_DIM_IS_SPEC_CV_CV) \ _(1847, ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST) \ _(1848, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \ _(1849, ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR) \ _(1851, ZEND_FETCH_OBJ_IS_SPEC_CONST_CV) \ _(1852, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \ _(1853, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \ _(1854, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \ _(1856, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \ _(1857, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST) \ _(1858, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \ _(1859, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVAR) \ _(1861, ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV) \ _(1862, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST) \ _(1863, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \ _(1864, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVAR) \ _(1866, ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV) \ _(1867, ZEND_FETCH_OBJ_IS_SPEC_CV_CONST) \ _(1868, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \ _(1869, ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR) \ _(1871, ZEND_FETCH_OBJ_IS_SPEC_CV_CV) \ _(1872, ZEND_FETCH_FUNC_ARG_SPEC_CONST_UNUSED) \ _(1873, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \ _(1874, ZEND_FETCH_FUNC_ARG_SPEC_TMPVAR_UNUSED) \ _(1876, ZEND_FETCH_FUNC_ARG_SPEC_CV_UNUSED) \ _(1877, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CONST) \ _(1878, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \ _(1879, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_TMPVAR) \ _(1880, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_UNUSED) \ _(1881, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CONST_CV) \ _(1882, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CONST) \ _(1883, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \ _(1884, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_TMPVAR) \ _(1885, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_UNUSED) \ _(1886, ZEND_FETCH_DIM_FUNC_ARG_SPEC_TMP_CV) \ _(1887, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CONST) \ _(1888, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \ _(1889, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_TMPVAR) \ _(1890, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_UNUSED) \ _(1891, ZEND_FETCH_DIM_FUNC_ARG_SPEC_VAR_CV) \ _(1897, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CONST) \ _(1898, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \ _(1899, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_TMPVAR) \ _(1900, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_UNUSED) \ _(1901, ZEND_FETCH_DIM_FUNC_ARG_SPEC_CV_CV) \ _(1902, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CONST) \ _(1903, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \ _(1904, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_TMPVAR) \ _(1906, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CONST_CV) \ _(1907, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CONST) \ _(1908, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \ _(1909, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_TMPVAR) \ _(1911, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_TMP_CV) \ _(1912, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CONST) \ _(1913, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \ _(1914, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_TMPVAR) \ _(1916, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_VAR_CV) \ _(1917, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CONST) \ _(1918, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \ _(1919, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_TMPVAR) \ _(1921, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_UNUSED_CV) \ _(1922, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CONST) \ _(1923, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \ _(1924, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_TMPVAR) \ _(1926, ZEND_FETCH_OBJ_FUNC_ARG_SPEC_CV_CV) \ _(1927, ZEND_FETCH_UNSET_SPEC_CONST_UNUSED) \ _(1928, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \ _(1929, ZEND_FETCH_UNSET_SPEC_TMPVAR_UNUSED) \ _(1931, ZEND_FETCH_UNSET_SPEC_CV_UNUSED) \ _(1942, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CONST) \ _(1943, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \ _(1944, ZEND_FETCH_DIM_UNSET_SPEC_VAR_TMPVAR) \ _(1946, ZEND_FETCH_DIM_UNSET_SPEC_VAR_CV) \ _(1952, ZEND_FETCH_DIM_UNSET_SPEC_CV_CONST) \ _(1953, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \ _(1954, ZEND_FETCH_DIM_UNSET_SPEC_CV_TMPVAR) \ _(1956, ZEND_FETCH_DIM_UNSET_SPEC_CV_CV) \ _(1967, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CONST) \ _(1968, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \ _(1969, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_TMPVAR) \ _(1971, ZEND_FETCH_OBJ_UNSET_SPEC_VAR_CV) \ _(1972, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CONST) \ _(1973, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \ _(1974, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_TMPVAR) \ _(1976, ZEND_FETCH_OBJ_UNSET_SPEC_UNUSED_CV) \ _(1977, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CONST) \ _(1978, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \ _(1979, ZEND_FETCH_OBJ_UNSET_SPEC_CV_TMPVAR) \ _(1981, ZEND_FETCH_OBJ_UNSET_SPEC_CV_CV) \ _(1982, ZEND_FETCH_LIST_R_SPEC_CONST_CONST) \ _(1983, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \ _(1984, ZEND_FETCH_LIST_R_SPEC_CONST_TMPVAR) \ _(1986, ZEND_FETCH_LIST_R_SPEC_CONST_CV) \ _(1987, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \ _(1988, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \ _(1989, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \ _(1991, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \ _(1992, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \ _(1993, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \ _(1994, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \ _(1996, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \ _(2002, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CONST) \ _(2003, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \ _(2004, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_TMPVAR) \ _(2006, ZEND_FETCH_LIST_R_SPEC_TMPVARCV_CV) \ _(2007, ZEND_FETCH_CONSTANT_SPEC_UNUSED_CONST) \ _(2008, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED) \ _(2009, ZEND_CHECK_FUNC_ARG_SPEC_UNUSED_QUICK) \ _(2010, ZEND_EXT_STMT_SPEC) \ _(2011, ZEND_EXT_FCALL_BEGIN_SPEC) \ _(2012, ZEND_EXT_FCALL_END_SPEC) \ _(2013, ZEND_EXT_NOP_SPEC) \ _(2014, ZEND_TICKS_SPEC) \ _(2015, ZEND_SEND_VAR_NO_REF_SPEC_VAR) \ _(2016, ZEND_CATCH_SPEC_CONST) \ _(2017, ZEND_THROW_SPEC_CONST) \ _(2018, ZEND_THROW_SPEC_TMP) \ _(2019, ZEND_THROW_SPEC_VAR) \ _(2021, ZEND_THROW_SPEC_CV) \ _(2022, ZEND_FETCH_CLASS_SPEC_UNUSED_CONST) \ _(2023, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \ _(2024, ZEND_FETCH_CLASS_SPEC_UNUSED_TMPVAR) \ _(2025, ZEND_FETCH_CLASS_SPEC_UNUSED_UNUSED) \ _(2026, ZEND_FETCH_CLASS_SPEC_UNUSED_CV) \ _(2027, ZEND_CLONE_SPEC_CONST) \ _(2028, ZEND_CLONE_SPEC_TMPVAR) \ _(2029, ZEND_CLONE_SPEC_TMPVAR) \ _(2030, ZEND_CLONE_SPEC_UNUSED) \ _(2031, ZEND_CLONE_SPEC_CV) \ _(2032, ZEND_RETURN_BY_REF_SPEC_CONST) \ _(2033, ZEND_RETURN_BY_REF_SPEC_TMP) \ _(2034, ZEND_RETURN_BY_REF_SPEC_VAR) \ _(2036, ZEND_RETURN_BY_REF_SPEC_CV) \ _(2037, ZEND_INIT_METHOD_CALL_SPEC_CONST_CONST) \ _(2038, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \ _(2039, ZEND_INIT_METHOD_CALL_SPEC_CONST_TMPVAR) \ _(2041, ZEND_INIT_METHOD_CALL_SPEC_CONST_CV) \ _(2042, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \ _(2043, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \ _(2044, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \ _(2046, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \ _(2047, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CONST) \ _(2048, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \ _(2049, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_TMPVAR) \ _(2051, ZEND_INIT_METHOD_CALL_SPEC_TMPVAR_CV) \ _(2052, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST) \ _(2053, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \ _(2054, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMPVAR) \ _(2056, ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV) \ _(2057, ZEND_INIT_METHOD_CALL_SPEC_CV_CONST) \ _(2058, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \ _(2059, ZEND_INIT_METHOD_CALL_SPEC_CV_TMPVAR) \ _(2061, ZEND_INIT_METHOD_CALL_SPEC_CV_CV) \ _(2062, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CONST) \ _(2063, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \ _(2064, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_TMPVAR) \ _(2065, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_UNUSED) \ _(2066, ZEND_INIT_STATIC_METHOD_CALL_SPEC_CONST_CV) \ _(2072, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CONST) \ _(2073, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \ _(2074, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_TMPVAR) \ _(2075, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_UNUSED) \ _(2076, ZEND_INIT_STATIC_METHOD_CALL_SPEC_VAR_CV) \ _(2077, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CONST) \ _(2078, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \ _(2079, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_TMPVAR) \ _(2080, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_UNUSED) \ _(2081, ZEND_INIT_STATIC_METHOD_CALL_SPEC_UNUSED_CV) \ _(2087, ZEND_ISSET_ISEMPTY_VAR_SPEC_CONST_UNUSED) \ _(2088, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \ _(2089, ZEND_ISSET_ISEMPTY_VAR_SPEC_TMPVAR_UNUSED) \ _(2091, ZEND_ISSET_ISEMPTY_VAR_SPEC_CV_UNUSED) \ _(2092, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CONST) \ _(2093, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \ _(2094, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_TMPVAR) \ _(2096, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CONST_CV) \ _(2097, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \ _(2098, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2099, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2101, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \ _(2102, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CONST) \ _(2103, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2104, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2106, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_TMPVAR_CV) \ _(2112, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CONST) \ _(2113, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \ _(2114, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_TMPVAR) \ _(2116, ZEND_ISSET_ISEMPTY_DIM_OBJ_SPEC_CV_CV) \ _(2117, ZEND_SEND_VAL_EX_SPEC_CONST) \ _(2118, ZEND_SEND_VAL_EX_SPEC_CONST_QUICK) \ _(2119, ZEND_SEND_VAL_EX_SPEC_TMP) \ _(2120, ZEND_SEND_VAL_EX_SPEC_TMP_QUICK) \ _(2129, ZEND_SEND_VAR_SPEC_VAR) \ _(2131, ZEND_SEND_VAR_SPEC_CV) \ _(2132, ZEND_INIT_USER_CALL_SPEC_CONST_CONST) \ _(2133, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \ _(2134, ZEND_INIT_USER_CALL_SPEC_CONST_TMPVAR) \ _(2136, ZEND_INIT_USER_CALL_SPEC_CONST_CV) \ _(2137, ZEND_SEND_ARRAY_SPEC) \ _(2138, ZEND_SEND_USER_SPEC_CONST) \ _(2139, ZEND_SEND_USER_SPEC_TMP) \ _(2140, ZEND_SEND_USER_SPEC_VAR) \ _(2142, ZEND_SEND_USER_SPEC_CV) \ _(2143, ZEND_STRLEN_SPEC_CONST) \ _(2144, ZEND_STRLEN_SPEC_TMPVAR) \ _(2145, ZEND_STRLEN_SPEC_TMPVAR) \ _(2147, ZEND_STRLEN_SPEC_CV) \ _(2148, ZEND_DEFINED_SPEC_CONST) \ _(2149, ZEND_TYPE_CHECK_SPEC_CONST) \ _(2150, ZEND_TYPE_CHECK_SPEC_TMPVAR) \ _(2151, ZEND_TYPE_CHECK_SPEC_TMPVAR) \ _(2153, ZEND_TYPE_CHECK_SPEC_CV) \ _(2154, ZEND_VERIFY_RETURN_TYPE_SPEC_CONST_UNUSED) \ _(2155, ZEND_VERIFY_RETURN_TYPE_SPEC_TMP_UNUSED) \ _(2156, ZEND_VERIFY_RETURN_TYPE_SPEC_VAR_UNUSED) \ _(2157, ZEND_VERIFY_RETURN_TYPE_SPEC_UNUSED_UNUSED) \ _(2158, ZEND_VERIFY_RETURN_TYPE_SPEC_CV_UNUSED) \ _(2159, ZEND_FE_RESET_RW_SPEC_CONST) \ _(2160, ZEND_FE_RESET_RW_SPEC_TMP) \ _(2161, ZEND_FE_RESET_RW_SPEC_VAR) \ _(2163, ZEND_FE_RESET_RW_SPEC_CV) \ _(2164, ZEND_FE_FETCH_RW_SPEC_VAR) \ _(2165, ZEND_FE_FREE_SPEC_TMPVAR) \ _(2166, ZEND_INIT_DYNAMIC_CALL_SPEC_CONST) \ _(2167, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \ _(2168, ZEND_INIT_DYNAMIC_CALL_SPEC_TMPVAR) \ _(2170, ZEND_INIT_DYNAMIC_CALL_SPEC_CV) \ _(2171, ZEND_DO_ICALL_SPEC_RETVAL_UNUSED) \ _(2172, ZEND_DO_ICALL_SPEC_RETVAL_USED) \ _(2173, ZEND_DO_UCALL_SPEC_RETVAL_UNUSED) \ _(2174, ZEND_DO_UCALL_SPEC_RETVAL_USED) \ _(2175, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_UNUSED) \ _(2176, ZEND_DO_FCALL_BY_NAME_SPEC_RETVAL_USED) \ _(2187, ZEND_PRE_INC_OBJ_SPEC_VAR_CONST) \ _(2188, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \ _(2189, ZEND_PRE_INC_OBJ_SPEC_VAR_TMPVAR) \ _(2191, ZEND_PRE_INC_OBJ_SPEC_VAR_CV) \ _(2192, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CONST) \ _(2193, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2194, ZEND_PRE_INC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2196, ZEND_PRE_INC_OBJ_SPEC_UNUSED_CV) \ _(2197, ZEND_PRE_INC_OBJ_SPEC_CV_CONST) \ _(2198, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \ _(2199, ZEND_PRE_INC_OBJ_SPEC_CV_TMPVAR) \ _(2201, ZEND_PRE_INC_OBJ_SPEC_CV_CV) \ _(2212, ZEND_PRE_DEC_OBJ_SPEC_VAR_CONST) \ _(2213, ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR) \ _(2214, ZEND_PRE_DEC_OBJ_SPEC_VAR_TMPVAR) \ _(2216, ZEND_PRE_DEC_OBJ_SPEC_VAR_CV) \ _(2217, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CONST) \ _(2218, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2219, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2221, ZEND_PRE_DEC_OBJ_SPEC_UNUSED_CV) \ _(2222, ZEND_PRE_DEC_OBJ_SPEC_CV_CONST) \ _(2223, ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR) \ _(2224, ZEND_PRE_DEC_OBJ_SPEC_CV_TMPVAR) \ _(2226, ZEND_PRE_DEC_OBJ_SPEC_CV_CV) \ _(2237, ZEND_POST_INC_OBJ_SPEC_VAR_CONST) \ _(2238, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \ _(2239, ZEND_POST_INC_OBJ_SPEC_VAR_TMPVAR) \ _(2241, ZEND_POST_INC_OBJ_SPEC_VAR_CV) \ _(2242, ZEND_POST_INC_OBJ_SPEC_UNUSED_CONST) \ _(2243, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2244, ZEND_POST_INC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2246, ZEND_POST_INC_OBJ_SPEC_UNUSED_CV) \ _(2247, ZEND_POST_INC_OBJ_SPEC_CV_CONST) \ _(2248, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \ _(2249, ZEND_POST_INC_OBJ_SPEC_CV_TMPVAR) \ _(2251, ZEND_POST_INC_OBJ_SPEC_CV_CV) \ _(2262, ZEND_POST_DEC_OBJ_SPEC_VAR_CONST) \ _(2263, ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR) \ _(2264, ZEND_POST_DEC_OBJ_SPEC_VAR_TMPVAR) \ _(2266, ZEND_POST_DEC_OBJ_SPEC_VAR_CV) \ _(2267, ZEND_POST_DEC_OBJ_SPEC_UNUSED_CONST) \ _(2268, ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2269, ZEND_POST_DEC_OBJ_SPEC_UNUSED_TMPVAR) \ _(2271, ZEND_POST_DEC_OBJ_SPEC_UNUSED_CV) \ _(2272, ZEND_POST_DEC_OBJ_SPEC_CV_CONST) \ _(2273, ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR) \ _(2274, ZEND_POST_DEC_OBJ_SPEC_CV_TMPVAR) \ _(2276, ZEND_POST_DEC_OBJ_SPEC_CV_CV) \ _(2327, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CONST) \ _(2328, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_TMP) \ _(2329, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_VAR) \ _(2331, ZEND_ASSIGN_OBJ_SPEC_VAR_CONST_OP_DATA_CV) \ _(2332, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \ _(2333, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \ _(2334, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \ _(2336, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \ _(2337, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CONST) \ _(2338, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_TMP) \ _(2339, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_VAR) \ _(2341, ZEND_ASSIGN_OBJ_SPEC_VAR_TMPVAR_OP_DATA_CV) \ _(2347, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CONST) \ _(2348, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_TMP) \ _(2349, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_VAR) \ _(2351, ZEND_ASSIGN_OBJ_SPEC_VAR_CV_OP_DATA_CV) \ _(2352, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CONST) \ _(2353, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_TMP) \ _(2354, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_VAR) \ _(2356, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CONST_OP_DATA_CV) \ _(2357, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST) \ _(2358, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP) \ _(2359, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \ _(2361, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV) \ _(2362, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CONST) \ _(2363, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_TMP) \ _(2364, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_VAR) \ _(2366, ZEND_ASSIGN_OBJ_SPEC_UNUSED_TMPVAR_OP_DATA_CV) \ _(2372, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CONST) \ _(2373, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_TMP) \ _(2374, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_VAR) \ _(2376, ZEND_ASSIGN_OBJ_SPEC_UNUSED_CV_OP_DATA_CV) \ _(2377, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CONST) \ _(2378, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_TMP) \ _(2379, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_VAR) \ _(2381, ZEND_ASSIGN_OBJ_SPEC_CV_CONST_OP_DATA_CV) \ _(2382, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST) \ _(2383, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP) \ _(2384, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR) \ _(2386, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV) \ _(2387, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CONST) \ _(2388, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_TMP) \ _(2389, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_VAR) \ _(2391, ZEND_ASSIGN_OBJ_SPEC_CV_TMPVAR_OP_DATA_CV) \ _(2397, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CONST) \ _(2398, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_TMP) \ _(2399, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_VAR) \ _(2401, ZEND_ASSIGN_OBJ_SPEC_CV_CV_OP_DATA_CV) \ _(2408, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \ _(2410, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \ _(2411, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \ _(2413, ZEND_INSTANCEOF_SPEC_TMPVAR_CONST) \ _(2415, ZEND_INSTANCEOF_SPEC_TMPVAR_VAR) \ _(2416, ZEND_INSTANCEOF_SPEC_TMPVAR_UNUSED) \ _(2423, ZEND_INSTANCEOF_SPEC_CV_CONST) \ _(2425, ZEND_INSTANCEOF_SPEC_CV_VAR) \ _(2426, ZEND_INSTANCEOF_SPEC_CV_UNUSED) \ _(2428, ZEND_DECLARE_CLASS_SPEC_CONST) \ _(2429, ZEND_DECLARE_INHERITED_CLASS_SPEC_CONST_CONST) \ _(2430, ZEND_DECLARE_FUNCTION_SPEC) \ _(2431, ZEND_YIELD_FROM_SPEC_CONST) \ _(2432, ZEND_YIELD_FROM_SPEC_TMP) \ _(2433, ZEND_YIELD_FROM_SPEC_VAR) \ _(2435, ZEND_YIELD_FROM_SPEC_CV) \ _(2436, ZEND_DECLARE_CONST_SPEC_CONST_CONST) \ _(2437, ZEND_ADD_INTERFACE_SPEC_CONST) \ _(2438, ZEND_DECLARE_INHERITED_CLASS_DELAYED_SPEC_CONST_CONST) \ _(2439, ZEND_VERIFY_ABSTRACT_CLASS_SPEC) \ _(2490, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CONST) \ _(2491, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_TMP) \ _(2492, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_VAR) \ _(2494, ZEND_ASSIGN_DIM_SPEC_VAR_CONST_OP_DATA_CV) \ _(2495, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST) \ _(2496, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP) \ _(2497, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR) \ _(2499, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV) \ _(2500, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CONST) \ _(2501, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_TMP) \ _(2502, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_VAR) \ _(2504, ZEND_ASSIGN_DIM_SPEC_VAR_TMPVAR_OP_DATA_CV) \ _(2505, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CONST) \ _(2506, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_TMP) \ _(2507, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_VAR) \ _(2509, ZEND_ASSIGN_DIM_SPEC_VAR_UNUSED_OP_DATA_CV) \ _(2510, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CONST) \ _(2511, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_TMP) \ _(2512, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_VAR) \ _(2514, ZEND_ASSIGN_DIM_SPEC_VAR_CV_OP_DATA_CV) \ _(2540, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CONST) \ _(2541, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_TMP) \ _(2542, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_VAR) \ _(2544, ZEND_ASSIGN_DIM_SPEC_CV_CONST_OP_DATA_CV) \ _(2545, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST) \ _(2546, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP) \ _(2547, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR) \ _(2549, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV) \ _(2550, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CONST) \ _(2551, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_TMP) \ _(2552, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_VAR) \ _(2554, ZEND_ASSIGN_DIM_SPEC_CV_TMPVAR_OP_DATA_CV) \ _(2555, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CONST) \ _(2556, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_TMP) \ _(2557, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_VAR) \ _(2559, ZEND_ASSIGN_DIM_SPEC_CV_UNUSED_OP_DATA_CV) \ _(2560, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CONST) \ _(2561, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_TMP) \ _(2562, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_VAR) \ _(2564, ZEND_ASSIGN_DIM_SPEC_CV_CV_OP_DATA_CV) \ _(2565, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CONST) \ _(2566, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \ _(2567, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_TMPVAR) \ _(2569, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CONST_CV) \ _(2570, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \ _(2571, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2572, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2574, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \ _(2575, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CONST) \ _(2576, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2577, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_TMPVAR) \ _(2579, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_TMPVAR_CV) \ _(2580, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CONST) \ _(2581, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \ _(2582, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_TMPVAR) \ _(2584, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_UNUSED_CV) \ _(2585, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CONST) \ _(2586, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \ _(2587, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_TMPVAR) \ _(2589, ZEND_ISSET_ISEMPTY_PROP_OBJ_SPEC_CV_CV) \ _(2590, ZEND_HANDLE_EXCEPTION_SPEC) \ _(2591, ZEND_USER_OPCODE_SPEC) \ _(2592, ZEND_ASSERT_CHECK_SPEC) \ _(2593, ZEND_JMP_SET_SPEC_CONST) \ _(2594, ZEND_JMP_SET_SPEC_TMP) \ _(2595, ZEND_JMP_SET_SPEC_VAR) \ _(2597, ZEND_JMP_SET_SPEC_CV) \ _(2598, ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED) \ _(2599, ZEND_ADD_TRAIT_SPEC) \ _(2600, ZEND_BIND_TRAITS_SPEC) \ _(2601, ZEND_SEPARATE_SPEC_VAR_UNUSED) \ _(2602, ZEND_FETCH_CLASS_NAME_SPEC_UNUSED) \ _(2603, ZEND_CALL_TRAMPOLINE_SPEC) \ _(2604, ZEND_DISCARD_EXCEPTION_SPEC) \ _(2605, ZEND_YIELD_SPEC_CONST_CONST) \ _(2606, ZEND_YIELD_SPEC_CONST_TMP) \ _(2607, ZEND_YIELD_SPEC_CONST_VAR) \ _(2608, ZEND_YIELD_SPEC_CONST_UNUSED) \ _(2609, ZEND_YIELD_SPEC_CONST_CV) \ _(2610, ZEND_YIELD_SPEC_TMP_CONST) \ _(2611, ZEND_YIELD_SPEC_TMP_TMP) \ _(2612, ZEND_YIELD_SPEC_TMP_VAR) \ _(2613, ZEND_YIELD_SPEC_TMP_UNUSED) \ _(2614, ZEND_YIELD_SPEC_TMP_CV) \ _(2615, ZEND_YIELD_SPEC_VAR_CONST) \ _(2616, ZEND_YIELD_SPEC_VAR_TMP) \ _(2617, ZEND_YIELD_SPEC_VAR_VAR) \ _(2618, ZEND_YIELD_SPEC_VAR_UNUSED) \ _(2619, ZEND_YIELD_SPEC_VAR_CV) \ _(2620, ZEND_YIELD_SPEC_UNUSED_CONST) \ _(2621, ZEND_YIELD_SPEC_UNUSED_TMP) \ _(2622, ZEND_YIELD_SPEC_UNUSED_VAR) \ _(2623, ZEND_YIELD_SPEC_UNUSED_UNUSED) \ _(2624, ZEND_YIELD_SPEC_UNUSED_CV) \ _(2625, ZEND_YIELD_SPEC_CV_CONST) \ _(2626, ZEND_YIELD_SPEC_CV_TMP) \ _(2627, ZEND_YIELD_SPEC_CV_VAR) \ _(2628, ZEND_YIELD_SPEC_CV_UNUSED) \ _(2629, ZEND_YIELD_SPEC_CV_CV) \ _(2630, ZEND_GENERATOR_RETURN_SPEC_CONST) \ _(2631, ZEND_GENERATOR_RETURN_SPEC_TMP) \ _(2632, ZEND_GENERATOR_RETURN_SPEC_VAR) \ _(2634, ZEND_GENERATOR_RETURN_SPEC_CV) \ _(2635, ZEND_FAST_CALL_SPEC) \ _(2636, ZEND_FAST_RET_SPEC) \ _(2637, ZEND_RECV_VARIADIC_SPEC_UNUSED) \ _(2638, ZEND_SEND_UNPACK_SPEC) \ _(2639, ZEND_POW_SPEC_CONST_CONST) \ _(2640, ZEND_POW_SPEC_CONST_TMPVAR) \ _(2641, ZEND_POW_SPEC_CONST_TMPVAR) \ _(2643, ZEND_POW_SPEC_CONST_CV) \ _(2644, ZEND_POW_SPEC_TMPVAR_CONST) \ _(2645, ZEND_POW_SPEC_TMPVAR_TMPVAR) \ _(2646, ZEND_POW_SPEC_TMPVAR_TMPVAR) \ _(2648, ZEND_POW_SPEC_TMPVAR_CV) \ _(2649, ZEND_POW_SPEC_TMPVAR_CONST) \ _(2650, ZEND_POW_SPEC_TMPVAR_TMPVAR) \ _(2651, ZEND_POW_SPEC_TMPVAR_TMPVAR) \ _(2653, ZEND_POW_SPEC_TMPVAR_CV) \ _(2659, ZEND_POW_SPEC_CV_CONST) \ _(2660, ZEND_POW_SPEC_CV_TMPVAR) \ _(2661, ZEND_POW_SPEC_CV_TMPVAR) \ _(2663, ZEND_POW_SPEC_CV_CV) \ _(2694, ZEND_ASSIGN_POW_SPEC_VAR_CONST) \ _(2695, ZEND_ASSIGN_POW_SPEC_VAR_CONST_DIM) \ _(2696, ZEND_ASSIGN_POW_SPEC_VAR_CONST_OBJ) \ _(2697, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR) \ _(2698, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM) \ _(2699, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ) \ _(2700, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR) \ _(2701, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_DIM) \ _(2702, ZEND_ASSIGN_POW_SPEC_VAR_TMPVAR_OBJ) \ _(2704, ZEND_ASSIGN_POW_SPEC_VAR_UNUSED_DIM) \ _(2706, ZEND_ASSIGN_POW_SPEC_VAR_CV) \ _(2707, ZEND_ASSIGN_POW_SPEC_VAR_CV_DIM) \ _(2708, ZEND_ASSIGN_POW_SPEC_VAR_CV_OBJ) \ _(2711, ZEND_ASSIGN_POW_SPEC_UNUSED_CONST_OBJ) \ _(2714, ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ) \ _(2717, ZEND_ASSIGN_POW_SPEC_UNUSED_TMPVAR_OBJ) \ _(2723, ZEND_ASSIGN_POW_SPEC_UNUSED_CV_OBJ) \ _(2724, ZEND_ASSIGN_POW_SPEC_CV_CONST) \ _(2725, ZEND_ASSIGN_POW_SPEC_CV_CONST_DIM) \ _(2726, ZEND_ASSIGN_POW_SPEC_CV_CONST_OBJ) \ _(2727, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR) \ _(2728, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM) \ _(2729, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ) \ _(2730, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR) \ _(2731, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_DIM) \ _(2732, ZEND_ASSIGN_POW_SPEC_CV_TMPVAR_OBJ) \ _(2734, ZEND_ASSIGN_POW_SPEC_CV_UNUSED_DIM) \ _(2736, ZEND_ASSIGN_POW_SPEC_CV_CV) \ _(2737, ZEND_ASSIGN_POW_SPEC_CV_CV_DIM) \ _(2738, ZEND_ASSIGN_POW_SPEC_CV_CV_OBJ) \ _(2739, ZEND_BIND_GLOBAL_SPEC_CV_CONST) \ _(2740, ZEND_COALESCE_SPEC_CONST) \ _(2741, ZEND_COALESCE_SPEC_TMPVAR) \ _(2742, ZEND_COALESCE_SPEC_TMPVAR) \ _(2744, ZEND_COALESCE_SPEC_CV) \ _(2745, ZEND_SPACESHIP_SPEC_CONST_CONST) \ _(2746, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \ _(2747, ZEND_SPACESHIP_SPEC_CONST_TMPVAR) \ _(2749, ZEND_SPACESHIP_SPEC_CONST_CV) \ _(2750, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \ _(2751, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ _(2752, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ _(2754, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \ _(2755, ZEND_SPACESHIP_SPEC_TMPVAR_CONST) \ _(2756, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ _(2757, ZEND_SPACESHIP_SPEC_TMPVAR_TMPVAR) \ _(2759, ZEND_SPACESHIP_SPEC_TMPVAR_CV) \ _(2765, ZEND_SPACESHIP_SPEC_CV_CONST) \ _(2766, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \ _(2767, ZEND_SPACESHIP_SPEC_CV_TMPVAR) \ _(2769, ZEND_SPACESHIP_SPEC_CV_CV) \ _(2770, ZEND_DECLARE_ANON_CLASS_SPEC) \ _(2771, ZEND_DECLARE_ANON_INHERITED_CLASS_SPEC_CONST_CONST) \ _(2772, ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_CONST) \ _(2774, ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_VAR) \ _(2775, ZEND_FETCH_STATIC_PROP_R_SPEC_CONST_UNUSED) \ _(2777, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST) \ _(2779, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR) \ _(2780, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED) \ _(2782, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_CONST) \ _(2784, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_VAR) \ _(2785, ZEND_FETCH_STATIC_PROP_R_SPEC_TMPVAR_UNUSED) \ _(2792, ZEND_FETCH_STATIC_PROP_R_SPEC_CV_CONST) \ _(2794, ZEND_FETCH_STATIC_PROP_R_SPEC_CV_VAR) \ _(2795, ZEND_FETCH_STATIC_PROP_R_SPEC_CV_UNUSED) \ _(2797, ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_CONST) \ _(2799, ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_VAR) \ _(2800, ZEND_FETCH_STATIC_PROP_W_SPEC_CONST_UNUSED) \ _(2802, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST) \ _(2804, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR) \ _(2805, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED) \ _(2807, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_CONST) \ _(2809, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_VAR) \ _(2810, ZEND_FETCH_STATIC_PROP_W_SPEC_TMPVAR_UNUSED) \ _(2817, ZEND_FETCH_STATIC_PROP_W_SPEC_CV_CONST) \ _(2819, ZEND_FETCH_STATIC_PROP_W_SPEC_CV_VAR) \ _(2820, ZEND_FETCH_STATIC_PROP_W_SPEC_CV_UNUSED) \ _(2822, ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_CONST) \ _(2824, ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_VAR) \ _(2825, ZEND_FETCH_STATIC_PROP_RW_SPEC_CONST_UNUSED) \ _(2827, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST) \ _(2829, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR) \ _(2830, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED) \ _(2832, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_CONST) \ _(2834, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_VAR) \ _(2835, ZEND_FETCH_STATIC_PROP_RW_SPEC_TMPVAR_UNUSED) \ _(2842, ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_CONST) \ _(2844, ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_VAR) \ _(2845, ZEND_FETCH_STATIC_PROP_RW_SPEC_CV_UNUSED) \ _(2847, ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_CONST) \ _(2849, ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_VAR) \ _(2850, ZEND_FETCH_STATIC_PROP_IS_SPEC_CONST_UNUSED) \ _(2852, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST) \ _(2854, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR) \ _(2855, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED) \ _(2857, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_CONST) \ _(2859, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_VAR) \ _(2860, ZEND_FETCH_STATIC_PROP_IS_SPEC_TMPVAR_UNUSED) \ _(2867, ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_CONST) \ _(2869, ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_VAR) \ _(2870, ZEND_FETCH_STATIC_PROP_IS_SPEC_CV_UNUSED) \ _(2872, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_CONST) \ _(2874, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_VAR) \ _(2875, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CONST_UNUSED) \ _(2877, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST) \ _(2879, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR) \ _(2880, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED) \ _(2882, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_CONST) \ _(2884, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_VAR) \ _(2885, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_TMPVAR_UNUSED) \ _(2892, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_CONST) \ _(2894, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_VAR) \ _(2895, ZEND_FETCH_STATIC_PROP_FUNC_ARG_SPEC_CV_UNUSED) \ _(2897, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_CONST) \ _(2899, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_VAR) \ _(2900, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CONST_UNUSED) \ _(2902, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST) \ _(2904, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR) \ _(2905, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED) \ _(2907, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_CONST) \ _(2909, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_VAR) \ _(2910, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_TMPVAR_UNUSED) \ _(2917, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_CONST) \ _(2919, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_VAR) \ _(2920, ZEND_FETCH_STATIC_PROP_UNSET_SPEC_CV_UNUSED) \ _(2922, ZEND_UNSET_STATIC_PROP_SPEC_CONST_CONST) \ _(2924, ZEND_UNSET_STATIC_PROP_SPEC_CONST_VAR) \ _(2925, ZEND_UNSET_STATIC_PROP_SPEC_CONST_UNUSED) \ _(2927, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST) \ _(2929, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR) \ _(2930, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED) \ _(2932, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_CONST) \ _(2934, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_VAR) \ _(2935, ZEND_UNSET_STATIC_PROP_SPEC_TMPVAR_UNUSED) \ _(2942, ZEND_UNSET_STATIC_PROP_SPEC_CV_CONST) \ _(2944, ZEND_UNSET_STATIC_PROP_SPEC_CV_VAR) \ _(2945, ZEND_UNSET_STATIC_PROP_SPEC_CV_UNUSED) \ _(2947, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_CONST) \ _(2949, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_VAR) \ _(2950, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CONST_UNUSED) \ _(2952, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST) \ _(2954, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR) \ _(2955, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED) \ _(2957, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_CONST) \ _(2959, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_VAR) \ _(2960, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_TMPVAR_UNUSED) \ _(2967, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_CONST) \ _(2969, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_VAR) \ _(2970, ZEND_ISSET_ISEMPTY_STATIC_PROP_SPEC_CV_UNUSED) \ _(2972, ZEND_FETCH_CLASS_CONSTANT_SPEC_CONST_CONST) \ _(2974, ZEND_FETCH_CLASS_CONSTANT_SPEC_VAR_CONST) \ _(2975, ZEND_FETCH_CLASS_CONSTANT_SPEC_UNUSED_CONST) \ _(2977, ZEND_BIND_LEXICAL_SPEC_TMP_CV) \ _(2978, ZEND_BIND_STATIC_SPEC_CV_CONST) \ _(2979, ZEND_FETCH_THIS_SPEC_UNUSED_UNUSED) \ _(2980, ZEND_SEND_FUNC_ARG_SPEC_VAR) \ _(2981, ZEND_ISSET_ISEMPTY_THIS_SPEC_UNUSED_UNUSED) \ _(2982, ZEND_SWITCH_LONG_SPEC_CONST_CONST) \ _(2983, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ _(2984, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ _(2986, ZEND_SWITCH_LONG_SPEC_TMPVARCV_CONST) \ _(2987, ZEND_SWITCH_STRING_SPEC_CONST_CONST) \ _(2988, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ _(2989, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ _(2991, ZEND_SWITCH_STRING_SPEC_TMPVARCV_CONST) \ _(2992, ZEND_IN_ARRAY_SPEC_CONST_CONST) \ _(2993, ZEND_IN_ARRAY_SPEC_TMP_CONST) \ _(2994, ZEND_IN_ARRAY_SPEC_VAR_CONST) \ _(2996, ZEND_IN_ARRAY_SPEC_CV_CONST) \ _(2997, ZEND_COUNT_SPEC_CONST_UNUSED) \ _(2998, ZEND_COUNT_SPEC_TMP_UNUSED) \ _(2999, ZEND_COUNT_SPEC_VAR_UNUSED) \ _(3001, ZEND_COUNT_SPEC_CV_UNUSED) \ _(3002, ZEND_GET_CLASS_SPEC_CONST_UNUSED) \ _(3003, ZEND_GET_CLASS_SPEC_TMP_UNUSED) \ _(3004, ZEND_GET_CLASS_SPEC_VAR_UNUSED) \ _(3005, ZEND_GET_CLASS_SPEC_UNUSED_UNUSED) \ _(3006, ZEND_GET_CLASS_SPEC_CV_UNUSED) \ _(3007, ZEND_GET_CALLED_CLASS_SPEC_UNUSED_UNUSED) \ _(3008, ZEND_GET_TYPE_SPEC_CONST_UNUSED) \ _(3009, ZEND_GET_TYPE_SPEC_TMP_UNUSED) \ _(3010, ZEND_GET_TYPE_SPEC_VAR_UNUSED) \ _(3012, ZEND_GET_TYPE_SPEC_CV_UNUSED) \ _(3013, ZEND_FUNC_NUM_ARGS_SPEC_UNUSED_UNUSED) \ _(3014, ZEND_FUNC_GET_ARGS_SPEC_CONST_UNUSED) \ _(3017, ZEND_FUNC_GET_ARGS_SPEC_UNUSED_UNUSED) \ _(3019, ZEND_UNSET_CV_SPEC_CV_UNUSED) \ _(3020, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_SET) \ _(3021, ZEND_ISSET_ISEMPTY_CV_SPEC_CV_UNUSED_EMPTY) \ _(3022, ZEND_FETCH_LIST_W_SPEC_VAR_CONST) \ _(3023, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \ _(3024, ZEND_FETCH_LIST_W_SPEC_VAR_TMPVAR) \ _(3026, ZEND_FETCH_LIST_W_SPEC_VAR_CV) \ _(3027, ZEND_JMP_FORWARD_SPEC) \ _(3033, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3034, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3035, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3037, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3038, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3039, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3040, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3042, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3048, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3049, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3050, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3052, ZEND_ADD_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3058, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ _(3059, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3060, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3062, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3063, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ _(3064, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3065, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3067, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3073, ZEND_ADD_LONG_SPEC_TMPVARCV_CONST) \ _(3074, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3075, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3077, ZEND_ADD_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3083, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3084, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3085, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3087, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3088, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3089, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3090, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3092, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3098, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3099, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3100, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3102, ZEND_ADD_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3104, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ _(3105, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ _(3107, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_CONST_TMPVARCV) \ _(3108, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3109, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3110, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3112, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3113, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3114, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3115, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3117, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3123, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3124, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3125, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3127, ZEND_SUB_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3129, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ _(3130, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ _(3132, ZEND_SUB_LONG_SPEC_CONST_TMPVARCV) \ _(3133, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ _(3134, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3135, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3137, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3138, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ _(3139, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3140, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3142, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3148, ZEND_SUB_LONG_SPEC_TMPVARCV_CONST) \ _(3149, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3150, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3152, ZEND_SUB_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3154, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3155, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3157, ZEND_SUB_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3158, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3159, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3160, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3162, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3163, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3164, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3165, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3167, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3173, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3174, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3175, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3177, ZEND_SUB_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3183, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3184, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3185, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3187, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3188, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3189, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3190, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3192, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3198, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_CONST) \ _(3199, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3200, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3202, ZEND_MUL_LONG_NO_OVERFLOW_SPEC_TMPVARCV_TMPVARCV) \ _(3208, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ _(3209, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3210, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3212, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3213, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ _(3214, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3215, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3217, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3223, ZEND_MUL_LONG_SPEC_TMPVARCV_CONST) \ _(3224, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3225, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3227, ZEND_MUL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3233, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3234, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3235, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3237, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3238, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3239, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3240, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3242, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3248, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3249, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3250, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3252, ZEND_MUL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3268, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3269, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3270, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3271, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3272, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3273, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3274, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3275, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3276, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3280, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3281, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3282, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3283, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3284, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3285, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3286, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3287, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3288, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3289, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3290, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3291, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3295, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3296, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3297, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3313, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3314, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3315, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3316, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3317, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3318, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3319, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3320, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3321, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3325, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3326, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3327, ZEND_IS_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3343, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3344, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3345, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3346, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3347, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3348, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3349, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3350, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3351, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3355, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3356, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3357, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3358, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3359, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3360, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3361, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3362, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3363, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3364, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3365, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3366, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3370, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3371, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3372, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3388, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3389, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3390, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3391, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3392, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3393, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3394, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3395, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3396, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3400, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3401, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3402, ZEND_IS_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3418, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3419, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3420, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3421, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3422, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3423, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3424, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3425, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3426, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3430, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3431, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3432, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3433, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3434, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3435, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3436, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3437, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3438, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3439, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3440, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3441, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3445, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3446, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3447, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3463, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3464, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3465, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3466, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3467, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3468, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3469, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3470, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3471, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3475, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3476, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3477, ZEND_IS_NOT_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3493, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3494, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3495, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3496, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3497, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3498, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3499, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3500, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3501, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3505, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3506, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3507, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3508, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3509, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3510, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3511, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3512, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3513, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3514, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3515, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3516, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3520, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3521, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3522, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3538, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3539, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3540, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3541, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3542, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3543, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3544, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3545, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3546, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3550, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3551, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3552, ZEND_IS_NOT_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3556, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ _(3557, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ _(3558, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3559, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ _(3560, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ _(3561, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3565, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV) \ _(3566, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ _(3567, ZEND_IS_SMALLER_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3568, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ _(3569, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3570, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3571, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3572, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3573, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3574, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3575, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3576, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3580, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3581, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3582, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3583, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ _(3584, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3585, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3586, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3587, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3588, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3589, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3590, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3591, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3595, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3596, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3597, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3613, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST) \ _(3614, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3615, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3616, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3617, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3618, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3619, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3620, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3621, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3625, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3626, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3627, ZEND_IS_SMALLER_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3631, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3632, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ _(3633, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3634, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3635, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ _(3636, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3640, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3641, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ _(3642, ZEND_IS_SMALLER_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3643, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3644, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3645, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3646, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3647, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3648, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3649, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3650, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3651, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3655, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3656, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3657, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3658, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3659, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3660, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3661, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3662, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3663, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3664, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3665, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3666, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3670, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3671, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3672, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3688, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3689, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3690, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3691, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3692, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3693, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3694, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3695, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3696, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3700, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3701, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3702, ZEND_IS_SMALLER_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3706, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ _(3707, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ _(3708, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3709, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ _(3710, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ _(3711, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3715, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV) \ _(3716, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPZ) \ _(3717, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3718, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3719, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3720, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3721, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3722, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3723, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3724, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3725, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3726, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3730, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3731, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3732, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3733, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3734, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3735, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3736, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3737, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3738, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3739, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3740, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3741, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3745, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3746, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3747, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3763, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST) \ _(3764, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPZ) \ _(3765, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3766, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3767, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3768, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3769, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3770, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3771, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3775, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV) \ _(3776, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3777, ZEND_IS_SMALLER_OR_EQUAL_LONG_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3781, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3782, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ _(3783, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3784, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3785, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ _(3786, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3790, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV) \ _(3791, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPZ) \ _(3792, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_CONST_TMPVARCV_JMPNZ) \ _(3793, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3794, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3795, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3796, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3797, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3798, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3799, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3800, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3801, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3805, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3806, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3807, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3808, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3809, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3810, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3811, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3812, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3813, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3814, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3815, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3816, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3820, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3821, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3822, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3838, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST) \ _(3839, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPZ) \ _(3840, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_CONST_JMPNZ) \ _(3841, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3842, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3843, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3844, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3845, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3846, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3850, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV) \ _(3851, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPZ) \ _(3852, ZEND_IS_SMALLER_OR_EQUAL_DOUBLE_SPEC_TMPVARCV_TMPVARCV_JMPNZ) \ _(3853, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \ _(3854, ZEND_PRE_INC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \ _(3855, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_UNUSED) \ _(3856, ZEND_PRE_INC_LONG_SPEC_CV_RETVAL_USED) \ _(3857, ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED) \ _(3858, ZEND_PRE_INC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED) \ _(3859, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_UNUSED) \ _(3860, ZEND_PRE_DEC_LONG_NO_OVERFLOW_SPEC_CV_RETVAL_USED) \ _(3861, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_UNUSED) \ _(3862, ZEND_PRE_DEC_LONG_SPEC_CV_RETVAL_USED) \ _(3863, ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_UNUSED) \ _(3864, ZEND_PRE_DEC_LONG_OR_DOUBLE_SPEC_CV_RETVAL_USED) \ _(3865, ZEND_POST_INC_LONG_NO_OVERFLOW_SPEC_CV) \ _(3866, ZEND_POST_INC_LONG_SPEC_CV) \ _(3867, ZEND_POST_INC_LONG_OR_DOUBLE_SPEC_CV) \ _(3868, ZEND_POST_DEC_LONG_NO_OVERFLOW_SPEC_CV) \ _(3869, ZEND_POST_DEC_LONG_SPEC_CV) \ _(3870, ZEND_POST_DEC_LONG_OR_DOUBLE_SPEC_CV) \ _(3871, ZEND_QM_ASSIGN_DOUBLE_SPEC_CONST) \ _(3872, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ _(3873, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ _(3875, ZEND_QM_ASSIGN_DOUBLE_SPEC_TMPVARCV) \ _(3876, ZEND_QM_ASSIGN_NOREF_SPEC_CONST) \ _(3877, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ _(3878, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ _(3880, ZEND_QM_ASSIGN_NOREF_SPEC_TMPVARCV) \ _(3882, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ _(3883, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ _(3885, ZEND_FETCH_DIM_R_INDEX_SPEC_CONST_TMPVARCV) \ _(3886, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \ _(3887, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3888, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3890, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3891, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_CONST) \ _(3892, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3893, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3895, ZEND_FETCH_DIM_R_INDEX_SPEC_TMPVAR_TMPVARCV) \ _(3901, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_CONST) \ _(3902, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ _(3903, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ _(3905, ZEND_FETCH_DIM_R_INDEX_SPEC_CV_TMPVARCV) \ _(3908, ZEND_SEND_VAR_SIMPLE_SPEC_VAR) \ _(3910, ZEND_SEND_VAR_SIMPLE_SPEC_CV) \ _(3913, ZEND_SEND_VAR_EX_SIMPLE_SPEC_VAR) \ _(3915, ZEND_SEND_VAR_EX_SIMPLE_SPEC_CV) \ _(3916, ZEND_SEND_VAL_SIMPLE_SPEC_CONST) \ _(3917, ZEND_SEND_VAL_EX_SIMPLE_SPEC_CONST) \ _(3918, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_UNUSED) \ _(3919, ZEND_FE_FETCH_R_SIMPLE_SPEC_VAR_CV_RETVAL_USED) \ _(3919+1, ZEND_NULL) PK!r ext/standard/hrtime.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Author: Niklas Keller | | Author: Anatol Belski | +----------------------------------------------------------------------+ */ #ifndef HRTIME_H #define HRTIME_H #define PHP_HRTIME_PLATFORM_POSIX 0 #define PHP_HRTIME_PLATFORM_WINDOWS 0 #define PHP_HRTIME_PLATFORM_APPLE 0 #define PHP_HRTIME_PLATFORM_HPUX 0 #define PHP_HRTIME_PLATFORM_AIX 0 #if defined(_POSIX_TIMERS) && ((_POSIX_TIMERS > 0) || defined(__OpenBSD__)) && defined(_POSIX_MONOTONIC_CLOCK) && defined(CLOCK_MONOTONIC) # undef PHP_HRTIME_PLATFORM_POSIX # define PHP_HRTIME_PLATFORM_POSIX 1 #elif defined(_WIN32) || defined(_WIN64) # undef PHP_HRTIME_PLATFORM_WINDOWS # define PHP_HRTIME_PLATFORM_WINDOWS 1 #elif defined(__APPLE__) # undef PHP_HRTIME_PLATFORM_APPLE # define PHP_HRTIME_PLATFORM_APPLE 1 #elif (defined(__hpux) || defined(hpux)) || ((defined(__sun__) || defined(__sun) || defined(sun)) && (defined(__SVR4) || defined(__svr4__))) # undef PHP_HRTIME_PLATFORM_HPUX # define PHP_HRTIME_PLATFORM_HPUX 1 #elif defined(_AIX) # undef PHP_HRTIME_PLATFORM_AIX # define PHP_HRTIME_PLATFORM_AIX 1 #endif #define HRTIME_AVAILABLE (PHP_HRTIME_PLATFORM_POSIX || PHP_HRTIME_PLATFORM_WINDOWS || PHP_HRTIME_PLATFORM_APPLE || PHP_HRTIME_PLATFORM_HPUX || PHP_HRTIME_PLATFORM_AIX) BEGIN_EXTERN_C() typedef uint64_t php_hrtime_t; PHPAPI php_hrtime_t php_hrtime_current(void); PHP_MINIT_FUNCTION(hrtime); PHP_FUNCTION(hrtime); END_EXTERN_C() #endif /* HRTIME_H */ PK!"QFFext/standard/php_net.hnu[/* +----------------------------------------------------------------------+ | PHP Version 7 | +----------------------------------------------------------------------+ | Copyright (c) 1997-2018 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | | available through the world-wide-web at the following url: | | http://www.php.net/license/3_01.txt | | If you did not receive a copy of the PHP license and are unable to | | obtain it through the world-wide-web, please send a note to | | license@php.net so we can mail you a copy immediately. | +----------------------------------------------------------------------+ | Authors: Sara Golemon | +----------------------------------------------------------------------+ */ #ifndef PHP_NET_H #define PHP_NET_H #include "php.h" #include "php_network.h" PHPAPI zend_string* php_inet_ntop(const struct sockaddr *addr); PHP_FUNCTION(net_get_interfaces); #endif /* PHP_NET_H */ PK!DoDDext/gmp/php_gmp_int.hnu[#ifndef incl_PHP_GMP_INT_H #define incl_PHP_GMP_INT_H #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "php.h" #include #ifdef PHP_WIN32 # define PHP_GMP_API __declspec(dllexport) #elif defined(__GNUC__) && __GNUC__ >= 4 # define PHP_GMP_API __attribute__ ((visibility("default"))) #else # define PHP_GMP_API #endif typedef struct _gmp_object { mpz_t num; zend_object std; } gmp_object; static inline gmp_object *php_gmp_object_from_zend_object(zend_object *zobj) { return (gmp_object *)( ((char *)zobj) - XtOffsetOf(gmp_object, std) ); } PHP_GMP_API zend_class_entry *php_gmp_class_entry(); /* GMP and MPIR use different datatypes on different platforms */ #ifdef PHP_WIN32 typedef zend_long gmp_long; typedef zend_ulong gmp_ulong; #else typedef long gmp_long; typedef unsigned long gmp_ulong; #endif #endif PK!7`;;build/gen_stub.phpnu[#!/usr/bin/env php getPathName(); if (preg_match('/\.stub\.php$/', $pathName)) { $pathNames[] = $pathName; } } // Make sure stub files are processed in a predictable, system-independent order. sort($pathNames); $fileInfos = []; foreach ($pathNames as $pathName) { $fileInfo = processStubFile($pathName, $context); if ($fileInfo) { $fileInfos[] = $fileInfo; } } return $fileInfos; } function processStubFile(string $stubFile, Context $context): ?FileInfo { try { if (!file_exists($stubFile)) { throw new Exception("File $stubFile does not exist"); } $arginfoFile = str_replace('.stub.php', '_arginfo.h', $stubFile); $legacyFile = str_replace('.stub.php', '_legacy_arginfo.h', $stubFile); $stubCode = file_get_contents($stubFile); $stubHash = computeStubHash($stubCode); $oldStubHash = extractStubHash($arginfoFile); if ($stubHash === $oldStubHash && !$context->forceParse) { /* Stub file did not change, do not regenerate. */ return null; } initPhpParser(); $fileInfo = parseStubFile($stubCode); $arginfoCode = generateArgInfoCode($fileInfo, $stubHash); if (($context->forceRegeneration || $stubHash !== $oldStubHash) && file_put_contents($arginfoFile, $arginfoCode)) { echo "Saved $arginfoFile\n"; } if ($fileInfo->generateLegacyArginfo) { $legacyFileInfo = clone $fileInfo; foreach ($legacyFileInfo->getAllFuncInfos() as $funcInfo) { $funcInfo->discardInfoForOldPhpVersions(); } foreach ($legacyFileInfo->getAllPropertyInfos() as $propertyInfo) { $propertyInfo->discardInfoForOldPhpVersions(); } $arginfoCode = generateArgInfoCode($legacyFileInfo, $stubHash); if (($context->forceRegeneration || $stubHash !== $oldStubHash) && file_put_contents($legacyFile, $arginfoCode)) { echo "Saved $legacyFile\n"; } } return $fileInfo; } catch (Exception $e) { echo "In $stubFile:\n{$e->getMessage()}\n"; exit(1); } } function computeStubHash(string $stubCode): string { return sha1(str_replace("\r\n", "\n", $stubCode)); } function extractStubHash(string $arginfoFile): ?string { if (!file_exists($arginfoFile)) { return null; } $arginfoCode = file_get_contents($arginfoFile); if (!preg_match('/\* Stub hash: ([0-9a-f]+) \*/', $arginfoCode, $matches)) { return null; } return $matches[1]; } class Context { /** @var bool */ public $forceParse = false; /** @var bool */ public $forceRegeneration = false; } class ArrayType extends SimpleType { /** @var Type */ public $keyType; /** @var Type */ public $valueType; public static function createGenericArray(): self { return new ArrayType(Type::fromString("int|string"), Type::fromString("mixed|ref")); } public function __construct(Type $keyType, Type $valueType) { parent::__construct("array", true); $this->keyType = $keyType; $this->valueType = $valueType; } public function toOptimizerTypeMask(): string { $typeMasks = [ parent::toOptimizerTypeMask(), $this->keyType->toOptimizerTypeMaskForArrayKey(), $this->valueType->toOptimizerTypeMaskForArrayValue(), ]; return implode("|", $typeMasks); } public function equals(SimpleType $other): bool { if (!parent::equals($other)) { return false; } assert(get_class($other) === self::class); return Type::equals($this->keyType, $other->keyType) && Type::equals($this->valueType, $other->valueType); } } class SimpleType { /** @var string */ public $name; /** @var bool */ public $isBuiltin; public static function fromNode(Node $node): SimpleType { if ($node instanceof Node\Name) { if ($node->toLowerString() === 'static') { // PHP internally considers "static" a builtin type. return new SimpleType($node->toLowerString(), true); } if ($node->toLowerString() === 'self') { throw new Exception('The exact class name must be used instead of "self"'); } assert($node->isFullyQualified()); return new SimpleType($node->toString(), false); } if ($node instanceof Node\Identifier) { if ($node->toLowerString() === 'array') { return ArrayType::createGenericArray(); } return new SimpleType($node->toLowerString(), true); } throw new Exception("Unexpected node type"); } public static function fromString(string $typeString): SimpleType { switch (strtolower($typeString)) { case "void": case "null": case "false": case "true": case "bool": case "int": case "float": case "string": case "callable": case "iterable": case "object": case "resource": case "mixed": case "static": case "never": case "ref": return new SimpleType(strtolower($typeString), true); case "array": return ArrayType::createGenericArray(); case "self": throw new Exception('The exact class name must be used instead of "self"'); } $matches = []; $isArray = preg_match("/(.*)\s*\[\s*\]/", $typeString, $matches); if ($isArray) { return new ArrayType(Type::fromString("int"), Type::fromString($matches[1])); } $matches = []; $isArray = preg_match("/array\s*<\s*([A-Za-z0-9_-|]+)?(\s*,\s*)?([A-Za-z0-9_-|]+)?\s*>/i", $typeString, $matches); if ($isArray) { if (empty($matches[1]) || empty($matches[3])) { throw new Exception("array<> type hint must have both a key and a value"); } return new ArrayType(Type::fromString($matches[1]), Type::fromString($matches[3])); } return new SimpleType($typeString, false); } public static function null(): SimpleType { return new SimpleType("null", true); } public static function void(): SimpleType { return new SimpleType("void", true); } protected function __construct(string $name, bool $isBuiltin) { $this->name = $name; $this->isBuiltin = $isBuiltin; } public function isScalar(): bool { return $this->isBuiltin && in_array($this->name, ["null", "false", "true", "bool", "int", "float"], true); } public function isNull(): bool { return $this->isBuiltin && $this->name === 'null'; } public function toTypeCode(): string { assert($this->isBuiltin); switch ($this->name) { case "bool": return "_IS_BOOL"; case "int": return "IS_LONG"; case "float": return "IS_DOUBLE"; case "string": return "IS_STRING"; case "array": return "IS_ARRAY"; case "object": return "IS_OBJECT"; case "void": return "IS_VOID"; case "callable": return "IS_CALLABLE"; case "iterable": return "IS_ITERABLE"; case "mixed": return "IS_MIXED"; case "static": return "IS_STATIC"; case "never": return "IS_NEVER"; default: throw new Exception("Not implemented: $this->name"); } } public function toTypeMask(): string { assert($this->isBuiltin); switch ($this->name) { case "null": return "MAY_BE_NULL"; case "false": return "MAY_BE_FALSE"; case "bool": return "MAY_BE_BOOL"; case "int": return "MAY_BE_LONG"; case "float": return "MAY_BE_DOUBLE"; case "string": return "MAY_BE_STRING"; case "array": return "MAY_BE_ARRAY"; case "object": return "MAY_BE_OBJECT"; case "callable": return "MAY_BE_CALLABLE"; case "iterable": return "MAY_BE_ITERABLE"; case "mixed": return "MAY_BE_ANY"; case "void": return "MAY_BE_VOID"; case "static": return "MAY_BE_STATIC"; case "never": return "MAY_BE_NEVER"; default: throw new Exception("Not implemented: $this->name"); } } public function toOptimizerTypeMaskForArrayKey(): string { assert($this->isBuiltin); switch ($this->name) { case "int": return "MAY_BE_ARRAY_KEY_LONG"; case "string": return "MAY_BE_ARRAY_KEY_STRING"; default: throw new Exception("Type $this->name cannot be an array key"); } } public function toOptimizerTypeMaskForArrayValue(): string { if (!$this->isBuiltin) { return "MAY_BE_ARRAY_OF_OBJECT"; } switch ($this->name) { case "null": return "MAY_BE_ARRAY_OF_NULL"; case "false": return "MAY_BE_ARRAY_OF_FALSE"; case "bool": return "MAY_BE_ARRAY_OF_FALSE|MAY_BE_ARRAY_OF_TRUE"; case "int": return "MAY_BE_ARRAY_OF_LONG"; case "float": return "MAY_BE_ARRAY_OF_DOUBLE"; case "string": return "MAY_BE_ARRAY_OF_STRING"; case "array": return "MAY_BE_ARRAY_OF_ARRAY"; case "object": return "MAY_BE_ARRAY_OF_OBJECT"; case "resource": return "MAY_BE_ARRAY_OF_RESOURCE"; case "mixed": return "MAY_BE_ARRAY_OF_ANY"; case "ref": return "MAY_BE_ARRAY_OF_REF"; default: throw new Exception("Type $this->name cannot be an array value"); } } public function toOptimizerTypeMask(): string { if (!$this->isBuiltin) { return "MAY_BE_OBJECT"; } switch ($this->name) { case "true": return "MAY_BE_TRUE"; case "resource": return "MAY_BE_RESOURCE"; case "callable": return "MAY_BE_STRING|MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_LONG|MAY_BE_ARRAY_OF_STRING|MAY_BE_ARRAY_OF_OBJECT|MAY_BE_OBJECT"; case "iterable": return "MAY_BE_ARRAY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY|MAY_BE_OBJECT"; case "mixed": return "MAY_BE_ANY|MAY_BE_ARRAY_KEY_ANY|MAY_BE_ARRAY_OF_ANY"; } return $this->toTypeMask(); } public function toEscapedName(): string { return str_replace('\\', '\\\\', $this->name); } public function toVarEscapedName(): string { $name = str_replace('_', '__', $this->name); return str_replace('\\', '_', $this->name); } public function equals(SimpleType $other): bool { return $this->name === $other->name && $this->isBuiltin === $other->isBuiltin; } } class Type { /** @var SimpleType[] */ public $types; public static function fromNode(Node $node): Type { if ($node instanceof Node\UnionType) { return new Type(array_map(['SimpleType', 'fromNode'], $node->types)); } if ($node instanceof Node\NullableType) { return new Type( [ SimpleType::fromNode($node->type), SimpleType::null(), ] ); } return new Type([SimpleType::fromNode($node)]); } public static function fromString(string $typeString): self { $typeString .= "|"; $simpleTypes = []; $simpleTypeOffset = 0; $inArray = false; $typeStringLength = strlen($typeString); for ($i = 0; $i < $typeStringLength; $i++) { $char = $typeString[$i]; if ($char === "<") { $inArray = true; continue; } if ($char === ">") { $inArray = false; continue; } if ($inArray) { continue; } if ($char === "|") { $simpleTypeName = trim(substr($typeString, $simpleTypeOffset, $i - $simpleTypeOffset)); $simpleTypes[] = SimpleType::fromString($simpleTypeName); $simpleTypeOffset = $i + 1; } } return new Type($simpleTypes); } /** * @param SimpleType[] $types */ private function __construct(array $types) { $this->types = $types; } public function isScalar(): bool { foreach ($this->types as $type) { if (!$type->isScalar()) { return false; } } return true; } public function isNullable(): bool { foreach ($this->types as $type) { if ($type->isNull()) { return true; } } return false; } public function getWithoutNull(): Type { return new Type( array_filter( $this->types, function(SimpleType $type) { return !$type->isNull(); } ) ); } public function tryToSimpleType(): ?SimpleType { $withoutNull = $this->getWithoutNull(); if (count($withoutNull->types) === 1) { return $withoutNull->types[0]; } return null; } public function toArginfoType(): ArginfoType { $classTypes = []; $builtinTypes = []; foreach ($this->types as $type) { if ($type->isBuiltin) { $builtinTypes[] = $type; } else { $classTypes[] = $type; } } return new ArginfoType($classTypes, $builtinTypes); } public function toOptimizerTypeMask(): string { $optimizerTypes = []; foreach ($this->types as $type) { $optimizerTypes[] = $type->toOptimizerTypeMask(); } return implode("|", $optimizerTypes); } public function toOptimizerTypeMaskForArrayKey(): string { $typeMasks = []; foreach ($this->types as $type) { $typeMasks[] = $type->toOptimizerTypeMaskForArrayKey(); } return implode("|", $typeMasks); } public function toOptimizerTypeMaskForArrayValue(): string { $typeMasks = []; foreach ($this->types as $type) { $typeMasks[] = $type->toOptimizerTypeMaskForArrayValue(); } return implode("|", $typeMasks); } public function getTypeForDoc(DOMDocument $doc): DOMElement { if (count($this->types) > 1) { $typeElement = $doc->createElement('type'); $typeElement->setAttribute("class", "union"); foreach ($this->types as $type) { $unionTypeElement = $doc->createElement('type', $type->name); $typeElement->appendChild($unionTypeElement); } } else { $type = $this->types[0]; if ($type->isBuiltin && strtolower($type->name) === "true") { $name = "bool"; } else { $name = $type->name; } $typeElement = $doc->createElement('type', $name); } return $typeElement; } public static function equals(?Type $a, ?Type $b): bool { if ($a === null || $b === null) { return $a === $b; } if (count($a->types) !== count($b->types)) { return false; } for ($i = 0; $i < count($a->types); $i++) { if (!$a->types[$i]->equals($b->types[$i])) { return false; } } return true; } public function __toString() { if ($this->types === null) { return 'mixed'; } return implode('|', array_map( function ($type) { return $type->name; }, $this->types) ); } } class ArginfoType { /** @var SimpleType[] $classTypes */ public $classTypes; /** @var SimpleType[] $builtinTypes */ private $builtinTypes; /** * @param SimpleType[] $classTypes * @param SimpleType[] $builtinTypes */ public function __construct(array $classTypes, array $builtinTypes) { $this->classTypes = $classTypes; $this->builtinTypes = $builtinTypes; } public function hasClassType(): bool { return !empty($this->classTypes); } public function toClassTypeString(): string { return implode('|', array_map(function(SimpleType $type) { return $type->toEscapedName(); }, $this->classTypes)); } public function toTypeMask(): string { if (empty($this->builtinTypes)) { return '0'; } return implode('|', array_map(function(SimpleType $type) { return $type->toTypeMask(); }, $this->builtinTypes)); } } class ArgInfo { const SEND_BY_VAL = 0; const SEND_BY_REF = 1; const SEND_PREFER_REF = 2; /** @var string */ public $name; /** @var int */ public $sendBy; /** @var bool */ public $isVariadic; /** @var Type|null */ public $type; /** @var Type|null */ public $phpDocType; /** @var string|null */ public $defaultValue; public function __construct(string $name, int $sendBy, bool $isVariadic, ?Type $type, ?Type $phpDocType, ?string $defaultValue) { $this->name = $name; $this->sendBy = $sendBy; $this->isVariadic = $isVariadic; $this->setTypes($type, $phpDocType); $this->defaultValue = $defaultValue; } public function equals(ArgInfo $other): bool { return $this->name === $other->name && $this->sendBy === $other->sendBy && $this->isVariadic === $other->isVariadic && Type::equals($this->type, $other->type) && $this->defaultValue === $other->defaultValue; } public function getSendByString(): string { switch ($this->sendBy) { case self::SEND_BY_VAL: return "0"; case self::SEND_BY_REF: return "1"; case self::SEND_PREFER_REF: return "ZEND_SEND_PREFER_REF"; } throw new Exception("Invalid sendBy value"); } public function getMethodSynopsisType(): Type { if ($this->type) { return $this->type; } if ($this->phpDocType) { return $this->phpDocType; } throw new Exception("A parameter must have a type"); } public function hasProperDefaultValue(): bool { return $this->defaultValue !== null && $this->defaultValue !== "UNKNOWN"; } public function getDefaultValueAsArginfoString(): string { if ($this->hasProperDefaultValue()) { return '"' . addslashes($this->defaultValue) . '"'; } return "NULL"; } public function getDefaultValueAsMethodSynopsisString(): ?string { if ($this->defaultValue === null) { return null; } switch ($this->defaultValue) { case 'UNKNOWN': return null; case 'false': case 'true': case 'null': return "&{$this->defaultValue};"; } return $this->defaultValue; } private function setTypes(?Type $type, ?Type $phpDocType): void { if ($phpDocType !== null && Type::equals($type, $phpDocType)) { throw new Exception('PHPDoc param type "' . $phpDocType->__toString() . '" is unnecessary'); } $this->type = $type; $this->phpDocType = $phpDocType; } } class PropertyName { /** @var Name */ public $class; /** @var string */ public $property; public function __construct(Name $class, string $property) { $this->class = $class; $this->property = $property; } public function __toString() { return $this->class->toString() . "::$" . $this->property; } } interface FunctionOrMethodName { public function getDeclaration(): string; public function getArgInfoName(): string; public function getMethodSynopsisFilename(): string; public function __toString(): string; public function isMethod(): bool; public function isConstructor(): bool; public function isDestructor(): bool; } class FunctionName implements FunctionOrMethodName { /** @var Name */ private $name; public function __construct(Name $name) { $this->name = $name; } public function getNamespace(): ?string { if ($this->name->isQualified()) { return $this->name->slice(0, -1)->toString(); } return null; } public function getNonNamespacedName(): string { if ($this->name->isQualified()) { throw new Exception("Namespaced name not supported here"); } return $this->name->toString(); } public function getDeclarationName(): string { return $this->name->getLast(); } public function getDeclaration(): string { return "ZEND_FUNCTION({$this->getDeclarationName()});\n"; } public function getArgInfoName(): string { $underscoreName = implode('_', $this->name->parts); return "arginfo_$underscoreName"; } public function getMethodSynopsisFilename(): string { return implode('_', $this->name->parts); } public function __toString(): string { return $this->name->toString(); } public function isMethod(): bool { return false; } public function isConstructor(): bool { return false; } public function isDestructor(): bool { return false; } } class MethodName implements FunctionOrMethodName { /** @var Name */ private $className; /** @var string */ public $methodName; public function __construct(Name $className, string $methodName) { $this->className = $className; $this->methodName = $methodName; } public function getDeclarationClassName(): string { return implode('_', $this->className->parts); } public function getDeclaration(): string { return "ZEND_METHOD({$this->getDeclarationClassName()}, $this->methodName);\n"; } public function getArgInfoName(): string { return "arginfo_class_{$this->getDeclarationClassName()}_{$this->methodName}"; } public function getMethodSynopsisFilename(): string { return $this->getDeclarationClassName() . "_{$this->methodName}"; } public function __toString(): string { return "$this->className::$this->methodName"; } public function isMethod(): bool { return true; } public function isConstructor(): bool { return $this->methodName === "__construct"; } public function isDestructor(): bool { return $this->methodName === "__destruct"; } } class ReturnInfo { const REFCOUNT_0 = "0"; const REFCOUNT_1 = "1"; const REFCOUNT_N = "N"; const REFCOUNTS = [ self::REFCOUNT_0, self::REFCOUNT_1, self::REFCOUNT_N, ]; /** @var bool */ public $byRef; /** @var Type|null */ public $type; /** @var Type|null */ public $phpDocType; /** @var bool */ public $tentativeReturnType; /** @var string */ public $refcount; public function __construct(bool $byRef, ?Type $type, ?Type $phpDocType, bool $tentativeReturnType, ?string $refcount) { $this->byRef = $byRef; $this->setTypes($type, $phpDocType, $tentativeReturnType); $this->setRefcount($refcount); } public function equalsApartFromPhpDocAndRefcount(ReturnInfo $other): bool { return $this->byRef === $other->byRef && Type::equals($this->type, $other->type) && $this->tentativeReturnType === $other->tentativeReturnType; } public function getMethodSynopsisType(): ?Type { return $this->type ?? $this->phpDocType; } private function setTypes(?Type $type, ?Type $phpDocType, bool $tentativeReturnType): void { if ($phpDocType !== null && Type::equals($type, $phpDocType)) { throw new Exception('PHPDoc return type "' . $phpDocType->__toString() . '" is unnecessary'); } $this->type = $type; $this->phpDocType = $phpDocType; $this->tentativeReturnType = $tentativeReturnType; } private function setRefcount(?string $refcount): void { $type = $this->phpDocType ?? $this->type; $isScalarType = $type !== null && $type->isScalar(); if ($refcount === null) { $this->refcount = $isScalarType ? self::REFCOUNT_0 : self::REFCOUNT_N; return; } if (!in_array($refcount, ReturnInfo::REFCOUNTS, true)) { throw new Exception("@refcount must have one of the following values: \"0\", \"1\", \"N\", $refcount given"); } if ($isScalarType && $refcount !== self::REFCOUNT_0) { throw new Exception('A scalar return type of "' . $type->__toString() . '" must have a refcount of "' . self::REFCOUNT_0 . '"'); } if (!$isScalarType && $refcount === self::REFCOUNT_0) { throw new Exception('A non-scalar return type of "' . $type->__toString() . '" cannot have a refcount of "' . self::REFCOUNT_0 . '"'); } $this->refcount = $refcount; } } class FuncInfo { /** @var FunctionOrMethodName */ public $name; /** @var int */ public $classFlags; /** @var int */ public $flags; /** @var string|null */ public $aliasType; /** @var FunctionName|null */ public $alias; /** @var bool */ public $isDeprecated; /** @var bool */ public $verify; /** @var ArgInfo[] */ public $args; /** @var ReturnInfo */ public $return; /** @var int */ public $numRequiredArgs; /** @var string|null */ public $cond; /** * @param ArgInfo[] $args */ public function __construct( FunctionOrMethodName $name, int $classFlags, int $flags, ?string $aliasType, ?FunctionOrMethodName $alias, bool $isDeprecated, bool $verify, array $args, ReturnInfo $return, int $numRequiredArgs, ?string $cond ) { $this->name = $name; $this->classFlags = $classFlags; $this->flags = $flags; $this->aliasType = $aliasType; $this->alias = $alias; $this->isDeprecated = $isDeprecated; $this->verify = $verify; $this->args = $args; $this->return = $return; $this->numRequiredArgs = $numRequiredArgs; $this->cond = $cond; } public function isMethod(): bool { return $this->name->isMethod(); } public function isFinalMethod(): bool { return ($this->flags & Class_::MODIFIER_FINAL) || ($this->classFlags & Class_::MODIFIER_FINAL); } public function isInstanceMethod(): bool { return !($this->flags & Class_::MODIFIER_STATIC) && $this->isMethod() && !$this->name->isConstructor(); } /** @return string[] */ public function getModifierNames(): array { if (!$this->isMethod()) { return []; } $result = []; if ($this->flags & Class_::MODIFIER_FINAL) { $result[] = "final"; } elseif ($this->flags & Class_::MODIFIER_ABSTRACT && $this->classFlags & ~Class_::MODIFIER_ABSTRACT) { $result[] = "abstract"; } if ($this->flags & Class_::MODIFIER_PROTECTED) { $result[] = "protected"; } elseif ($this->flags & Class_::MODIFIER_PRIVATE) { $result[] = "private"; } else { $result[] = "public"; } if ($this->flags & Class_::MODIFIER_STATIC) { $result[] = "static"; } return $result; } public function hasParamWithUnknownDefaultValue(): bool { foreach ($this->args as $arg) { if ($arg->defaultValue && !$arg->hasProperDefaultValue()) { return true; } } return false; } public function equalsApartFromNameAndRefcount(FuncInfo $other): bool { if (count($this->args) !== count($other->args)) { return false; } for ($i = 0; $i < count($this->args); $i++) { if (!$this->args[$i]->equals($other->args[$i])) { return false; } } return $this->return->equalsApartFromPhpDocAndRefcount($other->return) && $this->numRequiredArgs === $other->numRequiredArgs && $this->cond === $other->cond; } public function getArgInfoName(): string { return $this->name->getArgInfoName(); } public function getDeclarationKey(): string { $name = $this->alias ?? $this->name; return "$name|$this->cond"; } public function getDeclaration(): ?string { if ($this->flags & Class_::MODIFIER_ABSTRACT) { return null; } $name = $this->alias ?? $this->name; return $name->getDeclaration(); } public function getFunctionEntry(): string { if ($this->name instanceof MethodName) { if ($this->alias) { if ($this->alias instanceof MethodName) { return sprintf( "\tZEND_MALIAS(%s, %s, %s, %s, %s)\n", $this->alias->getDeclarationClassName(), $this->name->methodName, $this->alias->methodName, $this->getArgInfoName(), $this->getFlagsAsArginfoString() ); } else if ($this->alias instanceof FunctionName) { return sprintf( "\tZEND_ME_MAPPING(%s, %s, %s, %s)\n", $this->name->methodName, $this->alias->getNonNamespacedName(), $this->getArgInfoName(), $this->getFlagsAsArginfoString() ); } else { throw new Error("Cannot happen"); } } else { $declarationClassName = $this->name->getDeclarationClassName(); if ($this->flags & Class_::MODIFIER_ABSTRACT) { return sprintf( "\tZEND_ABSTRACT_ME_WITH_FLAGS(%s, %s, %s, %s)\n", $declarationClassName, $this->name->methodName, $this->getArgInfoName(), $this->getFlagsAsArginfoString() ); } return sprintf( "\tZEND_ME(%s, %s, %s, %s)\n", $declarationClassName, $this->name->methodName, $this->getArgInfoName(), $this->getFlagsAsArginfoString() ); } } else if ($this->name instanceof FunctionName) { $namespace = $this->name->getNamespace(); $declarationName = $this->name->getDeclarationName(); if ($this->alias && $this->isDeprecated) { return sprintf( "\tZEND_DEP_FALIAS(%s, %s, %s)\n", $declarationName, $this->alias->getNonNamespacedName(), $this->getArgInfoName() ); } if ($this->alias) { return sprintf( "\tZEND_FALIAS(%s, %s, %s)\n", $declarationName, $this->alias->getNonNamespacedName(), $this->getArgInfoName() ); } if ($this->isDeprecated) { return sprintf( "\tZEND_DEP_FE(%s, %s)\n", $declarationName, $this->getArgInfoName()); } if ($namespace) { // Render A\B as "A\\B" in C strings for namespaces return sprintf( "\tZEND_NS_FE(\"%s\", %s, %s)\n", addslashes($namespace), $declarationName, $this->getArgInfoName()); } else { return sprintf("\tZEND_FE(%s, %s)\n", $declarationName, $this->getArgInfoName()); } } else { throw new Error("Cannot happen"); } } public function getOptimizerInfo(): ?string { if ($this->isMethod()) { return null; } if ($this->alias !== null) { return null; } if ($this->return->refcount !== ReturnInfo::REFCOUNT_1 && $this->return->phpDocType === null) { return null; } $type = $this->return->phpDocType ?? $this->return->type; if ($type === null) { return null; } return " F" . $this->return->refcount . '("' . $this->name->__toString() . '", ' . $type->toOptimizerTypeMask() . "),\n"; } public function discardInfoForOldPhpVersions(): void { $this->return->type = null; foreach ($this->args as $arg) { $arg->type = null; $arg->defaultValue = null; } } private function getFlagsAsArginfoString(): string { $flags = "ZEND_ACC_PUBLIC"; if ($this->flags & Class_::MODIFIER_PROTECTED) { $flags = "ZEND_ACC_PROTECTED"; } elseif ($this->flags & Class_::MODIFIER_PRIVATE) { $flags = "ZEND_ACC_PRIVATE"; } if ($this->flags & Class_::MODIFIER_STATIC) { $flags .= "|ZEND_ACC_STATIC"; } if ($this->flags & Class_::MODIFIER_FINAL) { $flags .= "|ZEND_ACC_FINAL"; } if ($this->flags & Class_::MODIFIER_ABSTRACT) { $flags .= "|ZEND_ACC_ABSTRACT"; } if ($this->isDeprecated) { $flags .= "|ZEND_ACC_DEPRECATED"; } return $flags; } /** * @param array $funcMap * @param array $aliasMap * @throws Exception */ public function getMethodSynopsisDocument(array $funcMap, array $aliasMap): ?string { $doc = new DOMDocument(); $doc->formatOutput = true; $methodSynopsis = $this->getMethodSynopsisElement($funcMap, $aliasMap, $doc); if (!$methodSynopsis) { return null; } $doc->appendChild($methodSynopsis); return $doc->saveXML(); } /** * @param array $funcMap * @param array $aliasMap * @throws Exception */ public function getMethodSynopsisElement(array $funcMap, array $aliasMap, DOMDocument $doc): ?DOMElement { if ($this->hasParamWithUnknownDefaultValue()) { return null; } if ($this->name->isConstructor()) { $synopsisType = "constructorsynopsis"; } elseif ($this->name->isDestructor()) { $synopsisType = "destructorsynopsis"; } else { $synopsisType = "methodsynopsis"; } $methodSynopsis = $doc->createElement($synopsisType); $aliasedFunc = $this->aliasType === "alias" && isset($funcMap[$this->alias->__toString()]) ? $funcMap[$this->alias->__toString()] : null; $aliasFunc = $aliasMap[$this->name->__toString()] ?? null; if (($this->aliasType === "alias" && $aliasedFunc !== null && $aliasedFunc->isMethod() !== $this->isMethod()) || ($aliasFunc !== null && $aliasFunc->isMethod() !== $this->isMethod()) ) { $role = $doc->createAttribute("role"); $role->value = $this->isMethod() ? "oop" : "procedural"; $methodSynopsis->appendChild($role); } $methodSynopsis->appendChild(new DOMText("\n ")); foreach ($this->getModifierNames() as $modifierString) { $modifierElement = $doc->createElement('modifier', $modifierString); $methodSynopsis->appendChild($modifierElement); $methodSynopsis->appendChild(new DOMText(" ")); } $returnType = $this->return->getMethodSynopsisType(); if ($returnType) { $methodSynopsis->appendChild($returnType->getTypeForDoc($doc)); } $methodname = $doc->createElement('methodname', $this->name->__toString()); $methodSynopsis->appendChild($methodname); if (empty($this->args)) { $methodSynopsis->appendChild(new DOMText("\n ")); $void = $doc->createElement('void'); $methodSynopsis->appendChild($void); } else { foreach ($this->args as $arg) { $methodSynopsis->appendChild(new DOMText("\n ")); $methodparam = $doc->createElement('methodparam'); if ($arg->defaultValue !== null) { $methodparam->setAttribute("choice", "opt"); } if ($arg->isVariadic) { $methodparam->setAttribute("rep", "repeat"); } $methodSynopsis->appendChild($methodparam); $methodparam->appendChild($arg->getMethodSynopsisType()->getTypeForDoc($doc)); $parameter = $doc->createElement('parameter', $arg->name); if ($arg->sendBy !== ArgInfo::SEND_BY_VAL) { $parameter->setAttribute("role", "reference"); } $methodparam->appendChild($parameter); $defaultValue = $arg->getDefaultValueAsMethodSynopsisString(); if ($defaultValue !== null) { $initializer = $doc->createElement('initializer'); if (preg_match('/^[a-zA-Z_][a-zA-Z_0-9]*$/', $defaultValue)) { $constant = $doc->createElement('constant', $defaultValue); $initializer->appendChild($constant); } else { $initializer->nodeValue = $defaultValue; } $methodparam->appendChild($initializer); } } } $methodSynopsis->appendChild(new DOMText("\n ")); return $methodSynopsis; } public function __clone() { foreach ($this->args as $key => $argInfo) { $this->args[$key] = clone $argInfo; } $this->return = clone $this->return; } } function initializeZval(string $zvalName, $value): string { $code = "\tzval $zvalName;\n"; switch (gettype($value)) { case "NULL": $code .= "\tZVAL_NULL(&$zvalName);\n"; break; case "boolean": $code .= "\tZVAL_BOOL(&$zvalName, " . ((int) $value) . ");\n"; break; case "integer": $code .= "\tZVAL_LONG(&$zvalName, $value);\n"; break; case "double": $code .= "\tZVAL_DOUBLE(&$zvalName, $value);\n"; break; case "string": if ($value === "") { $code .= "\tZVAL_EMPTY_STRING(&$zvalName);\n"; } else { $strValue = addslashes($value); $code .= "\tzend_string *{$zvalName}_str = zend_string_init(\"$strValue\", sizeof(\"$strValue\") - 1, 1);\n"; $code .= "\tZVAL_STR(&$zvalName, {$zvalName}_str);\n"; } break; case "array": if (empty($value)) { $code .= "\tZVAL_EMPTY_ARRAY(&$zvalName);\n"; } else { throw new Exception("Unimplemented default value"); } break; default: throw new Exception("Invalid default value"); } return $code; } class PropertyInfo { /** @var PropertyName */ public $name; /** @var int */ public $flags; /** @var Type|null */ public $type; /** @var Type|null */ public $phpDocType; /** @var Expr|null */ public $defaultValue; /** @var string|null */ public $defaultValueString; /** @var bool */ public $isDocReadonly; /** @var string|null */ public $link; public function __construct( PropertyName $name, int $flags, ?Type $type, ?Type $phpDocType, ?Expr $defaultValue, ?string $defaultValueString, bool $isDocReadonly, ?string $link ) { $this->name = $name; $this->flags = $flags; $this->type = $type; $this->phpDocType = $phpDocType; $this->defaultValue = $defaultValue; $this->defaultValueString = $defaultValueString; $this->isDocReadonly = $isDocReadonly; $this->link = $link; } public function discardInfoForOldPhpVersions(): void { $this->type = null; } public function getDeclaration(): string { $code = "\n"; $propertyName = $this->name->property; $defaultValueConstant = false; if ($this->defaultValue === null) { $defaultValue = null; } else { $defaultValue = $this->evaluateDefaultValue($defaultValueConstant); } if ($defaultValueConstant) { echo "Skipping code generation for property $this->name, because it has a constant default value\n"; return ""; } $typeCode = ""; if ($this->type) { $arginfoType = $this->type->toArginfoType(); if ($arginfoType->hasClassType()) { if (count($arginfoType->classTypes) >= 2) { foreach ($arginfoType->classTypes as $classType) { $escapedClassName = $classType->toEscapedName(); $varEscapedClassName = $classType->toVarEscapedName(); $code .= "\tzend_string *property_{$propertyName}_class_{$varEscapedClassName} = zend_string_init(\"{$escapedClassName}\", sizeof(\"{$escapedClassName}\") - 1, 1);\n"; } $classTypeCount = count($arginfoType->classTypes); $code .= "\tzend_type_list *property_{$propertyName}_type_list = malloc(ZEND_TYPE_LIST_SIZE($classTypeCount));\n"; $code .= "\tproperty_{$propertyName}_type_list->num_types = $classTypeCount;\n"; foreach ($arginfoType->classTypes as $k => $classType) { $escapedClassName = $classType->toEscapedName(); $code .= "\tproperty_{$propertyName}_type_list->types[$k] = (zend_type) ZEND_TYPE_INIT_CLASS(property_{$propertyName}_class_{$escapedClassName}, 0, 0);\n"; } $typeMaskCode = $this->type->toArginfoType()->toTypeMask(); $code .= "\tzend_type property_{$propertyName}_type = ZEND_TYPE_INIT_UNION(property_{$propertyName}_type_list, $typeMaskCode);\n"; $typeCode = "property_{$propertyName}_type"; } else { $escapedClassName = $arginfoType->classTypes[0]->toEscapedName(); $varEscapedClassName = $arginfoType->classTypes[0]->toVarEscapedName(); $code .= "\tzend_string *property_{$propertyName}_class_{$varEscapedClassName} = zend_string_init(\"{$escapedClassName}\", sizeof(\"${escapedClassName}\")-1, 1);\n"; $typeCode = "(zend_type) ZEND_TYPE_INIT_CLASS(property_{$propertyName}_class_{$varEscapedClassName}, 0, " . $arginfoType->toTypeMask() . ")"; } } else { $typeCode = "(zend_type) ZEND_TYPE_INIT_MASK(" . $arginfoType->toTypeMask() . ")"; } } $zvalName = "property_{$this->name->property}_default_value"; if ($this->defaultValue === null && $this->type !== null) { $code .= "\tzval $zvalName;\n\tZVAL_UNDEF(&$zvalName);\n"; } else { $code .= initializeZval($zvalName, $defaultValue); } $code .= "\tzend_string *property_{$propertyName}_name = zend_string_init(\"$propertyName\", sizeof(\"$propertyName\") - 1, 1);\n"; $nameCode = "property_{$propertyName}_name"; if ($this->type !== null) { $code .= "\tzend_declare_typed_property(class_entry, $nameCode, &$zvalName, " . $this->getFlagsAsString() . ", NULL, $typeCode);\n"; } else { $code .= "\tzend_declare_property_ex(class_entry, $nameCode, &$zvalName, " . $this->getFlagsAsString() . ", NULL);\n"; } $code .= "\tzend_string_release(property_{$propertyName}_name);\n"; return $code; } private function getFlagsAsString(): string { $flags = "ZEND_ACC_PUBLIC"; if ($this->flags & Class_::MODIFIER_PROTECTED) { $flags = "ZEND_ACC_PROTECTED"; } elseif ($this->flags & Class_::MODIFIER_PRIVATE) { $flags = "ZEND_ACC_PRIVATE"; } if ($this->flags & Class_::MODIFIER_STATIC) { $flags .= "|ZEND_ACC_STATIC"; } if ($this->flags & Class_::MODIFIER_READONLY) { $flags .= "|ZEND_ACC_READONLY"; } return $flags; } public function getFieldSynopsisElement(DOMDocument $doc): DOMElement { $fieldsynopsisElement = $doc->createElement("fieldsynopsis"); if ($this->flags & Class_::MODIFIER_PUBLIC) { $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($doc->createElement("modifier", "public")); } elseif ($this->flags & Class_::MODIFIER_PROTECTED) { $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($doc->createElement("modifier", "protected")); } elseif ($this->flags & Class_::MODIFIER_PRIVATE) { $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($doc->createElement("modifier", "private")); } if ($this->flags & Class_::MODIFIER_STATIC) { $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($doc->createElement("modifier", "static")); } elseif ($this->flags & Class_::MODIFIER_READONLY || $this->isDocReadonly) { $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($doc->createElement("modifier", "readonly")); } $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($this->getFieldSynopsisType()->getTypeForDoc($doc)); $className = str_replace(["\\", "_"], ["-", "-"], $this->name->class->toLowerString()); $varnameElement = $doc->createElement("varname", $this->name->property); if ($this->link) { $varnameElement->setAttribute("linkend", $this->link); } else { $varnameElement->setAttribute("linkend", "$className.props." . strtolower(str_replace("_", "-", $this->name->property))); } $fieldsynopsisElement->appendChild(new DOMText("\n ")); $fieldsynopsisElement->appendChild($varnameElement); if ($this->defaultValueString) { $fieldsynopsisElement->appendChild(new DOMText("\n ")); $initializerElement = $doc->createElement("initializer", $this->defaultValueString); $fieldsynopsisElement->appendChild($initializerElement); } $fieldsynopsisElement->appendChild(new DOMText("\n ")); return $fieldsynopsisElement; } private function getFieldSynopsisType(): Type { if ($this->phpDocType) { return $this->phpDocType; } if ($this->type) { return $this->type; } throw new Exception("A property must have a type"); } /** @return mixed */ private function evaluateDefaultValue(bool &$defaultValueConstant) { $evaluator = new ConstExprEvaluator( function (Expr $expr) use (&$defaultValueConstant) { if ($expr instanceof Expr\ConstFetch) { $defaultValueConstant = true; return null; } throw new Exception("Property $this->name has an unsupported default value"); } ); return $evaluator->evaluateDirectly($this->defaultValue); } public function __clone() { if ($this->type) { $this->type = clone $this->type; } } } class EnumCaseInfo { /** @var string */ public $name; /** @var Expr|null */ public $value; public function __construct(string $name, ?Expr $value) { $this->name = $name; $this->value = $value; } public function getDeclaration(): string { $escapedName = addslashes($this->name); if ($this->value === null) { $code = "\n\tzend_enum_add_case_cstr(class_entry, \"$escapedName\", NULL);\n"; } else { $evaluator = new ConstExprEvaluator(function (Expr $expr) { throw new Exception("Enum case $this->name has an unsupported value"); }); $zvalName = "enum_case_{$escapedName}_value"; $code = "\n" . initializeZval($zvalName, $evaluator->evaluateDirectly($this->value)); $code .= "\tzend_enum_add_case_cstr(class_entry, \"$escapedName\", &$zvalName);\n"; } return $code; } } class ClassInfo { /** @var Name */ public $name; /** @var int */ public $flags; /** @var string */ public $type; /** @var string|null */ public $alias; /** @var SimpleType|null */ public $enumBackingType; /** @var bool */ public $isDeprecated; /** @var bool */ public $isStrictProperties; /** @var bool */ public $isNotSerializable; /** @var Name[] */ public $extends; /** @var Name[] */ public $implements; /** @var PropertyInfo[] */ public $propertyInfos; /** @var FuncInfo[] */ public $funcInfos; /** @var EnumCaseInfo[] */ public $enumCaseInfos; /** * @param Name[] $extends * @param Name[] $implements * @param PropertyInfo[] $propertyInfos * @param FuncInfo[] $funcInfos * @param EnumCaseInfo[] $enumCaseInfos */ public function __construct( Name $name, int $flags, string $type, ?string $alias, ?SimpleType $enumBackingType, bool $isDeprecated, bool $isStrictProperties, bool $isNotSerializable, array $extends, array $implements, array $propertyInfos, array $funcInfos, array $enumCaseInfos ) { $this->name = $name; $this->flags = $flags; $this->type = $type; $this->alias = $alias; $this->enumBackingType = $enumBackingType; $this->isDeprecated = $isDeprecated; $this->isStrictProperties = $isStrictProperties; $this->isNotSerializable = $isNotSerializable; $this->extends = $extends; $this->implements = $implements; $this->propertyInfos = $propertyInfos; $this->funcInfos = $funcInfos; $this->enumCaseInfos = $enumCaseInfos; } public function getRegistration(): string { $params = []; foreach ($this->extends as $extends) { $params[] = "zend_class_entry *class_entry_" . implode("_", $extends->parts); } foreach ($this->implements as $implements) { $params[] = "zend_class_entry *class_entry_" . implode("_", $implements->parts); } $escapedName = implode("_", $this->name->parts); $code = "static zend_class_entry *register_class_$escapedName(" . (empty($params) ? "void" : implode(", ", $params)) . ")\n"; $code .= "{\n"; if ($this->type == "enum") { $name = addslashes((string) $this->name); $backingType = $this->enumBackingType ? $this->enumBackingType->toTypeCode() : "IS_UNDEF"; $code .= "\tzend_class_entry *class_entry = zend_register_internal_enum(\"$name\", $backingType, class_{$escapedName}_methods);\n"; } else { $code .= "\tzend_class_entry ce, *class_entry;\n\n"; if (count($this->name->parts) > 1) { $className = $this->name->getLast(); $namespace = addslashes((string) $this->name->slice(0, -1)); $code .= "\tINIT_NS_CLASS_ENTRY(ce, \"$namespace\", \"$className\", class_{$escapedName}_methods);\n"; } else { $code .= "\tINIT_CLASS_ENTRY(ce, \"$this->name\", class_{$escapedName}_methods);\n"; } if ($this->type === "class" || $this->type === "trait") { $code .= "\tclass_entry = zend_register_internal_class_ex(&ce, " . (isset($this->extends[0]) ? "class_entry_" . str_replace("\\", "_", $this->extends[0]->toString()) : "NULL") . ");\n"; } else { $code .= "\tclass_entry = zend_register_internal_interface(&ce);\n"; } } if ($this->getFlagsAsString()) { $code .= "\tclass_entry->ce_flags |= " . $this->getFlagsAsString() . ";\n"; } $implements = array_map( function (Name $item) { return "class_entry_" . implode("_", $item->parts); }, $this->type === "interface" ? $this->extends : $this->implements ); if (!empty($implements)) { $code .= "\tzend_class_implements(class_entry, " . count($implements) . ", " . implode(", ", $implements) . ");\n"; } if ($this->alias) { $code .= "\tzend_register_class_alias(\"" . str_replace("\\", "\\\\", $this->alias) . "\", class_entry);\n"; } foreach ($this->enumCaseInfos as $enumCase) { $code .= $enumCase->getDeclaration(); } foreach ($this->propertyInfos as $property) { $code .= $property->getDeclaration(); } $code .= "\n\treturn class_entry;\n"; $code .= "}\n"; return $code; } private function getFlagsAsString(): string { $flags = []; if ($this->type === "trait") { $flags[] = "ZEND_ACC_TRAIT"; } if ($this->flags & Class_::MODIFIER_FINAL) { $flags[] = "ZEND_ACC_FINAL"; } if ($this->flags & Class_::MODIFIER_ABSTRACT) { $flags[] = "ZEND_ACC_ABSTRACT"; } if ($this->isDeprecated) { $flags[] = "ZEND_ACC_DEPRECATED"; } if ($this->isStrictProperties) { $flags[] = "ZEND_ACC_NO_DYNAMIC_PROPERTIES"; } if ($this->isNotSerializable) { $flags[] = "ZEND_ACC_NOT_SERIALIZABLE"; } return implode("|", $flags); } /** * @param array $classMap */ public function getClassSynopsisDocument(array $classMap): ?string { $doc = new DOMDocument(); $doc->formatOutput = true; $classSynopsis = $this->getClassSynopsisElement($doc, $classMap); if (!$classSynopsis) { return null; } $doc->appendChild($classSynopsis); return $doc->saveXML(); } /** * @param ClassInfo[] $classMap */ public function getClassSynopsisElement(DOMDocument $doc, array $classMap): ?DOMElement { $classSynopsis = $doc->createElement("classsynopsis"); $classSynopsis->appendChild(new DOMText("\n ")); $ooElement = self::createOoElement($doc, $this, true, false, false, 4); if (!$ooElement) { return null; } $classSynopsis->appendChild($ooElement); $classSynopsis->appendChild(new DOMText("\n\n ")); $classSynopsisInfo = $doc->createElement("classsynopsisinfo"); $classSynopsisInfo->appendChild(new DOMText("\n ")); $ooElement = self::createOoElement($doc, $this, false, true, false, 5); if (!$ooElement) { return null; } $classSynopsisInfo->appendChild($ooElement); $classSynopsis->appendChild($classSynopsisInfo); foreach ($this->extends as $k => $parent) { $parentInfo = $classMap[$parent->toString()] ?? null; if ($parentInfo === null) { throw new Exception("Missing parent class " . $parent->toString()); } $ooElement = self::createOoElement( $doc, $parentInfo, $this->type === "interface", false, $k === 0, 5 ); if (!$ooElement) { return null; } $classSynopsisInfo->appendChild(new DOMText("\n\n ")); $classSynopsisInfo->appendChild($ooElement); } foreach ($this->implements as $interface) { $interfaceInfo = $classMap[$interface->toString()] ?? null; if (!$interfaceInfo) { throw new Exception("Missing implemented interface " . $interface->toString()); } $ooElement = self::createOoElement($doc, $interfaceInfo, false, false, false, 5); if (!$ooElement) { return null; } $classSynopsisInfo->appendChild(new DOMText("\n\n ")); $classSynopsisInfo->appendChild($ooElement); } $classSynopsisInfo->appendChild(new DOMText("\n ")); /** @var Name[] $parentsWithInheritedProperties */ $parentsWithInheritedProperties = []; /** @var Name[] $parentsWithInheritedMethods */ $parentsWithInheritedMethods = []; $this->collectInheritedMembers($parentsWithInheritedProperties, $parentsWithInheritedMethods, $classMap); if (!empty($this->propertyInfos)) { $classSynopsis->appendChild(new DOMText("\n\n ")); $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&Properties;"); $classSynopsisInfo->setAttribute("role", "comment"); $classSynopsis->appendChild($classSynopsisInfo); foreach ($this->propertyInfos as $propertyInfo) { $classSynopsis->appendChild(new DOMText("\n ")); $fieldSynopsisElement = $propertyInfo->getFieldSynopsisElement($doc); $classSynopsis->appendChild($fieldSynopsisElement); } } if (!empty($parentsWithInheritedProperties)) { $classSynopsis->appendChild(new DOMText("\n\n ")); $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&InheritedProperties;"); $classSynopsisInfo->setAttribute("role", "comment"); $classSynopsis->appendChild($classSynopsisInfo); foreach ($parentsWithInheritedProperties as $parent) { $classSynopsis->appendChild(new DOMText("\n ")); $parentReference = self::getClassSynopsisReference($parent); $includeElement = $this->createIncludeElement( $doc, "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$parentReference')/db:partintro/db:section/db:classsynopsis/db:fieldsynopsis[preceding-sibling::db:classsynopsisinfo[1][@role='comment' and text()='&Properties;']]))" ); $classSynopsis->appendChild($includeElement); } } if (!empty($this->funcInfos)) { $classSynopsis->appendChild(new DOMText("\n\n ")); $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&Methods;"); $classSynopsisInfo->setAttribute("role", "comment"); $classSynopsis->appendChild($classSynopsisInfo); $classReference = self::getClassSynopsisReference($this->name); if ($this->hasConstructor()) { $classSynopsis->appendChild(new DOMText("\n ")); $includeElement = $this->createIncludeElement( $doc, "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:constructorsynopsis[not(@role='procedural')])" ); $classSynopsis->appendChild($includeElement); } if ($this->hasMethods()) { $classSynopsis->appendChild(new DOMText("\n ")); $includeElement = $this->createIncludeElement( $doc, "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])" ); $classSynopsis->appendChild($includeElement); } if ($this->hasDestructor()) { $classSynopsis->appendChild(new DOMText("\n ")); $includeElement = $this->createIncludeElement( $doc, "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$classReference')/db:refentry/db:refsect1[@role='description']/descendant::db:destructorsynopsis[not(@role='procedural')])" ); $classSynopsis->appendChild($includeElement); } } if (!empty($parentsWithInheritedMethods)) { $classSynopsis->appendChild(new DOMText("\n\n ")); $classSynopsisInfo = $doc->createElement("classsynopsisinfo", "&InheritedMethods;"); $classSynopsisInfo->setAttribute("role", "comment"); $classSynopsis->appendChild($classSynopsisInfo); foreach ($parentsWithInheritedMethods as $parent) { $classSynopsis->appendChild(new DOMText("\n ")); $parentReference = self::getClassSynopsisReference($parent); $includeElement = $this->createIncludeElement( $doc, "xmlns(db=http://docbook.org/ns/docbook) xpointer(id('$parentReference')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[not(@role='procedural')])" ); $classSynopsis->appendChild($includeElement); } } $classSynopsis->appendChild(new DOMText("\n ")); return $classSynopsis; } private static function createOoElement( DOMDocument $doc, ClassInfo $classInfo, bool $overrideToClass, bool $withModifiers, bool $isExtends, int $indentationLevel ): ?DOMElement { $indentation = str_repeat(" ", $indentationLevel); if ($classInfo->type !== "class" && $classInfo->type !== "interface") { echo "Class synopsis generation is not implemented for " . $classInfo->type . "\n"; return null; } $type = $overrideToClass ? "class" : $classInfo->type; $ooElement = $doc->createElement("oo$type"); $ooElement->appendChild(new DOMText("\n$indentation ")); if ($isExtends) { $ooElement->appendChild($doc->createElement('modifier', 'extends')); $ooElement->appendChild(new DOMText("\n$indentation ")); } elseif ($withModifiers) { if ($classInfo->flags & Class_::MODIFIER_FINAL) { $ooElement->appendChild($doc->createElement('modifier', 'final')); $ooElement->appendChild(new DOMText("\n$indentation ")); } if ($classInfo->flags & Class_::MODIFIER_ABSTRACT) { $ooElement->appendChild($doc->createElement('modifier', 'abstract')); $ooElement->appendChild(new DOMText("\n$indentation ")); } } $nameElement = $doc->createElement("{$type}name", $classInfo->name->toString()); $ooElement->appendChild($nameElement); $ooElement->appendChild(new DOMText("\n$indentation")); return $ooElement; } public static function getClassSynopsisFilename(Name $name): string { return strtolower(str_replace("_", "-", implode('-', $name->parts))); } public static function getClassSynopsisReference(Name $name): string { return "class." . self::getClassSynopsisFilename($name); } /** * @param Name[] $parentsWithInheritedProperties * @param Name[] $parentsWithInheritedMethods * @param array $classMap */ private function collectInheritedMembers(array &$parentsWithInheritedProperties, array &$parentsWithInheritedMethods, array $classMap): void { foreach ($this->extends as $parent) { $parentInfo = $classMap[$parent->toString()] ?? null; if (!$parentInfo) { throw new Exception("Missing parent class " . $parent->toString()); } if (!empty($parentInfo->propertyInfos) && !isset($parentsWithInheritedProperties[$parent->toString()])) { $parentsWithInheritedProperties[$parent->toString()] = $parent; } if (!isset($parentsWithInheritedMethods[$parent->toString()]) && $parentInfo->hasMethods()) { $parentsWithInheritedMethods[$parent->toString()] = $parent; } $parentInfo->collectInheritedMembers($parentsWithInheritedProperties, $parentsWithInheritedMethods, $classMap); } } private function hasConstructor(): bool { foreach ($this->funcInfos as $funcInfo) { if ($funcInfo->name->isConstructor()) { return true; } } return false; } private function hasDestructor(): bool { foreach ($this->funcInfos as $funcInfo) { if ($funcInfo->name->isDestructor()) { return true; } } return false; } private function hasMethods(): bool { foreach ($this->funcInfos as $funcInfo) { if (!$funcInfo->name->isConstructor() && !$funcInfo->name->isDestructor()) { return true; } } return false; } private function createIncludeElement(DOMDocument $doc, string $query): DOMElement { $includeElement = $doc->createElement("xi:include"); $attr = $doc->createAttribute("xpointer"); $attr->value = $query; $includeElement->appendChild($attr); $fallbackElement = $doc->createElement("xi:fallback"); $includeElement->appendChild(new DOMText("\n ")); $includeElement->appendChild($fallbackElement); $includeElement->appendChild(new DOMText("\n ")); return $includeElement; } public function __clone() { foreach ($this->propertyInfos as $key => $propertyInfo) { $this->propertyInfos[$key] = clone $propertyInfo; } foreach ($this->funcInfos as $key => $funcInfo) { $this->funcInfos[$key] = clone $funcInfo; } } } class FileInfo { /** @var FuncInfo[] */ public $funcInfos = []; /** @var ClassInfo[] */ public $classInfos = []; /** @var bool */ public $generateFunctionEntries = false; /** @var string */ public $declarationPrefix = ""; /** @var bool */ public $generateLegacyArginfo = false; /** @var bool */ public $generateClassEntries = false; /** * @return iterable */ public function getAllFuncInfos(): iterable { yield from $this->funcInfos; foreach ($this->classInfos as $classInfo) { yield from $classInfo->funcInfos; } } /** * @return iterable */ public function getAllPropertyInfos(): iterable { foreach ($this->classInfos as $classInfo) { yield from $classInfo->propertyInfos; } } public function __clone() { foreach ($this->funcInfos as $key => $funcInfo) { $this->funcInfos[$key] = clone $funcInfo; } foreach ($this->classInfos as $key => $classInfo) { $this->classInfos[$key] = clone $classInfo; } } } class DocCommentTag { /** @var string */ public $name; /** @var string|null */ public $value; public function __construct(string $name, ?string $value) { $this->name = $name; $this->value = $value; } public function getValue(): string { if ($this->value === null) { throw new Exception("@$this->name does not have a value"); } return $this->value; } public function getType(): string { $value = $this->getValue(); $matches = []; if ($this->name === "param") { preg_match('/^\s*([\w\|\\\\\[\]<>, ]+)\s*\$\w+.*$/', $value, $matches); } elseif ($this->name === "return" || $this->name === "var") { preg_match('/^\s*([\w\|\\\\\[\]<>, ]+)/', $value, $matches); } if (!isset($matches[1])) { throw new Exception("@$this->name doesn't contain a type or has an invalid format \"$value\""); } return trim($matches[1]); } public function getVariableName(): string { $value = $this->value; if ($value === null || strlen($value) === 0) { throw new Exception("@$this->name doesn't have any value"); } $matches = []; if ($this->name === "param") { preg_match('/^\s*[\w\|\\\\\[\]]+\s*\$(\w+).*$/', $value, $matches); } elseif ($this->name === "prefer-ref") { preg_match('/^\s*\$(\w+).*$/', $value, $matches); } if (!isset($matches[1])) { throw new Exception("@$this->name doesn't contain a variable name or has an invalid format \"$value\""); } return $matches[1]; } } /** @return DocCommentTag[] */ function parseDocComment(DocComment $comment): array { $commentText = substr($comment->getText(), 2, -2); $tags = []; foreach (explode("\n", $commentText) as $commentLine) { $regex = '/^\*\s*@([a-z-]+)(?:\s+(.+))?$/'; if (preg_match($regex, trim($commentLine), $matches)) { $tags[] = new DocCommentTag($matches[1], $matches[2] ?? null); } } return $tags; } function parseFunctionLike( PrettyPrinterAbstract $prettyPrinter, FunctionOrMethodName $name, int $classFlags, int $flags, Node\FunctionLike $func, ?string $cond ): FuncInfo { try { $comment = $func->getDocComment(); $paramMeta = []; $aliasType = null; $alias = null; $isDeprecated = false; $verify = true; $docReturnType = null; $tentativeReturnType = false; $docParamTypes = []; $refcount = null; if ($comment) { $tags = parseDocComment($comment); foreach ($tags as $tag) { if ($tag->name === 'prefer-ref') { $varName = $tag->getVariableName(); if (!isset($paramMeta[$varName])) { $paramMeta[$varName] = []; } $paramMeta[$varName]['preferRef'] = true; } else if ($tag->name === 'alias' || $tag->name === 'implementation-alias') { $aliasType = $tag->name; $aliasParts = explode("::", $tag->getValue()); if (count($aliasParts) === 1) { $alias = new FunctionName(new Name($aliasParts[0])); } else { $alias = new MethodName(new Name($aliasParts[0]), $aliasParts[1]); } } else if ($tag->name === 'deprecated') { $isDeprecated = true; } else if ($tag->name === 'no-verify') { $verify = false; } else if ($tag->name === 'tentative-return-type') { $tentativeReturnType = true; } else if ($tag->name === 'return') { $docReturnType = $tag->getType(); } else if ($tag->name === 'param') { $docParamTypes[$tag->getVariableName()] = $tag->getType(); } else if ($tag->name === 'refcount') { $refcount = $tag->getValue(); } } } $varNameSet = []; $args = []; $numRequiredArgs = 0; $foundVariadic = false; foreach ($func->getParams() as $i => $param) { $varName = $param->var->name; $preferRef = !empty($paramMeta[$varName]['preferRef']); unset($paramMeta[$varName]); if (isset($varNameSet[$varName])) { throw new Exception("Duplicate parameter name $varName"); } $varNameSet[$varName] = true; if ($preferRef) { $sendBy = ArgInfo::SEND_PREFER_REF; } else if ($param->byRef) { $sendBy = ArgInfo::SEND_BY_REF; } else { $sendBy = ArgInfo::SEND_BY_VAL; } if ($foundVariadic) { throw new Exception("Only the last parameter can be variadic"); } $type = $param->type ? Type::fromNode($param->type) : null; if ($type === null && !isset($docParamTypes[$varName])) { throw new Exception("Missing parameter type"); } if ($param->default instanceof Expr\ConstFetch && $param->default->name->toLowerString() === "null" && $type && !$type->isNullable() ) { $simpleType = $type->tryToSimpleType(); if ($simpleType === null) { throw new Exception("Parameter $varName has null default, but is not nullable"); } } if ($param->default instanceof Expr\ClassConstFetch && $param->default->class->toLowerString() === "self") { throw new Exception('The exact class name must be used instead of "self"'); } $foundVariadic = $param->variadic; $args[] = new ArgInfo( $varName, $sendBy, $param->variadic, $type, isset($docParamTypes[$varName]) ? Type::fromString($docParamTypes[$varName]) : null, $param->default ? $prettyPrinter->prettyPrintExpr($param->default) : null ); if (!$param->default && !$param->variadic) { $numRequiredArgs = $i + 1; } } foreach (array_keys($paramMeta) as $var) { throw new Exception("Found metadata for invalid param $var"); } $returnType = $func->getReturnType(); if ($returnType === null && $docReturnType === null && !$name->isConstructor() && !$name->isDestructor()) { throw new Exception("Missing return type"); } $return = new ReturnInfo( $func->returnsByRef(), $returnType ? Type::fromNode($returnType) : null, $docReturnType ? Type::fromString($docReturnType) : null, $tentativeReturnType, $refcount ); return new FuncInfo( $name, $classFlags, $flags, $aliasType, $alias, $isDeprecated, $verify, $args, $return, $numRequiredArgs, $cond ); } catch (Exception $e) { throw new Exception($name . "(): " .$e->getMessage()); } } function parseProperty( Name $class, int $flags, Stmt\PropertyProperty $property, ?Node $type, ?DocComment $comment, PrettyPrinterAbstract $prettyPrinter ): PropertyInfo { $phpDocType = null; $isDocReadonly = false; $link = null; if ($comment) { $tags = parseDocComment($comment); foreach ($tags as $tag) { if ($tag->name === 'var') { $phpDocType = $tag->getType(); } elseif ($tag->name === 'readonly') { $isDocReadonly = true; } elseif ($tag->name === 'link') { $link = $tag->value; } } } $propertyType = $type ? Type::fromNode($type) : null; if ($propertyType === null && !$phpDocType) { throw new Exception("Missing type for property $class::\$$property->name"); } if ($property->default instanceof Expr\ConstFetch && $property->default->name->toLowerString() === "null" && $propertyType && !$propertyType->isNullable() ) { $simpleType = $propertyType->tryToSimpleType(); if ($simpleType === null) { throw new Exception( "Property $class::\$$property->name has null default, but is not nullable"); } } return new PropertyInfo( new PropertyName($class, $property->name->__toString()), $flags, $propertyType, $phpDocType ? Type::fromString($phpDocType) : null, $property->default, $property->default ? $prettyPrinter->prettyPrintExpr($property->default) : null, $isDocReadonly, $link ); } /** * @param PropertyInfo[] $properties * @param FuncInfo[] $methods * @param EnumCaseInfo[] $enumCases */ function parseClass( Name $name, Stmt\ClassLike $class, array $properties, array $methods, array $enumCases ): ClassInfo { $flags = $class instanceof Class_ ? $class->flags : 0; $comment = $class->getDocComment(); $alias = null; $isDeprecated = false; $isStrictProperties = false; $isNotSerializable = false; if ($comment) { $tags = parseDocComment($comment); foreach ($tags as $tag) { if ($tag->name === 'alias') { $alias = $tag->getValue(); } else if ($tag->name === 'deprecated') { $isDeprecated = true; } else if ($tag->name === 'strict-properties') { $isStrictProperties = true; } else if ($tag->name === 'not-serializable') { $isNotSerializable = true; } } } $extends = []; $implements = []; if ($class instanceof Class_) { $classKind = "class"; if ($class->extends) { $extends[] = $class->extends; } $implements = $class->implements; } elseif ($class instanceof Interface_) { $classKind = "interface"; $extends = $class->extends; } else if ($class instanceof Trait_) { $classKind = "trait"; } else if ($class instanceof Enum_) { $classKind = "enum"; $implements = $class->implements; } else { throw new Exception("Unknown class kind " . get_class($class)); } return new ClassInfo( $name, $flags, $classKind, $alias, $class instanceof Enum_ && $class->scalarType !== null ? SimpleType::fromNode($class->scalarType) : null, $isDeprecated, $isStrictProperties, $isNotSerializable, $extends, $implements, $properties, $methods, $enumCases ); } function handlePreprocessorConditions(array &$conds, Stmt $stmt): ?string { foreach ($stmt->getComments() as $comment) { $text = trim($comment->getText()); if (preg_match('/^#\s*if\s+(.+)$/', $text, $matches)) { $conds[] = $matches[1]; } else if (preg_match('/^#\s*ifdef\s+(.+)$/', $text, $matches)) { $conds[] = "defined($matches[1])"; } else if (preg_match('/^#\s*ifndef\s+(.+)$/', $text, $matches)) { $conds[] = "!defined($matches[1])"; } else if (preg_match('/^#\s*else$/', $text)) { if (empty($conds)) { throw new Exception("Encountered else without corresponding #if"); } $cond = array_pop($conds); $conds[] = "!($cond)"; } else if (preg_match('/^#\s*endif$/', $text)) { if (empty($conds)) { throw new Exception("Encountered #endif without corresponding #if"); } array_pop($conds); } else if ($text[0] === '#') { throw new Exception("Unrecognized preprocessor directive \"$text\""); } } return empty($conds) ? null : implode(' && ', $conds); } function getFileDocComment(array $stmts): ?DocComment { if (empty($stmts)) { return null; } $comments = $stmts[0]->getComments(); if (empty($comments)) { return null; } if ($comments[0] instanceof DocComment) { return $comments[0]; } return null; } function handleStatements(FileInfo $fileInfo, array $stmts, PrettyPrinterAbstract $prettyPrinter) { $conds = []; foreach ($stmts as $stmt) { if ($stmt instanceof Stmt\Nop) { continue; } if ($stmt instanceof Stmt\Namespace_) { handleStatements($fileInfo, $stmt->stmts, $prettyPrinter); continue; } $cond = handlePreprocessorConditions($conds, $stmt); if ($stmt instanceof Stmt\Function_) { $fileInfo->funcInfos[] = parseFunctionLike( $prettyPrinter, new FunctionName($stmt->namespacedName), 0, 0, $stmt, $cond ); continue; } if ($stmt instanceof Stmt\ClassLike) { $className = $stmt->namespacedName; $propertyInfos = []; $methodInfos = []; $enumCaseInfos = []; foreach ($stmt->stmts as $classStmt) { $cond = handlePreprocessorConditions($conds, $classStmt); if ($classStmt instanceof Stmt\Nop) { continue; } $classFlags = $stmt instanceof Class_ ? $stmt->flags : 0; $abstractFlag = $stmt instanceof Stmt\Interface_ ? Class_::MODIFIER_ABSTRACT : 0; if ($classStmt instanceof Stmt\Property) { if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) { throw new Exception("Visibility modifier is required"); } foreach ($classStmt->props as $property) { $propertyInfos[] = parseProperty( $className, $classStmt->flags, $property, $classStmt->type, $classStmt->getDocComment(), $prettyPrinter ); } } else if ($classStmt instanceof Stmt\ClassMethod) { if (!($classStmt->flags & Class_::VISIBILITY_MODIFIER_MASK)) { throw new Exception("Visibility modifier is required"); } $methodInfos[] = parseFunctionLike( $prettyPrinter, new MethodName($className, $classStmt->name->toString()), $classFlags, $classStmt->flags | $abstractFlag, $classStmt, $cond ); } else if ($classStmt instanceof Stmt\EnumCase) { $enumCaseInfos[] = new EnumCaseInfo( $classStmt->name->toString(), $classStmt->expr); } else { throw new Exception("Not implemented {$classStmt->getType()}"); } } $fileInfo->classInfos[] = parseClass( $className, $stmt, $propertyInfos, $methodInfos, $enumCaseInfos); continue; } throw new Exception("Unexpected node {$stmt->getType()}"); } } function parseStubFile(string $code): FileInfo { $lexer = new PhpParser\Lexer\Emulative(); $parser = new PhpParser\Parser\Php7($lexer); $nodeTraverser = new PhpParser\NodeTraverser; $nodeTraverser->addVisitor(new PhpParser\NodeVisitor\NameResolver); $prettyPrinter = new class extends Standard { protected function pName_FullyQualified(Name\FullyQualified $node) { return implode('\\', $node->parts); } }; $stmts = $parser->parse($code); $nodeTraverser->traverse($stmts); $fileInfo = new FileInfo; $fileDocComment = getFileDocComment($stmts); if ($fileDocComment) { $fileTags = parseDocComment($fileDocComment); foreach ($fileTags as $tag) { if ($tag->name === 'generate-function-entries') { $fileInfo->generateFunctionEntries = true; $fileInfo->declarationPrefix = $tag->value ? $tag->value . " " : ""; } else if ($tag->name === 'generate-legacy-arginfo') { $fileInfo->generateLegacyArginfo = true; } else if ($tag->name === 'generate-class-entries') { $fileInfo->generateClassEntries = true; $fileInfo->declarationPrefix = $tag->value ? $tag->value . " " : ""; } } } // Generating class entries require generating function/method entries if ($fileInfo->generateClassEntries && !$fileInfo->generateFunctionEntries) { $fileInfo->generateFunctionEntries = true; } handleStatements($fileInfo, $stmts, $prettyPrinter); return $fileInfo; } function funcInfoToCode(FuncInfo $funcInfo): string { $code = ''; $returnType = $funcInfo->return->type; $isTentativeReturnType = $funcInfo->return->tentativeReturnType; if ($returnType !== null) { if (null !== $simpleReturnType = $returnType->tryToSimpleType()) { if ($simpleReturnType->isBuiltin) { $code .= sprintf( "%s(%s, %d, %d, %s, %d)\n", $isTentativeReturnType ? "ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_INFO_EX" : "ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX", $funcInfo->getArgInfoName(), $funcInfo->return->byRef, $funcInfo->numRequiredArgs, $simpleReturnType->toTypeCode(), $returnType->isNullable() ); } else { $code .= sprintf( "%s(%s, %d, %d, %s, %d)\n", $isTentativeReturnType ? "ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX" : "ZEND_BEGIN_ARG_WITH_RETURN_OBJ_INFO_EX", $funcInfo->getArgInfoName(), $funcInfo->return->byRef, $funcInfo->numRequiredArgs, $simpleReturnType->toEscapedName(), $returnType->isNullable() ); } } else { $arginfoType = $returnType->toArginfoType(); if ($arginfoType->hasClassType()) { $code .= sprintf( "%s(%s, %d, %d, %s, %s)\n", $isTentativeReturnType ? "ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_TYPE_MASK_EX" : "ZEND_BEGIN_ARG_WITH_RETURN_OBJ_TYPE_MASK_EX", $funcInfo->getArgInfoName(), $funcInfo->return->byRef, $funcInfo->numRequiredArgs, $arginfoType->toClassTypeString(), $arginfoType->toTypeMask() ); } else { $code .= sprintf( "%s(%s, %d, %d, %s)\n", $isTentativeReturnType ? "ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_TYPE_MASK_EX" : "ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX", $funcInfo->getArgInfoName(), $funcInfo->return->byRef, $funcInfo->numRequiredArgs, $arginfoType->toTypeMask() ); } } } else { $code .= sprintf( "ZEND_BEGIN_ARG_INFO_EX(%s, 0, %d, %d)\n", $funcInfo->getArgInfoName(), $funcInfo->return->byRef, $funcInfo->numRequiredArgs ); } foreach ($funcInfo->args as $argInfo) { $argKind = $argInfo->isVariadic ? "ARG_VARIADIC" : "ARG"; $argDefaultKind = $argInfo->hasProperDefaultValue() ? "_WITH_DEFAULT_VALUE" : ""; $argType = $argInfo->type; if ($argType !== null) { if (null !== $simpleArgType = $argType->tryToSimpleType()) { if ($simpleArgType->isBuiltin) { $code .= sprintf( "\tZEND_%s_TYPE_INFO%s(%s, %s, %s, %d%s)\n", $argKind, $argDefaultKind, $argInfo->getSendByString(), $argInfo->name, $simpleArgType->toTypeCode(), $argType->isNullable(), $argInfo->hasProperDefaultValue() ? ", " . $argInfo->getDefaultValueAsArginfoString() : "" ); } else { $code .= sprintf( "\tZEND_%s_OBJ_INFO%s(%s, %s, %s, %d%s)\n", $argKind,$argDefaultKind, $argInfo->getSendByString(), $argInfo->name, $simpleArgType->toEscapedName(), $argType->isNullable(), $argInfo->hasProperDefaultValue() ? ", " . $argInfo->getDefaultValueAsArginfoString() : "" ); } } else { $arginfoType = $argType->toArginfoType(); if ($arginfoType->hasClassType()) { $code .= sprintf( "\tZEND_%s_OBJ_TYPE_MASK(%s, %s, %s, %s%s)\n", $argKind, $argInfo->getSendByString(), $argInfo->name, $arginfoType->toClassTypeString(), $arginfoType->toTypeMask(), !$argInfo->isVariadic ? ", " . $argInfo->getDefaultValueAsArginfoString() : "" ); } else { $code .= sprintf( "\tZEND_%s_TYPE_MASK(%s, %s, %s, %s)\n", $argKind, $argInfo->getSendByString(), $argInfo->name, $arginfoType->toTypeMask(), $argInfo->getDefaultValueAsArginfoString() ); } } } else { $code .= sprintf( "\tZEND_%s_INFO%s(%s, %s%s)\n", $argKind, $argDefaultKind, $argInfo->getSendByString(), $argInfo->name, $argInfo->hasProperDefaultValue() ? ", " . $argInfo->getDefaultValueAsArginfoString() : "" ); } } $code .= "ZEND_END_ARG_INFO()"; return $code . "\n"; } /** @param FuncInfo[] $generatedFuncInfos */ function findEquivalentFuncInfo(array $generatedFuncInfos, FuncInfo $funcInfo): ?FuncInfo { foreach ($generatedFuncInfos as $generatedFuncInfo) { if ($generatedFuncInfo->equalsApartFromNameAndRefcount($funcInfo)) { return $generatedFuncInfo; } } return null; } /** @param iterable $funcInfos */ function generateCodeWithConditions( iterable $funcInfos, string $separator, Closure $codeGenerator): string { $code = ""; foreach ($funcInfos as $funcInfo) { $funcCode = $codeGenerator($funcInfo); if ($funcCode === null) { continue; } $code .= $separator; if ($funcInfo->cond) { $code .= "#if {$funcInfo->cond}\n"; $code .= $funcCode; $code .= "#endif\n"; } else { $code .= $funcCode; } } return $code; } function generateArgInfoCode(FileInfo $fileInfo, string $stubHash): string { $code = "/* This is a generated file, edit the .stub.php file instead.\n" . " * Stub hash: $stubHash */\n"; $generatedFuncInfos = []; $code .= generateCodeWithConditions( $fileInfo->getAllFuncInfos(), "\n", function (FuncInfo $funcInfo) use(&$generatedFuncInfos) { /* If there already is an equivalent arginfo structure, only emit a #define */ if ($generatedFuncInfo = findEquivalentFuncInfo($generatedFuncInfos, $funcInfo)) { $code = sprintf( "#define %s %s\n", $funcInfo->getArgInfoName(), $generatedFuncInfo->getArgInfoName() ); } else { $code = funcInfoToCode($funcInfo); } $generatedFuncInfos[] = $funcInfo; return $code; } ); if ($fileInfo->generateFunctionEntries) { $code .= "\n\n"; $generatedFunctionDeclarations = []; $code .= generateCodeWithConditions( $fileInfo->getAllFuncInfos(), "", function (FuncInfo $funcInfo) use($fileInfo, &$generatedFunctionDeclarations) { $key = $funcInfo->getDeclarationKey(); if (isset($generatedFunctionDeclarations[$key])) { return null; } $generatedFunctionDeclarations[$key] = true; return $fileInfo->declarationPrefix . $funcInfo->getDeclaration(); } ); if (!empty($fileInfo->funcInfos)) { $code .= generateFunctionEntries(null, $fileInfo->funcInfos); } foreach ($fileInfo->classInfos as $classInfo) { $code .= generateFunctionEntries($classInfo->name, $classInfo->funcInfos); } } if ($fileInfo->generateClassEntries) { $code .= generateClassEntryCode($fileInfo); } return $code; } function generateClassEntryCode(FileInfo $fileInfo): string { $code = ""; foreach ($fileInfo->classInfos as $class) { $code .= "\n" . $class->getRegistration(); } return $code; } /** @param FuncInfo[] $funcInfos */ function generateFunctionEntries(?Name $className, array $funcInfos): string { $code = ""; $functionEntryName = "ext_functions"; if ($className) { $underscoreName = implode("_", $className->parts); $functionEntryName = "class_{$underscoreName}_methods"; } $code .= "\n\nstatic const zend_function_entry {$functionEntryName}[] = {\n"; $code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) { return $funcInfo->getFunctionEntry(); }); $code .= "\tZEND_FE_END\n"; $code .= "};\n"; return $code; } /** @param FuncInfo $funcInfos */ function generateOptimizerInfo(array $funcInfos): string { $code = "/* This is a generated file, edit the .stub.php files instead. */\n\n"; $code .= "static const func_info_t func_infos[] = {\n"; $code .= generateCodeWithConditions($funcInfos, "", function (FuncInfo $funcInfo) { return $funcInfo->getOptimizerInfo(); }); $code .= "};\n"; return $code; } /** * @param ClassInfo[] $classMap * @return array */ function generateClassSynopses(array $classMap): array { $result = []; foreach ($classMap as $classInfo) { $classSynopsis = $classInfo->getClassSynopsisDocument($classMap); if ($classSynopsis !== null) { $result[ClassInfo::getClassSynopsisFilename($classInfo->name) . ".xml"] = $classSynopsis; } } return $result; } /** * @param ClassInfo[] $classMap * @return array */ function replaceClassSynopses(string $targetDirectory, array $classMap): array { $classSynopses = []; $it = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($targetDirectory), RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($it as $file) { $pathName = $file->getPathName(); if (!preg_match('/\.xml$/i', $pathName)) { continue; } $xml = file_get_contents($pathName); if ($xml === false) { continue; } if (stripos($xml, "formatOutput = false; $doc->preserveWhiteSpace = true; $doc->validateOnParse = true; $success = $doc->loadXML($replacedXml); if (!$success) { echo "Failed opening $pathName\n"; continue; } $classSynopsisElements = []; foreach ($doc->getElementsByTagName("classsynopsis") as $element) { $classSynopsisElements[] = $element; } foreach ($classSynopsisElements as $classSynopsis) { if (!$classSynopsis instanceof DOMElement) { continue; } $firstChild = $classSynopsis->firstElementChild; if ($firstChild === null) { continue; } $firstChild = $firstChild->firstElementChild; if ($firstChild === null) { continue; } $className = $firstChild->textContent; if (!isset($classMap[$className])) { continue; } $classInfo = $classMap[$className]; $newClassSynopsis = $classInfo->getClassSynopsisElement($doc, $classMap); if ($newClassSynopsis === null) { continue; } // Check if there is any change - short circuit if there is not any. if (replaceAndCompareXmls($doc, $classSynopsis, $newClassSynopsis)) { continue; } // Return the updated XML $replacedXml = $doc->saveXML(); $replacedXml = preg_replace( [ "/REPLACED-ENTITY-([A-Za-z0-9._{}%-]+?;)/", "//i", "//i", "//i", "//i", ], [ "&$1", "", "", "", "", ], $replacedXml ); $classSynopses[$pathName] = $replacedXml; } } return $classSynopses; } function getReplacedSynopsisXml(string $xml): string { return preg_replace( [ "/&([A-Za-z0-9._{}%-]+?;)/", "/<(\/)*xi:([A-Za-z]+?)/" ], [ "REPLACED-ENTITY-$1", "<$1XI$2", ], $xml ); } /** * @param array $funcMap * @param array $aliasMap * @return array */ function generateMethodSynopses(array $funcMap, array $aliasMap): array { $result = []; foreach ($funcMap as $funcInfo) { $methodSynopsis = $funcInfo->getMethodSynopsisDocument($funcMap, $aliasMap); if ($methodSynopsis !== null) { $result[$funcInfo->name->getMethodSynopsisFilename() . ".xml"] = $methodSynopsis; } } return $result; } /** * @param array $funcMap * @param array $aliasMap * @return array */ function replaceMethodSynopses(string $targetDirectory, array $funcMap, array $aliasMap): array { $methodSynopses = []; $it = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($targetDirectory), RecursiveIteratorIterator::LEAVES_ONLY ); foreach ($it as $file) { $pathName = $file->getPathName(); if (!preg_match('/\.xml$/i', $pathName)) { continue; } $xml = file_get_contents($pathName); if ($xml === false) { continue; } if (stripos($xml, "formatOutput = false; $doc->preserveWhiteSpace = true; $doc->validateOnParse = true; $success = $doc->loadXML($replacedXml); if (!$success) { echo "Failed opening $pathName\n"; continue; } $methodSynopsisElements = []; foreach ($doc->getElementsByTagName("constructorsynopsis") as $element) { $methodSynopsisElements[] = $element; } foreach ($doc->getElementsByTagName("destructorsynopsis") as $element) { $methodSynopsisElements[] = $element; } foreach ($doc->getElementsByTagName("methodsynopsis") as $element) { $methodSynopsisElements[] = $element; } foreach ($methodSynopsisElements as $methodSynopsis) { if (!$methodSynopsis instanceof DOMElement) { continue; } $list = $methodSynopsis->getElementsByTagName("methodname"); $item = $list->item(0); if (!$item instanceof DOMElement) { continue; } $funcName = $item->textContent; if (!isset($funcMap[$funcName])) { continue; } $funcInfo = $funcMap[$funcName]; $newMethodSynopsis = $funcInfo->getMethodSynopsisElement($funcMap, $aliasMap, $doc); if ($newMethodSynopsis === null) { continue; } // Retrieve current signature $params = []; $list = $methodSynopsis->getElementsByTagName("methodparam"); foreach ($list as $i => $item) { if (!$item instanceof DOMElement) { continue; } $paramList = $item->getElementsByTagName("parameter"); if ($paramList->count() !== 1) { continue; } $paramName = $paramList->item(0)->textContent; $paramTypes = []; $paramList = $item->getElementsByTagName("type"); foreach ($paramList as $type) { if (!$type instanceof DOMElement) { continue; } $paramTypes[] = $type->textContent; } $params[$paramName] = ["index" => $i, "type" => $paramTypes]; } // Check if there is any change - short circuit if there is not any. if (replaceAndCompareXmls($doc, $methodSynopsis, $newMethodSynopsis)) { continue; } // Update parameter references $paramList = $doc->getElementsByTagName("parameter"); /** @var DOMElement $paramElement */ foreach ($paramList as $paramElement) { if ($paramElement->parentNode && $paramElement->parentNode->nodeName === "methodparam") { continue; } $name = $paramElement->textContent; if (!isset($params[$name])) { continue; } $index = $params[$name]["index"]; if (!isset($funcInfo->args[$index])) { continue; } $paramElement->textContent = $funcInfo->args[$index]->name; } // Return the updated XML $replacedXml = $doc->saveXML(); $replacedXml = preg_replace( [ "/REPLACED-ENTITY-([A-Za-z0-9._{}%-]+?;)/", "//i", "//i", ], [ "&$1", "", "", ], $replacedXml ); $methodSynopses[$pathName] = $replacedXml; } } return $methodSynopses; } function replaceAndCompareXmls(DOMDocument $doc, DOMElement $originalSynopsis, DOMElement $newSynopsis): bool { $docComparator = new DOMDocument(); $docComparator->preserveWhiteSpace = false; $docComparator->formatOutput = true; $xml1 = $doc->saveXML($originalSynopsis); $xml1 = getReplacedSynopsisXml($xml1); $docComparator->loadXML($xml1); $xml1 = $docComparator->saveXML(); $originalSynopsis->parentNode->replaceChild($newSynopsis, $originalSynopsis); $xml2 = $doc->saveXML($newSynopsis); $xml2 = getReplacedSynopsisXml($xml2); $docComparator->loadXML($xml2); $xml2 = $docComparator->saveXML(); return $xml1 === $xml2; } function installPhpParser(string $version, string $phpParserDir) { $lockFile = __DIR__ . "/PHP-Parser-install-lock"; $lockFd = fopen($lockFile, 'w+'); if (!flock($lockFd, LOCK_EX)) { throw new Exception("Failed to acquire installation lock"); } try { // Check whether a parallel process has already installed PHP-Parser. if (is_dir($phpParserDir)) { return; } $cwd = getcwd(); chdir(__DIR__); $tarName = "v$version.tar.gz"; passthru("wget https://github.com/nikic/PHP-Parser/archive/$tarName", $exit); if ($exit !== 0) { passthru("curl -LO https://github.com/nikic/PHP-Parser/archive/$tarName", $exit); } if ($exit !== 0) { throw new Exception("Failed to download PHP-Parser tarball"); } if (!mkdir($phpParserDir)) { throw new Exception("Failed to create directory $phpParserDir"); } passthru("tar xvzf $tarName -C PHP-Parser-$version --strip-components 1", $exit); if ($exit !== 0) { throw new Exception("Failed to extract PHP-Parser tarball"); } unlink(__DIR__ . "/$tarName"); chdir($cwd); } finally { flock($lockFd, LOCK_UN); @unlink($lockFile); } } function initPhpParser() { static $isInitialized = false; if ($isInitialized) { return; } if (!extension_loaded("tokenizer")) { throw new Exception("The \"tokenizer\" extension is not available"); } $isInitialized = true; $version = "4.13.0"; $phpParserDir = __DIR__ . "/PHP-Parser-$version"; if (!is_dir($phpParserDir)) { installPhpParser($version, $phpParserDir); } spl_autoload_register(function(string $class) use($phpParserDir) { if (strpos($class, "PhpParser\\") === 0) { $fileName = $phpParserDir . "/lib/" . str_replace("\\", "/", $class) . ".php"; require $fileName; } }); } $optind = null; $options = getopt( "fh", [ "force-regeneration", "parameter-stats", "help", "verify", "generate-classsynopses", "replace-classsynopses", "generate-methodsynopses", "replace-methodsynopses", "generate-optimizer-info" ], $optind ); $context = new Context; $printParameterStats = isset($options["parameter-stats"]); $verify = isset($options["verify"]); $generateClassSynopses = isset($options["generate-classsynopses"]); $replaceClassSynopses = isset($options["replace-classsynopses"]); $generateMethodSynopses = isset($options["generate-methodsynopses"]); $replaceMethodSynopses = isset($options["replace-methodsynopses"]); $generateOptimizerInfo = isset($options["generate-optimizer-info"]); $context->forceRegeneration = isset($options["f"]) || isset($options["force-regeneration"]); $context->forceParse = $context->forceRegeneration || $printParameterStats || $verify || $generateClassSynopses || $generateOptimizerInfo || $replaceClassSynopses || $generateMethodSynopses || $replaceMethodSynopses; $targetSynopses = $argv[$argc - 1] ?? null; if ($replaceClassSynopses && $targetSynopses === null) { die("A target class synopsis directory must be provided for.\n"); } if ($replaceMethodSynopses && $targetSynopses === null) { die("A target method synopsis directory must be provided.\n"); } if (isset($options["h"]) || isset($options["help"])) { die("\nusage: gen_stub.php [ -f | --force-regeneration ] [ --generate-classsynopses ] [ --replace-classsynopses ] [ --generate-methodsynopses ] [ --replace-methodsynopses ] [ --parameter-stats ] [ --verify ] [ --generate-optimizer-info ] [ -h | --help ] [ name.stub.php | directory ] [ directory ]\n\n"); } $fileInfos = []; $locations = array_slice($argv, $optind) ?: ['.']; foreach (array_unique($locations) as $location) { if (is_file($location)) { // Generate single file. $fileInfo = processStubFile($location, $context); if ($fileInfo) { $fileInfos[] = $fileInfo; } } else if (is_dir($location)) { array_push($fileInfos, ...processDirectory($location, $context)); } else { echo "$location is neither a file nor a directory.\n"; exit(1); } } if ($printParameterStats) { $parameterStats = []; foreach ($fileInfos as $fileInfo) { foreach ($fileInfo->getAllFuncInfos() as $funcInfo) { foreach ($funcInfo->args as $argInfo) { if (!isset($parameterStats[$argInfo->name])) { $parameterStats[$argInfo->name] = 0; } $parameterStats[$argInfo->name]++; } } } arsort($parameterStats); echo json_encode($parameterStats, JSON_PRETTY_PRINT), "\n"; } /** @var array $classMap */ $classMap = []; /** @var array $funcMap */ $funcMap = []; /** @var array $aliasMap */ $aliasMap = []; foreach ($fileInfos as $fileInfo) { foreach ($fileInfo->getAllFuncInfos() as $funcInfo) { /** @var FuncInfo $funcInfo */ $funcMap[$funcInfo->name->__toString()] = $funcInfo; // TODO: Don't use aliasMap for methodsynopsis? if ($funcInfo->aliasType === "alias") { $aliasMap[$funcInfo->alias->__toString()] = $funcInfo; } } foreach ($fileInfo->classInfos as $classInfo) { $classMap[$classInfo->name->__toString()] = $classInfo; } } if ($verify) { $errors = []; foreach ($funcMap as $aliasFunc) { if (!$aliasFunc->alias) { continue; } if (!isset($funcMap[$aliasFunc->alias->__toString()])) { $errors[] = "Aliased function {$aliasFunc->alias}() cannot be found"; continue; } if (!$aliasFunc->verify) { continue; } $aliasedFunc = $funcMap[$aliasFunc->alias->__toString()]; $aliasedArgs = $aliasedFunc->args; $aliasArgs = $aliasFunc->args; if ($aliasFunc->isInstanceMethod() !== $aliasedFunc->isInstanceMethod()) { if ($aliasFunc->isInstanceMethod()) { $aliasedArgs = array_slice($aliasedArgs, 1); } if ($aliasedFunc->isInstanceMethod()) { $aliasArgs = array_slice($aliasArgs, 1); } } array_map( function(?ArgInfo $aliasArg, ?ArgInfo $aliasedArg) use ($aliasFunc, $aliasedFunc, &$errors) { if ($aliasArg === null) { assert($aliasedArg !== null); $errors[] = "{$aliasFunc->name}(): Argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() is missing"; return null; } if ($aliasedArg === null) { $errors[] = "{$aliasedFunc->name}(): Argument \$$aliasArg->name of alias function {$aliasFunc->name}() is missing"; return null; } if ($aliasArg->name !== $aliasedArg->name) { $errors[] = "{$aliasFunc->name}(): Argument \$$aliasArg->name and argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() must have the same name"; return null; } if ($aliasArg->type != $aliasedArg->type) { $errors[] = "{$aliasFunc->name}(): Argument \$$aliasArg->name and argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() must have the same type"; } if ($aliasArg->defaultValue !== $aliasedArg->defaultValue) { $errors[] = "{$aliasFunc->name}(): Argument \$$aliasArg->name and argument \$$aliasedArg->name of aliased function {$aliasedFunc->name}() must have the same default value"; } }, $aliasArgs, $aliasedArgs ); $aliasedReturn = $aliasedFunc->return; $aliasReturn = $aliasFunc->return; if (!$aliasedFunc->name->isConstructor() && !$aliasFunc->name->isConstructor()) { $aliasedReturnType = $aliasedReturn->type ?? $aliasedReturn->phpDocType; $aliasReturnType = $aliasReturn->type ?? $aliasReturn->phpDocType; if ($aliasReturnType != $aliasedReturnType) { $errors[] = "{$aliasFunc->name}() and {$aliasedFunc->name}() must have the same return type"; } } $aliasedPhpDocReturnType = $aliasedReturn->phpDocType; $aliasPhpDocReturnType = $aliasReturn->phpDocType; if ($aliasedPhpDocReturnType != $aliasPhpDocReturnType && $aliasedPhpDocReturnType != $aliasReturn->type && $aliasPhpDocReturnType != $aliasedReturn->type) { $errors[] = "{$aliasFunc->name}() and {$aliasedFunc->name}() must have the same PHPDoc return type"; } } echo implode("\n", $errors); if (!empty($errors)) { echo "\n"; exit(1); } } if ($generateClassSynopses) { $classSynopsesDirectory = getcwd() . "/classsynopses"; $classSynopses = generateClassSynopses($classMap); if (!empty($classSynopses)) { if (!file_exists($classSynopsesDirectory)) { mkdir($classSynopsesDirectory); } foreach ($classSynopses as $filename => $content) { if (file_put_contents("$classSynopsesDirectory/$filename", $content)) { echo "Saved $filename\n"; } } } } if ($replaceClassSynopses) { $classSynopses = replaceClassSynopses($targetSynopses, $classMap); foreach ($classSynopses as $filename => $content) { if (file_put_contents($filename, $content)) { echo "Saved $filename\n"; } } } if ($generateMethodSynopses) { $methodSynopsesDirectory = getcwd() . "/methodsynopses"; $methodSynopses = generateMethodSynopses($funcMap, $aliasMap); if (!empty($methodSynopses)) { if (!file_exists($methodSynopsesDirectory)) { mkdir($methodSynopsesDirectory); } foreach ($methodSynopses as $filename => $content) { if (file_put_contents("$methodSynopsesDirectory/$filename", $content)) { echo "Saved $filename\n"; } } } } if ($replaceMethodSynopses) { $methodSynopses = replaceMethodSynopses($targetSynopses, $funcMap, $aliasMap); foreach ($methodSynopses as $filename => $content) { if (file_put_contents($filename, $content)) { echo "Saved $filename\n"; } } } if ($generateOptimizerInfo) { $filename = dirname(__FILE__, 2) . "/Zend/Optimizer/zend_func_infos.h"; $optimizerInfo = generateOptimizerInfo($funcMap); if (file_put_contents($filename, $optimizerInfo)) { echo "Saved $filename\n"; } } PK!modules/exif.sonuȯPK!˨7modules/xmlreader.sonuȯPK!;w#wmodules/xmlwriter.sonuȯPK!bmodules/pdo_pgsql.sonuȯPK!xRxRmodules/fileinfo.sonuȯPK!0f0fvqWmodules/gmp.sonuȯPK!5QpDpDXmodules/pdo.sonuȯPK!%''[modules/tidy.sonuȯPK!LJݙmmD\modules/clos_ssa.sonuȯPK!1?@@|\modules/tokenizer.sonuȯPK!spY]modules/json.sonuȯPK![W5^modules/sockets.sonuȯPK!\-VA:`modules/soap.sonuȯPK!Fhfmodules/posix.sonuȯPK!g}fmodules/pgsql.sonuȯPK!HipSpSimodules/ctype.sonuȯPK!UXRXRp0jmodules/phar.sonuȯPK!iomodules/iconv.sonuȯPK!Z apmodules/gd.sonuȯPK!xmodules/curl.sonuȯPK!0U~00 zmodules/imap.sonuȯPK!YLn||{modules/zip.sonuȯPK!rF-mmw}modules/ftp.sonuȯPK!C&..~modules/xml.sonuȯPK!y%0 0 modules/intl.sonuȯPK!I#<<[modules/sqlite3.sonuȯPK!m``e,modules/pdo_sqlite.sonuȯPK!R 88 modules/xsl.sonuȯPK!modules/dom.sonuȯPK!M_00>modules/bz2.sonuȯPK!zᤥ<Ւmodules/bcmath.sonuȯPK!!88-modules/mbstring.sonuȯPK!pPPBmodules/simplexml.sonuȯPK!+=8Q8Qԓmodules/gettext.sonuȯPK!qNmodules/calendar.sonuȯPK!;modules/xmlrpc.sonuȯPK!;~̉̉2build/config.subnuȯPK!k$88>=build/ltmain.shnu[PK!?=/build/Makefile.globalnu[PK!GIKbuild/config.guessnuȯPK!9((  build/pkg.m4nu[PK!% 5build/shtoolnuȯPK!---6build/run-tests.phpnu[PK!khdbuild/phpize.m4nu[PK! xbuild/ax_gcc_func_attribute.m4nu[PK!9CDD#build/php_cxx_compile_stdcxx.m4nu[PK!xXOOObuild/libtool.m4nu[PK!XA build/php.m4nu[PK!Cx88 build/ax_check_compile_flag.m4nu[PK!!]"&&IZend/zend_ini.hnu[PK!,Ks;Zend/zend_objects.hnu[PK!(kk[CZend/zend_config.hnu[PK! DZend/zend_stack.hnu[PK!A  NZend/zend_iterators.hnu[PK!y$$h\Zend/zend_API.hnu[PK!?EEZend/zend_hash.hnu[PK!BIPZend/zend_objects_API.hnu[PK!XHCZend/zend_ini_scanner.hnu[PK!P_ l,,Zend/zend_ast.hnu[PK!~LD}}Zend/zend_multibyte.hnu[PK!@]00*Zend/zend_smart_str.hnu[PK!'''2AZend/zend_multiply.hnu[PK!=N yhZend/zend_config.nw.hnu[PK!=kbKKrZend/zend_generators.hnu[PK!dTJ=J==Zend/zend_float.hnu[PK!~Zend/zend_arena.hnu[PK!i9FLB B Zend/zend_language_scanner.hnu[PK!7 7 ?Zend/zend_closures.hnu[PK!+O Zend/zend_ini_parser.hnu[PK!DLLZend/zend_modules.hnu[PK!+OZend/zend_vm_def.hnu[PK!^EZend/zend_build.hnu[PK!-HZend/zend_types.hnu[PK!tZend/zend_smart_string_public.hnu[PK!F,,:Zend/zend_object_handlers.hnu[PK!m\r r 'Zend/zend_highlight.hnu[PK!7o3o3Zend/zend_vm_opcodes.hnu[PK!]6@6@Zend/zend_string.hnu[PK!hzz PZend/zend_operators.hnu[PK!O6Zend/zend_inheritance.hnu[PK!I 4 4 7Zend/zend.hnu[PK!buZend/zend_smart_str_public.hnu[PK!44s Zend/zend_constants.hnu[PK!b1!!&Zend/zend_vm_execute.hnu[PK!xuhhZend/zend_ptr_stack.hnu[PK!G]mZend/zend_smart_string.hnu[PK!*pZend/zend_strtod.hnu[PK!@<<Zend/zend_execute.hnu[PK!!Q rZend/zend_list.hnu[PK!E4%K%K*Zend/zend_portability.hnu[PK!wwvZend/zend_builtin_functions.hnu[PK!,,|Zend/zend_signal.hnu[PK!``NZend/zend_long.hnu[PK!L8}s``Zend/zend_compile.hnu[PK!UN N =Zend/zend_range_check.hnu[PK! _&JZend/zend_sort.hnu[PK!/M''`QZend/zend_dtrace.hnu[PK!I&q q YZend/zend_variables.hnu[PK!r.v v gZend/zend_stream.hnu[PK!7%AA7uZend/zend_strtod_int.hnu[PK!s-k Zend/zend_type_info.hnu[PK!Ş^ddZend/zend_llist.hnu[PK!cssQZend/zend_bitset.hnu[PK!/fĈ Zend/zend_gc.hnu[PK!]+Zend/zend_extensions.hnu[PK!Zend/zend_language_parser.hnu[PK!9; !Zend/zend_language_scanner_defs.hnu[PK!@@@\Zend/zend_interfaces.hnu[PK!}ZZend/zend_errors.hnu[PK!A]zYTKTKZend/zend_alloc.hnu[PK!00QgZend/zend_virtual_cwd.hnu[PK!;(Zend/zend_exceptions.hnu[PK!%:n66Zend/zend_vm.hnu[PK!'BZend/zend_globals.hnu[PK!H pZend/zend_ts_hash.hnu[PK!~  2Zend/zend_globals_macros.hnu[PK!Zm}Zend/zend_istdiostream.hnu[PK!H\Zend/zend_ini_scanner_defs.hnu[PK!̓\ Zend/zend_alloc_sizes.hnu[PK!!Wu-##!ext/mysqlnd/mysqlnd_result_meta.hnu[PK!l ext/mysqlnd/mysqlnd_commands.hnu[PK!'';ext/mysqlnd/mysqlnd_debug.hnu[PK!_9ext/mysqlnd/php_mysqlnd.hnu[PK!(`!?ext/mysqlnd/mysqlnd_reverse_api.hnu[PK!~cL[f f Gext/mysqlnd/mysqlnd_priv.hnu[PK! BB!nQext/mysqlnd/mysqlnd_portability.hnu[PK!CAUext/mysqlnd/mysqlnd_structs.hnu[PK!5ee!ւext/mysqlnd/mysqlnd_read_buffer.hnu[PK!}D} ! ! ext/mysqlnd/mysqlnd_ext_plugin.hnu[PK!V*ext/mysqlnd/mysqlnd_protocol_frame_codec.hnu[PK!}`%*ext/mysqlnd/mysqlnd_libmysql_compat.hnu[PK!}*!(ext/mysqlnd/mysqlnd_block_alloc.hnu[PK!- >ext/mysqlnd/mysqlnd_auth.hnu[PK!QQ`ext/mysqlnd/mysqlnd_plugin.hnu[PK!]ؓƬKKext/mysqlnd/mysqlnd.hnu[PK!J"q^^:ext/mysqlnd/mysqlnd_alloc.hnu[PK!-j j Next/mysqlnd/mysqlnd_charset.hnu[PK!rNXext/mysqlnd/mysqlnd_vio.hnu[PK!eH_ext/mysqlnd/mysqlnd_result.hnu[PK!dvv#{gext/mysqlnd/mysql_float_to_double.hnu[PK!S S S Dpext/mysqlnd/mysqlnd_enum_n_def.hnu[PK!Az ext/mysqlnd/mysqlnd_statistics.hnu[PK!nˀ vext/mysqlnd/mysqlnd_ps.hnu[PK!$q 2 2 >ext/mysqlnd/mysqlnd_connection.hnu[PK!Ykw<&<&"ext/mysqlnd/mysqlnd_wireprotocol.hnu[PK!2Next/iconv/php_have_libiconv.hnu[PK!ͣdext/iconv/php_have_iconv.hnu[PK!2&ext/iconv/php_iconv_aliased_libiconv.hnu[PK!I QQRext/iconv/php_iconv.hnu[PK!2 &ext/iconv/php_have_glibc_iconv.hnu[PK!29'ext/iconv/php_have_ibm_iconv.hnu[PK!#'ext/iconv/php_iconv_broken_ignore.hnu[PK!2'ext/iconv/php_have_bsd_iconv.hnu[PK!2 H(ext/iconv/php_php_iconv_h_path.hnu[PK!2$(ext/iconv/php_iconv_supports_errno.hnu[PK!2(ext/iconv/php_php_iconv_impl.hnu[PK!q=)ext/gd/php_gd.hnu[PK!]%Cext/gd/gd_compat.hnu[PK!^  {Dext/gd/gdcache.hnu[PK!Zl춒 Oext/gd/libgd/bmp.hnu[PK!A,,Yext/gd/libgd/gdhelpers.hnu[PK!YH`ext/gd/libgd/gd_intern.hnu[PK!Aﹴ Raext/gd/libgd/gdcache.hnu[PK!AD00Llext/gd/libgd/gd_io.hnu[PK!fpext/gd/libgd/gdfontl.hnu[PK!ysext/gd/libgd/wbmp.hnu[PK!1[xext/gd/libgd/gdfontmb.hnu[PK!ٟ+zext/gd/libgd/gdfonts.hnu[PK!o%  |ext/gd/libgd/gdfontt.hnu[PK!Ѷext/gd/libgd/jisx0208.hnu[PK!@rext/gd/libgd/gdfontg.hnu[PK!+Tfext/gd/libgd/gd_errors.hnu[PK! Oext/gd/libgd/gd.hnu[PK!]\Aext/session/mod_user.hnu[PK!ļ#ext/session/mod_files.hnu[PK!,,(ext/session/php_session.hnu[PK!qźbb@Vext/xml/expat_compat.hnu[PK!5oext/xml/php_xml.hnu[PK!1ext/hash/php_hash_gost.hnu[PK!ʹOext/hash/php_hash_haval.hnu[PK!#E Lext/hash/php_hash_fnv.hnu[PK!68jCext/hash/php_hash_joaat.hnu[PK!o<".ext/hash/php_hash_whirlpool.hnu[PK!* Rext/hash/php_hash_ripemd.hnu[PK!9%%Text/hash/php_hash_snefru.hnu[PK!l8ÿext/hash/php_hash_tiger.hnu[PK!0 ext/hash/php_hash_sha3.hnu[PK!:ext/hash/php_hash.hnu[PK!&lOZZJext/hash/php_hash_crc32.hnu[PK!k>>ext/hash/php_hash_sha.hnu[PK!-lrext/hash/php_hash_md.hnu[PK!ext/hash/php_hash_adler32.hnu[PK!$UUext/dom/xml_common.hnu[PK!  &ext/standard/crypt_blowfish.hnu[PK!asyy+ext/standard/php_type.hnu[PK!D} } 1ext/standard/php_mail.hnu[PK!a;ext/standard/php_uuencode.hnu[PK!-Aext/standard/php_mt_rand.hnu[PK!pIext/standard/scanf.hnu[PK!Sext/standard/php_crypt_r.hnu[PK!<H[ext/standard/cyr_convert.hnu[PK!c?x`ext/standard/php_ftok.hnu[PK!r#eext/standard/php_incomplete_class.hnu[PK!Z[next/standard/exec.hnu[PK!b^&uext/standard/php_lcg.hnu[PK!& |ext/standard/proc_open.hnu[PK!3_?<<Yext/standard/flock_compat.hnu[PK!ext/standard/php_math.hnu[PK!+v@^^ext/standard/datetime.hnu[PK!$M%%bext/standard/php_string.hnu[PK!Знext/standard/crc32.hnu[PK!hF&ext/standard/php_metaphone.hnu[PK!Z@ext/standard/php_http.hnu[PK!6V}ext/standard/sha1.hnu[PK!? ext/standard/php_rand.hnu[PK!Ah~~[ext/standard/base64.hnu[PK!FK ext/standard/url_scanner_ex.hnu[PK!?> > . ext/standard/php_standard.hnu[PK!Gext/standard/php_iptc.hnu[PK!$|ext/standard/uniqid.hnu[PK! }b b ext/standard/php_filestat.hnu[PK!Fr+ext/standard/php_random.hnu[PK!*4ext/standard/fsock.hnu[PK!.R R :ext/standard/php_dns.hnu[PK!dK}}Fext/standard/credits_ext.hnu[PK!;~N\ext/standard/crypt_freesec.hnu[PK! J'_ext/standard/pageinfo.hnu[PK!n1__eext/standard/dl.hnu[PK!הPkext/standard/css.hnu[PK!QsTbOOpext/standard/php_link.hnu[PK!']vext/standard/php_ext_syslog.hnu[PK!0naa|ext/standard/html_tables.hnu[PK!9a0text/standard/php_assert.hnu[PK!?+?ZZFext/standard/basic_functions.hnu[PK!H+ext/standard/php_array.hnu[PK!~sDqqext/standard/php_crypt.hnu[PK!jo((&ext/standard/php_smart_string_public.hnu[PK!kl~ ~ !ext/standard/html.hnu[PK!Į +ext/standard/php_var.hnu[PK!##9ext/standard/php_browscap.hnu[PK!Kjj>ext/standard/head.hnu[PK!3h3Fext/standard/pack.hnu[PK!ziKext/standard/php_password.hnu[PK!y~!9Sext/standard/php_fopen_wrappers.hnu[PK!3MMO[ext/standard/credits_sapi.hnu[PK!Sz'rr^ext/standard/php_versioning.hnu[PK!d\Vdext/standard/php_dir.hnu[PK!fZfZkext/standard/info.hnu[PK!12s s ;ext/standard/streamsfuncs.hnu[PK!odzIIext/standard/microtime.hnu[PK! ext/standard/url.hnu[PK!56%ext/standard/credits.hnu[PK!}'@ggext/standard/md5.hnu[PK!Ø!!Iext/standard/php_smart_string.hnu[PK![$y y ext/standard/php_image.hnu[PK!uhhzext/standard/file.hnu[PK!kx%ext/standard/quot_print.hnu[PK!%LL<ext/pcre/pcrelib/pcreposix.hnu[PK!m__.ext/pcre/pcrelib/ucp.hnu[PK!粍==yCext/pcre/pcrelib/config.hnu[PK!Σ&s{{Oext/pcre/pcrelib/pcre.hnu[PK!xS pext/pcre/pcrelib/pcre_internal.hnu[PK!ױext/pcre/php_pcre.hnu[PK!޳ < < ext/mysqli/mysqli_mysqlnd.hnu[PK!&&&2ext/mysqli/php_mysqli_structs.hnu[PK!2;ext/spl/spl_fixedarray.hnu[PK!eext/spl/spl_exceptions.hnu[PK!bL66 ext/spl/spl_iterators.hnu[PK!$hF 2"ext/spl/php_spl.hnu[PK!(Dar,ext/spl/spl_array.hnu[PK!APtt3ext/spl/spl_directory.hnu[PK!p1p$$@Lext/spl/spl_functions.hnu[PK!"A}HH]ext/spl/spl_heap.hnu[PK!CgE E 5dext/spl/spl_engine.hnu[PK!8aaoext/spl/spl_observer.hnu[PK!}Ievext/spl/spl_dllist.hnu[PK!NH|ext/date/php_date.hnu[PK!-)ext/date/lib/timelib.hnu[PK!j99 ext/date/lib/timelib_config.hnu[PK!9vL" ext/libxml/php_libxml.hnu[PK!' A A %< ext/simplexml/php_simplexml_exports.hnu[PK!@8 8 FF ext/simplexml/php_simplexml.hnu[PK!u֋o o Q ext/json/php_json_scanner.hnu[PK!> [ ext/json/php_json_parser.hnu[PK! lyh ext/json/php_json.hnu[PK! x ext/sockets/php_sockets.hnu[PK! ext/phar/php_phar.hnu[PK! &QpG ext/filter/php_filter.hnu[PK!$ ext/mbstring/php_onig_compat.hnu[PK!,?XX"l ext/mbstring/oniguruma/oniguruma.hnu[PK! main/streams/php_stream_mmap.hnu[PK!RU'# main/streams/php_stream_plain_wrapper.hnu[PK!g**#3 main/streams/php_stream_transport.hnu[PK!r#Q main/streams/php_stream_userspace.hnu[PK!|q!W main/streams/php_stream_context.hnu[PK!b  &o main/streams/php_stream_glob_wrapper.hnu[PK!"vII$gw main/streams/php_stream_filter_api.hnu[PK!")&)& main/php_output.hnu[PK!=((n main/php_network.hnu[PK!iE main/build-defs.hnu[PK!0 main/php_reentrancy.hnu[PK!0(( < main/SAPI.hnu[PK!#\7 main/php_scandir.hnu[PK!AV? main/php_globals.hnu[PK!m^^mP main/php_ticks.hnu[PK!ynh h  W main/http_status_codes.hnu[PK!pc  c main/php_version.hnu[PK!mCD e main/fopen_wrappers.hnu[PK!%EII2o main/php_open_temporary_file.hnu[PK!EIv main/php_getopt.hnu[PK!ջ~ main/fastcgi.hnu[PK!]'rr main/php_streams.hnu[PK!?!main/php_syslog.hnu[PK! l9 main/php_variables.hnu[PK!c}44 main/php.hnu[PK!lɟ[/ / Jmain/php_main.hnu[PK! R11-Umain/php_config.hnu[PK!t&&Bmain/snprintf.hnu[PK!/ _main/rfc1867.hnu[PK!1lmain/spprintf.hnu[PK!7 44tmain/php_memory_streams.hnu[PK!!#umain/php_stdint.hnu[PK!4: TSRM/tsrm_config.hnu[PK!YllNTSRM/tsrm_config_common.hnu[PK!C TSRM/readdir.hnu[PK!JTSRM/tsrm_strtok_r.hnu[PK!Kcdd ĠTSRM/TSRM.hnu[PK!ع^^csapi/cli/cli.hnu[PK!'wmodules/wddx.sonuȯPK!6{  smodules/mysqli.sonuȯPK!a@_modules/opcache.sonuȯPK! pp`modules/pdo_mysql.sonuȯPK!]U modules/mysqlnd.sonuȯPK!A}88O!modules/mcrypt.sonuȯPK!OvRR"build/acinclude.m4nu[PK!dp:$build/scan_makefile_in.awknu[PK! \<$build/mkdep.awknu[PK!coc^ ^ E$Zend/zend_vm_trace_map.hnu[PK!rŌ ^P$Zend/zend_vm_trace_handlers.hnu[PK!XX7]$Zend/zend_cpuinfo.hnu[PK!cty$Zend/zend_vm_handlers.hnu[PK!r &ext/standard/hrtime.hnu[PK!"QFF &ext/standard/php_net.hnu[PK!DoDDZ&ext/gmp/php_gmp_int.hnu[PK!7`;;&build/gen_stub.phpnu[PKrr}`'